{"id":49113417,"url":"https://github.com/bernardassan/archsway","last_synced_at":"2026-04-21T05:38:50.426Z","repository":{"id":41480190,"uuid":"289587424","full_name":"bernardassan/archsway","owner":"bernardassan","description":"Archlinux on river/sway from scratch with the most minimal dependencies. DIY is awesome","archived":false,"fork":false,"pushed_at":"2026-02-12T17:32:15.000Z","size":1217,"stargazers_count":12,"open_issues_count":7,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-13T01:09:42.623Z","etag":null,"topics":["archlinux","dotfiles","linux","mpc","mpd","mpv","ncmpcpp","river","riverwm","sway","sway-config","swaybar","swaylock","swaywm","systemd","udev","waybar","wayland"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bernardassan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-23T00:12:34.000Z","updated_at":"2026-02-12T17:33:18.000Z","dependencies_parsed_at":"2023-02-04T06:45:49.158Z","dependency_job_id":"7b3a65f5-f79f-4dfb-9b7d-73b9ef114a9e","html_url":"https://github.com/bernardassan/archsway","commit_stats":null,"previous_names":["bernardassan/archsway","ultra-code/archsway"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bernardassan/archsway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardassan%2Farchsway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardassan%2Farchsway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardassan%2Farchsway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardassan%2Farchsway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bernardassan","download_url":"https://codeload.github.com/bernardassan/archsway/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardassan%2Farchsway/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32079505,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T02:38:07.213Z","status":"ssl_error","status_checked_at":"2026-04-21T02:38:06.559Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archlinux","dotfiles","linux","mpc","mpd","mpv","ncmpcpp","river","riverwm","sway","sway-config","swaybar","swaylock","swaywm","systemd","udev","waybar","wayland"],"created_at":"2026-04-21T05:38:50.200Z","updated_at":"2026-04-21T05:38:50.420Z","avatar_url":"https://github.com/bernardassan.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArchSway\nArchlinux on river/sway from scratch with the most minimal dependencies. DIY is awesome\n\n# Standard Installation Steps\n[Arch Linux Installation Guide](https://wiki.archlinux.org/title/Installation_guide)\n\n# Filesystem Setup\n- **ESP** [/efi](https://wiki.archlinux.org/title/EFI_system_partition#Create_the_partition) should be 2GiB if you plan on installing [efi applications](https://wiki.archlinux.org/title/Systemd-boot#UEFI_Shells_or_other_EFI_applications) like [arch rescue](https://codeberg.org/bernardassan/arch-rescue-image) else 512MiB otherwise\n- **ROOT** should be a (_xfs_ for hdd | _f2fs_ for nvme) with a size of **30GiB** - **60GiB**\n- **HOME** \u0026 **FILES** (_btrfs_ | _ext4_) partition with **HOME** between **60-120GiB** and **FILES** of __arbitrary size__ for multimedia content\n- **ROOT** is mounted on `/` with the dedicated **HOME** \u0026| **FILES** _subvolume_ | _partition_ mounted to `/home` and `/home/${username}/files` repectively.\n- Setup [**zram**](https://github.com/bernardassan/archsway/blob/master/etc/udev/rules.d/zram.rules) `3x` RAM size to allow running more memory hungry tasks `.eg compiling llvm, clang, clang-tools, lldb`.\n- Use a ZRAM backing device equal to RAM size **12GiB** and a [swap](https://github.com/bernardassan/archsway/blob/master/etc/fstab) partition for [**hibernation**](https://github.com/bernardassan/archsway/blob/master/etc/kernel/cmdline) also of size equal to RAM **12Gib**\n\n**NOTE:**\n- **make sure to create and mount Btrfs with Zstd compression on first mount during installation**\n- **format \u0026 mount all drives with a [logical sector or block size](https://wiki.archlinux.org/title/Advanced_Format) of 4096**\n\n## needed base system modules\n\n- Configure mkinitcpio [linux-zen.preset](https://github.com/bernardassan/archsway/blob/master/etc/mkinitcpio.d/linux-zen.preset) to generate a efi uki image\n- Use [/efi](https://wiki.archlinux.org/title/EFI_system_partition#Typical_mount_points) as ESP partition and set systemd-boot [loader.conf](https://github.com/bernardassan/archsway/blob/master/efi/loader/loader.conf) to your efi uki (unified kernel image) image\n- Extend mkinitcpio image generation with zstd [compression](https://github.com/bernardassan/archsway/blob/master/etc/mkinitcpio.conf.d/compression.conf) and add kernel [cmdline](https://github.com/bernardassan/archsway/blob/master/etc/kernel/cmdline) parameters\n- Enable systemd-boot as boot manager (`bootctl install`)\n- Enable iwd, systemd-networkd, systemd-resolved system services\n- Enabling `systemd-boot-update` service to update systemd-boot on systemd upgrade\n- river/sway as window manager with swayidle and waylock for idle and lock\n  management and levee/yambar for bar management\n    - base\n    - xfsprogs | f2fs-tools | btrfs-progs | dosfstools | exfatprogs\n    - intel-ucode microcode\n    - iwd for wifi\n    - ghostty/kitty/foot terminal\n    - Install only needed linux-firmware, check firmwares you might need with `lspci` and [use dynamic debug](https://wiki.archlinux.org/title/Linux_firmware#Detecting_loaded_firmware) to know more details about the exact firmwares loaded at kernel startup\n    - linux-zen\n    - intel-media-driver for hardware video acceleration\n    - polkit for seat and privileged access management\n    - man-db and [man-pages](https://wiki.archlinux.org/title/Man_page) and enable man-db.timer service\n    - Set up GPG with SSH authentication enabled\n    - helix/neovim for config clone [awesome-helix](https://github.com/bernardassan/awesome-helix.git) to $XDG_CONFIG_HOME/helix or [awesome-neovim](https://github.com/bernardassan/awesome-neovim.git) to $XDG_CONFIG_HOME/nvim\n    - sudo\n    - elvish/fish (set default shell with `chsh -s $(which shellname)`)\n\n### basic configuration\n\n- iwd for wifi and enable its builtin dhcp client\n- symlink /run/systemd/resolve/stub-resolv.conf to /etc/resolv.conf for DNS resolution\n- setup reflector for choosing the fastest Pacman mirror list\n- Configure network using [systemd-networkd](https://github.com/bernardassan/archsway/tree/master/etc/systemd/network) and [systemd-resolved](https://github.com/bernardassan/archsway/tree/master/etc/systemd/resolved.conf.d)\n- Setup [vconsole ](https://github.com/bernardassan/archsway/blob/master/etc/vconsole.conf) terminal fonts\n- On the freshly installed system, use the following fonts\n    + use fonts with great unicode support, like `ttf-dejavu` or `noto-fonts` as the system default font\n    + ttf-jetbrains-mono or ttc-iosevka for monospace,\n    + ttf-nerd-fonts-symbols-mono for nerd font symbols and noto-font-emoji for emoji\n    \u003e_NOTE_: don't forget to `ln -s /usr/share/fontconfig/conf.avail/10-nerd-font-symbols.conf /etc/fonts/conf.d/`\n- configure [Intel_graphics](https://wiki.archlinux.org/title/Intel_graphics) hardware acceleration\n- setup [laptop](https://wiki.archlinux.org/title/Laptop), zram, disk, network and [power management](https://wiki.archlinux.org/title/Power_management) options using [udev](https://github.com/bernardassan/archsway/tree/master/etc/udev/rules.d) rules, [sysctl](https://github.com/bernardassan/archsway/tree/master/etc/sysctl.d) and [modprobe](https://github.com/bernardassan/archsway/tree/master/etc/modprobe.d) config\n- Configure [hibernation](https://github.com/bernardassan/archsway/tree/master/etc/modprobe.d) by adding resume kernel parameter, resume hook to mkinitcpio, and rebuilding kernel\n- Enable [Active State Power Management](https://wiki.archlinux.org/title/Power_management#Active_State_Power_Management)\n  if [supported ](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/power_management_guide/aspm) and add or remove `powersave \u003e /sys/module/pcie_aspm/parameters/policy` from udev powersave rules based on the results\n- Configure sudo for current user using `sudo -E visudo -sf /etc/sudoers.d/${username}`. Example [sudoers file](https://github.com/bernardassan/archsway/tree/master/etc/sudoers.d)\n- Configure [logind](https://github.com/bernardassan/archsway/tree/master/etc/systemd/logind.conf.d), [journald](https://github.com/bernardassan/archsway/tree/master/etc/systemd/logind.conf.d) and [sleep](https://github.com/bernardassan/archsway/tree/master/etc/systemd/sleep.conf.d)\n- For extra [Performance Improvements](https://wiki.archlinux.org/title/Improving_performance)\n- For [pacman](https://wiki.archlinux.org/title/Pacman), enable the following options under the option section in /etc/pacman.conf\n```bash\n[options]\nColor\nCheckSpace\nVerbosePkgLists\nParallelDownloads = 5\n```\n- Set up [makepkg.conf](https://github.com/bernardassan/archsway/blob/master/etc/makepkg.conf.d/makepkg.conf) and Increase /tmp tmpfs size to 90% of RAM by copying and changing the Options field of `Mount` from the default size of 50% to 90% in the drop-in config file. This helps to prevent OOM when compiling clang on /tmp `sudo -E systemctl edit tmp.mount --drop-in=hugetmp.mount`\n```bash\n[Mount]\nOptions=\nOptions=mode=1777,strictatime,nosuid,nodev,size=90%%,nr_inodes=1m\n```\n\u003e_NOTE_: This is to be used in conjunction with `zram`\n\n## INSTALLS\n- base-devel for Basic c/c++ build tools to build Arch Linux packages\n- mold as linker for C, Rust and C++\n- lldb/gdb for debugging Zig, C, and C++\n- clang/gcc for C++ development with clangd\n- zig with zls for zig development\n- rustup with default profile and rust-analyzer component for Rust development\n- luajit for lua development\n- iptables-nft and nftable(automatically installed as a dependency of iptables-nft) for firewall configuration (enable the nftables service)\n- nmap and tcpdump for network analysis and auditing\n- yay for AUR package management\n- android-file-transfer with libmtp for connecting Android phones mtp management\n- aria2 as download manager\n- bat is a Cat clone with syntax highlighting and git integration\n- bluez and bluez-utils for Bluetooth\n- brightnessctl for controlling backlight\n- carapace-bin for completions in elvish\n- fzf for fuzzy search\n- vivid for LS_COLORS\n- starship for prompt\n- [Helix](https://github.com/bernardassan/awesome-helix) and [Neovim](https://github.com/bernardassan/awesome-neovim) awesomely set up with the relevant LSPs and static analyzers for `Zig`, `C`, `Rust`, `C++`, `Luajit`, `Python`, `Shell`, and `Web-Development`.\n- 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`.\n    - NOTE: to disable online mode, comment out `server dict.org` in  /etc/dict/dict.conf\n    - Make sure locale is properly configured in `DICTD_ARGS` of /etc/conf.d/dictd else, the service unit will fail\n    - Since dict uses en_US.UTF-8 by default, make sure to comment it out in /etc/locale.gen and compile it along side your locale of choice `es_MX.UTF-8`\n- ffmpegthumbnailer \u0026 gnome-epub-thumbnailer for thumbnails\n- 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\n- wlsunset for controlling screen blue light\n- git for version control\n- grim and slurp for screenshot\n- mako as a lightweight notification daemon for Wayland\n- docker for containerization of apps\n- scrcpy for mirroring android device (with adb for copying to Android)\n- libreoffice-fresh for working with openoffice documents and hunspell-en_us for spellcheck, [for help setting up spellcheck](https://ask.libreoffice.org/t/how-do-you-get-the-spell-checker-to-work/28998)\n- mpd for music daemon, ncmpcpp for ui interface, and mpc for controlling playing\n- mpv as multimedia player\n- sound-theme-freedesktop for standard sounds and tones used in Linux\n- pipewire and pipewire-audio for audio/video routing and processing, pipewire-pulse as pulseaudio replacement and WirePlumber as pipewire session manager\n- lf as file manager\n- fastfetch for displaying system information\n- openssh and rsync for syncing files with a remote over ssh\n- remmina as remote desktop client with a plugin like freerdp|libvncserver\n- usb_modeswitch for enabling modem mode for zero-cd based modems\n- wl-clipboard for wayland clipboard\n- batsignal for battery status notifications\n- kanshi for wayland output management\n- fuzzel as the application launcher\n- cliphist as clipboard history manager\n- qt5-wayland for runing qt5 apps under wayland\n- xdg-desktop-portal-wrl for WebRTC screen sharing\n- xdg-utils to assist applications with desktop integration tasks\n- yt-dlp YouTube downloader\n- zoxide for efficient directory movement\n\n## Configuring Firefox\n- Enable Firefox [Hardware video acceleration](https://wiki.archlinux.org/title/Firefox#Hardware_video_acceleration) by setting media.ffmpeg.vaapi.enabled to true and Hardware WebRender by setting `gfx.webrender.all` to `true` and `media.hardware-video-decoding.force-enabled` to `true`\n- Enable insert [new tabs after current](https://wiki.archlinux.org/title/Firefox#New_tabs_position) by setting `browser.tabs.insertAfterCurrent` to `true`\n- Enable [Firefox Profile on Ram](https://wiki.archlinux.org/title/Firefox/Profile_on_RAM) when using zram/nvme/ssd\n- Move Firefox [disk cache to ram](https://wiki.archlinux.org/title/Firefox/Tweaks#Move_disk_cache_to_RAM) by setting `browser.cache.disk.parent_directory` to `/run/user/1000/firefox`\n- Increase [session save interval](https://wiki.archlinux.org/title/Firefox/Tweaks#Longer_interval_between_session_information_record) from the default of 15 seconds (15000 milliseconds) to 30 minutes (1,800,000 milliseconds) by setting `browser.sessionstore.interval` to `1800000`\n- Enable auto [unloading of inactive tabs](https://wiki.archlinux.org/title/Firefox/Tweaks#Automatically_unload_inactive_tabs)\n\n\n## OPTIONAL\n- configure /etc/motd with the Message Of The Day Eg. `WELCOME MASTER MALPHA! WE ARE READY TO SERVE YOU!!!`\n- Checkout [Archlinux General Recommendation](https://wiki.archlinux.org/title/Firefox/Profile_on_RAM#Place_profile_in_RAM_manually)\n- enable DNSOverTLS for resolved\n- Enable synchronizing the system clock across the network by enabling [systemd-timesyncd.service](https://wiki.archlinux.org/title/Systemd-timesyncd)\n- Disable journaling to persistent storage by setting Storage in journal.conf to volatile and masking `systemd-journal-flush.service`\n- link kitty to xterm\n- Enable DNS over HTTPS in Firefox\n- modify relector configuration in /etc/xdg/reflector/reflector.conf to sort based on download rate with --sort rate\n\n## WSL\n\nInstall [ArchLinux WSL](https://archlinux.org/download/) on Windows 11 using `wsl --install archlinux`. After installing, follow these [instructions](https://wiki.archlinux.org/title/Install_Arch_Linux_on_WSL) to set up ArchLinux on WSL 2.\n- Download and install a Nerd Font of your choosing, like [IosevkaTerm](https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/IosevkaTerm/IosevkaTermNerdFontMono-Medium.ttf) and use it as your default font for Windows Terminal\n- Install starship `winget install -e --id Starship.Starship` and add `Invoke-Expression (\u0026starship init powershell)` to your $PROFILE as in [Microsoft.PowerShell_profile](https://github.com/bernardassan/archsway/tree/master/wsl/WindowsPowerShell/Microsoft.PowerShell_profile.ps1)\n- Run `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` in PowerShell to enable running of scripts\n- Add the wheel group `groupadd -f wheel` as it isn't available by default in Archlinux WSL\n- create a non-root user and add him to the wheel group `useradd -mG wheel -s /bin/elvish username`\n- Set a password for your new user with `passwd username`\n- To set a different host name, disable hostname generation, and set a static hostname in [wsl.conf](https://github.com/bernardassan/archsway/blob/899d464762fead2b17995e2fa8ba06942cc369cf/wsl/etc/wsl.conf#L6)\n- Configure [sudoers](https://github.com/bernardassan/archsway/tree/master/etc/sudoers.d) file at /etc/sudoers.d/`username`\n- clone this repo to `~/.config/dotfiles` and symlink `~/.config/dotfiles/config/elvish` to `~/.config/`[`elvish`](https://github.com/bernardassan/archsway/tree/main/config/elvish) to activate the elvish shell configuration\n- Configure [makepkg](https://github.com/bernardassan/archsway/tree/main/etc/makepkg.conf.d) and [pacman](https://github.com/bernardassan/archsway/tree/main/etc/pacman.d)\n- Install yay for AUR management with `mkdir ~/aur ; cd ~/aur ; sudo pacman -S --needed git base-devel ; git clone https://aur.archlinux.org/yay-bin.git ; cd yay-bin ; makepkg -si`\n- Setup [locale](https://wiki.archlinux.org/title/Installation_guide#Localization) as appropriate \n- Install essential utilities like `xdg-utils`, `openssh`, `man-db`, `man-pages', `carapace-bin`, `bat` and `fzf`\n- Configure `pacman` with [pacman.d/pacman.conf](https://github.com/bernardassan/archsway/blob/main/etc/pacman.d/pacman.conf) and disable/comment out `NoProgressBar` if it is enabled in your `/etc/pacman.conf`\n\n## Using a custom build WSL kernel\n- To compile the WSL kernel, you need `base-devel`, `bc`, `cpio`, `pahole`, `python`, and `rsync`.\n- Then set `swap=32GB` in .wslconfig to ensure you can compile the kernel without running out of memory\n- Run `zcat /proc/config.gz | /bin/sed '/is not set/d' \u003e .config` to get a copy of all the set config used by the current WSL kernel\n- Run `env KCONFIG_CONFIG=Microsoft/config-wsl ./scripts/kconfig/merge_config.sh .config` to merge `.config` with `Microsoft/config-wsl`, overriding options in `Microsoft/config-wsl`.\n- Then `env KCONFIG_CONFIG=Microsoft/config-wsl make olddefconfig` or `env KCONFIG_CONFIG=Microsoft/config-wsl make oldconfig` to use default values for new kernel configs not in `$E:KCONFIG_CONFIG`.\n- ensure CONFIG_TUN=y and CONFIG_TAP=y are set in Microsoft/config-wsl to enable [userspace networking](https://www.kernel.org/doc/html/latest/networking/tuntap.html) used by podman and VPNs\n- Use mold `set-env LD mold` to link faster, this reduced the whole compile/link phase from about 1hr30min to 30min for me\n- follow instructions at [updating wsl kernel](https://learn.microsoft.com/en-us/community/content/wsl-user-msft-kernel-v6)\n- At the end, you should have a [.wslconfig](https://github.com/bernardassan/archsway/blob/master/wsl/wslconfig) like mine\n\n\n## TERMUX\nTo use [pacman](https://wiki.archlinux.org/title/Pacman) as the package manager for [Termux](https://termux.dev/en/) follow these [instructions](https://wiki.termux.com/wiki/Switching_package_manager)\nIf you want to compile [AUR](https://wiki.archlinux.org/title/Arch_User_Repository) packages follow these [instructions](https://wiki.termux.com/wiki/AUR)\n- openssl-tool\n- openssh\n- zig\n- rust\n- golang\n- python\n- bsdtar\n- fzf\n- bat\n- starship\n- fastfetch\n- git\n- helix\n- man\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardassan%2Farchsway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbernardassan%2Farchsway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardassan%2Farchsway/lists"}