├── LICENSE.txt
├── README.md
└── logo.png
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
70 | $ sudo dd conv=fsync oflag=direct status=progress bs=4M \ 71 | if=./archlinux-YYYY.MM.DD-x86_64.iso of=/dev/sdb 72 |73 |
96 | $ iwctl 97 | [iwd]# station wlan0 get-networks 98 | [iwd]# station wlan0 connect <Name of WiFi access point> 99 | [iwd]# exit 100 | $ ping 1.1.1.1 101 |102 |
108 | $ pacman -Syy 109 |110 |
118 | $ fdisk /dev/nvme0n1 119 | [repeat this command until existing partitions are deleted] 120 | Command (m for help): d 121 | Command (m for help): d 122 | Command (m for help): d 123 | 124 | [create partition 1: efi] 125 | Command (m for help): n 126 | Partition number (1-128, default 1): Enter ↵ 127 | First sector (..., default 2048): Enter ↵ 128 | Last sector ...: +256M 129 | 130 | [create partition 2: main] 131 | Command (m for help): n 132 | Partition number (2-128, default 2): Enter ↵ 133 | First sector (..., default ...): Enter ↵ 134 | Last sector ...: -32G // double size of your RAM 135 | 136 | [create partition 3: swap] 137 | Command (m for help): n 138 | Partition number (3-128, default 3): Enter ↵ 139 | First sector (..., default ...): Enter ↵ 140 | Last sector ...: Enter ↵ 141 | 142 | [change partition types] 143 | Command (m for help): t 144 | Partition number (1-3, default 1): 1 145 | Partion type or alias (type L to list all): uefi 146 | Command (m for help): t 147 | Partition number (1-3, default 2): 2 148 | Partion type or alias (type L to list all): linux 149 | Command (m for help): t 150 | Partition number (1-3, default 3): 3 151 | Partion type or alias (type L to list all): swap 152 | 153 | [write partitioning to disk] 154 | Command (m for help): w 155 |156 |
162 | $ mkfs.fat -F 32 /dev/nvme0n1p1 # on EFI System partition 163 | $ mkfs -t ext4 /dev/nvme0n1p2 # on Linux filesystem partition 164 | $ mkswap /dev/nvme0n1p3 # on Linux swap partition 165 |166 |
172 | $ mount /dev/nvme0n1p2 /mnt 173 | $ mkdir -p /mnt/boot/efi 174 | $ mount /dev/nvme0n1p1 /mnt/boot/efi 175 | $ swapon /dev/nvme0n1p3 176 |177 |
183 | $ pacstrap -i /mnt base linux linux-firmware sudo vim 184 | $ genfstab -U -p /mnt > /mnt/etc/fstab 185 |186 |
194 | $ arch-chroot /mnt 195 |196 |
202 | $ vim /etc/locale.gen # uncomment your locales, i.e. `en_US.UTF-8` or `en_GB.UTF-8` 203 | $ locale-gen 204 | $ echo "LANG=en_US.UTF-8" > /etc/locale.conf # choose your locale 205 | $ ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime # choose your timezone 206 | $ hwclock --systohc 207 |208 |
214 | $ echo yourhostname > /etc/hostname 215 | $ vim /etc/hosts 216 | 127.0.0.1 localhost 217 | ::1 localhost 218 | 127.0.1.1 yourhostname 219 |220 |
226 | $ useradd -m -G wheel,storage,power,audio,video -s /bin/bash yourusername 227 | $ passwd root 228 | $ passwd yourusername 229 |230 |
236 | $ visudo 237 | [uncomment following line in file] 238 | %wheel ALL=(ALL) ALL 239 |240 |
246 | $ pacman -S grub efibootmgr 247 | $ grub-install /dev/nvme0n1 248 | $ grub-mkconfig -o /boot/grub/grub.cfg 249 |250 |
256 | $ pacman -S dhcpcd networkmanager resolvconf 257 | $ systemctl enable dhcpcd 258 | $ systemctl enable NetworkManager 259 | $ systemctl enable systemd-resolved 260 |261 |
267 | $ exit 268 | $ umount /mnt/boot/efi 269 | $ umount /mnt 270 | $ reboot 271 |272 |
284 | $ timedatectl set-ntp true 285 |286 |
292 | $ nmcli device wifi connect <Name of WiFi access point> password <password> 293 |294 |
300 | $ sudo pacman -S xorg xorg-apps xorg-xinit xorg-xlsfonts xdotool xclip xsel 301 |302 |
308 | $ sudo pacman -S dbus # Message bus used by many applications 309 | $ sudo pacman -S intel-ucode # Microcode update files for Intel CPUs 310 | $ sudo pacman -S fuse2 # Interface for programs to export a filesystem to the Linux kernel 311 | $ sudo pacman -S lshw # Provides detailed information on the hardware of the machine 312 | $ sudo pacman -S powertop # A tool to diagnose issues with power consumption and power management 313 | $ sudo pacman -S inxi # Full featured CLI system information tool 314 | $ sudo pacman -S acpi # Client for battery, power, and thermal readings 315 |316 | $ sudo pacman -S base-devel # Basic tools to build Arch Linux packages 317 | $ sudo pacman -S git # Distributed version control system 318 | $ sudo pacman -S zip # Compressor/archiver for creating and modifying zipfiles 319 | $ sudo pacman -S unzip # For extracting and viewing files in .zip archives 320 | $ sudo pacman -S p7zip # For extracting and viewing files in .7z archives 321 | $ sudo pacman -S htop # Interactive CLI process viewer 322 | $ sudo pacman -S tree # A directory listing program 323 |324 | $ sudo pacman -S dialog # A tool to display dialog boxes from shell scripts 325 | $ sudo pacman -S reflector # Script to retrieve and filter the latest Pacman mirror list 326 | $ sudo pacman -S bash-completion # Programmable completion for the bash shell 327 |328 | $ sudo pacman -S iw # CLI configuration utility for wireless devices 329 | $ sudo pacman -S wpa_supplicant # A utility providing key negotiation for WPA wireless networks 330 | $ sudo pacman -S tcpdump # Powerful command-line packet analyzer 331 | $ sudo pacman -S mtr # Combines the functionality of traceroute and ping into one tool 332 | $ sudo pacman -S net-tools # Configuration tools for Linux networking 333 | $ sudo pacman -S conntrack-tools # Userspace tools to interact with the Netfilter tracking system 334 | $ sudo pacman -S ethtool # Utility for controlling network drivers and hardware 335 | $ sudo pacman -S wget # Network utility to retrieve files from the Web 336 | $ sudo pacman -S rsync # File copying tool for remote and local files 337 | $ sudo pacman -S socat # Multipurpose socket relay 338 | $ sudo pacman -S openbsd-netcat # Netcat program. OpenBSD variant. 339 | $ sudo pacman -S axel # Light command line download accelerator 340 | $ sudo pacman -S bind # I use dig utility for DNS resolution from this package 341 | 342 | 343 | 344 | 5. Install Xfce4, i3, or both: 345 | 346 |382 | 383 | 6. Install login session manager, I prefer `ly` for it's minimalism: 384 | 385 |
- 347 |
348 | # Instructions for installing Xfce4 349 | 350 | $ sudo pacman -S xfce4 351 | $ sudo pacman -S xfce4-notifyd xfce4-screensaver xfce4-screenshooter 352 | $ sudo pacman -S thunar-archive-plugin thunar-media-tags-plugin 353 | $ sudo pacman -S network-manager-applet 354 | $ sudo pacman -S xfce4-xkb-plugin xfce4-battery-plugin \ 355 | xfce4-datetime-plugin xfce4-mount-plugin \ 356 | xfce4-netload-plugin xfce4-wavelan-plugin \ 357 | xfce4-pulseaudio-plugin xfce4-weather-plugin \ 358 | xfce4-whiskermenu-plugin 359 | 360 | # Instructions for installing i3 361 | 362 | $ sudo pacman -S i3-wm i3status i3lock pango 363 | $ sudo pacman -S lxappearance 364 | 365 | # You will most probably need these apps for i3 366 | 367 | $ sudo pacman -S polybar # nice statusbar for i3-based UIs 368 | $ sudo pacman -S rofi # like dmenu, but more customizable 369 | $ sudo pacman -S alacritty # terminal emulator 370 | $ sudo pacman -S dunst # notification manager 371 | $ sudo pacman -S feh # fast and light image viewer 372 | $ sudo pacman -S xss-lock # screen lock controller 373 | $ sudo pacman -S flameshot # screenshot app 374 | $ sudo pacman -S gsimplecal # small calendar widget 375 | $ sudo pacman -S yazi # console file manager 376 | 377 | # additionals to yazi: 378 | 379 | $ sudo pacman -S ueberzugpp # viewing images in terminal 380 |381 |391 | 392 | 7. Install essential system fonts: 393 | 394 |
- 386 |
387 | $ sudo pacman -S ly 388 | $ sudo systemctl enable ly 389 |390 |400 | 401 | 8. [Optional] Enable sound support on your PC: 402 | 403 |
- 395 |
396 | $ sudo pacman -S ttf-dejavu ttf-freefont ttf-liberation ttf-droid terminus-font 397 | $ sudo pacman -S noto-fonts noto-fonts-emoji ttf-ubuntu-font-family ttf-roboto ttf-roboto-mono ttf-ibm-plex 398 |399 |412 | 413 | 9. [Optional] Enable bluetooth support on your PC: 414 | 415 |
- 404 |
405 | $ sudo pacman -S sof-firmware # Sound Open Firmware 406 | $ sudo pacman -S pulseaudio # A featureful, general-purpose sound server 407 | $ sudo pacman -S pavucontrol # PulseAudio Volume Control 408 | $ sudo pacman -S alsa-utils # Advanced Linux Sound Architecture - Utilities 409 | $ sudo pacman -S alsa-plugins # Additional ALSA plugins 410 |411 |421 | 422 | 10. [Optional] Enable printing support on your PC: 423 | 424 |
- 416 |
417 | $ sudo pacman -S bluez bluez-utils blueman 418 | $ sudo systemctl enable bluetooth 419 |420 |431 | 432 |
- 425 |
426 | $ sudo pacman -S cups cups-filters cups-pdf system-config-printer 427 | $ sudo pacman -S hplip # for HP devices 428 | $ sudo systemctl enable cups.service 429 |430 |437 | 438 | 11. [Optional] Improve battary usage with TLP - utility that basically does kernel settings 439 | tweaking that improve power consumption. More information about TLP 440 | [can be found here](https://linrunner.de/tlp/). More information about TLP-RDW (radio device wizard) 441 | [can be found here](https://linrunner.de/tlp/settings/rdw.html). 442 | 443 |
- 433 | 💡 IMPORTANT NOTE: if there is no option for system-config-printer in xfce4-settings-manager, 434 | go to
/usr/share/applications/system-config-printer.desktop
and set 435 |Categories=System;Settings;X-XFCE-SettingsDialog;X-XFCE-HardwareSettings;
436 |455 | 456 | 12. [Optional] Run service that will discard unused blocks on mounted filesystems. This is useful for 457 | solid-state drives (SSDs) and thinly-provisioned storage. More information on fstrim 458 | [can be found here](https://man7.org/linux/man-pages/man8/fstrim.8.html). 459 | 460 |
- 444 |
445 | $ sudo pacman -S tlp tlp-rdw 446 | $ sudo systemctl enable tlp 447 | 448 | # execute following commands only if using TLP-RDW: 449 | 450 | $ sudo systemctl enable NetworkManager-dispatcher.service 451 | $ sudo systemctl mask systemd-rfkill.service 452 | $ sudo systemctl mask systemd-rfkill.socket 453 |454 |465 | 466 | 13. [Optional] Install GTK themes and icons: 467 | 468 |
- 461 |
462 | $ sudo systemctl enable fstrim.timer 463 |464 |474 | 475 | 14. [Optional] Choose fastest pacman mirrors (use your own country list): 476 | 477 |
- 469 |
470 | $ sudo pacman -S arc-gtk-theme adapta-gtk-theme materia-gtk-theme 471 | $ sudo pacman -S papirus-icon-theme 472 |473 |485 | 486 | 15. [Optional] Install NetworkManager addons: 487 | 488 |
- 478 |
479 | $ sudo reflector --country Germany,Austria,Switzerland \ 480 | --fastest 10 \ 481 | --threads $(nproc) \ 482 | --save /etc/pacman.d/mirrorlist 483 |484 |493 | 494 | 16. [Optional] Install vulkan drivers: 495 | 496 |
- 489 |
490 | $ sudo pacman -S nm-connection-editor networkmanager-openvpn 491 |492 |503 | 504 | 17. Reboot to finalize installation: 505 | 506 |
- 497 |
498 | $ pacman -S mesa vulkan-intel # only for systems with Intel graphics 499 | $ pacman -S nvidia-utils # only for systems with Nvidia graphics 500 | $ pacman -S amdvlk # only for systems with AMD graphics 501 |502 |511 | 512 | ### Step 02: Enable hibernation support 513 | 514 | 1. Open your `/etc/fstab` and find UUID for your swap partition 515 | 516 | 2. Open GRUB configuration file and add resume UUID to `GRUB_CMDLINE_LINUX_DEFAULT`: 517 | 518 |
- 507 |
508 | $ reboot 509 |510 |528 | 529 | 3. Generate GRUB config: 530 | 531 |
- 519 |
520 | $ sudo vim /etc/default/grub 521 | Example: 522 | ... 523 | GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=<UUID of your swap partition>" 524 | GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=97d9e9f5-899f-4e9e-910e-623a5f665271" 525 | ... 526 |527 |536 | 537 | 4. Open mkinitcpio configuration file and add `resume` hook: 538 | 539 |
- 532 |
533 | $ sudo grub-mkconfig -o /boot/grub/grub.cfg 534 |535 |548 | 549 | 5. Generate initramfs: 550 | 551 |
- 540 |
541 | $ sudo vim /etc/mkinitcpio.conf 542 | Example: 543 | ... 544 | HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck" 545 | ... 546 |547 |556 | 557 | 6. From now onwards, you can hibernate your system using: 558 | 559 |
- 552 |
553 | $ sudo mkinitcpio -p linux 554 |555 |564 | 565 |
- 560 |
561 | $ sudo systemctl hibernate 562 |563 |566 | Section 03: Installing third-party apps and
569 |
567 | setting up dev environment 🧑💻 568 |570 | These is my personal list of apps and utilities which I use on regular basis, 571 | so feel free to fork this repo and add something yours 572 |573 | 574 | ### Step 01: General-purpose apps 575 | 576 |607 | 608 | ### Step 02: Install package manager for AUR (Arch User Repository) 609 | 610 |
- 577 |
578 | $ sudo pacman -S chromium # web-browser 579 | $ sudo pacman -S obsidian # note-taking app 580 | $ sudo pacman -S bitwarden # password manager for all devices (use keepassxc provider) 581 | $ sudo pacman -S bitwarden-cli # command line bitwarden client 582 | $ sudo pacman -S mousepad # simple graphical text editor 583 | $ sudo pacman -S file-roller # archive manager 584 | $ sudo pacman -S evince # pdf viewer 585 | $ sudo pacman -S xournalpp # pdf editor 586 | $ sudo pacman -S libreoffice # office packages 587 | $ sudo pacman -S gimp # image editor 588 | $ sudo pacman -S gpick # color picker 589 | $ sudo pacman -S inkscape # vector graphics editor 590 | $ sudo pacman -S fontforge # fonts editor 591 | $ sudo pacman -S gparted # grphical disk management tool 592 | $ sudo pacman -S vlc # video player 593 | $ sudo pacman -S remmina # remote desktop client 594 | $ sudo pacman -S shotcut # video editing tool 595 | $ sudo pacman -S evolution # email client 596 | $ sudo pacman -S redshift # adjusts the color temperature of your screen 597 | $ sudo pacman -S obs-studio # screencasting and streaming app 598 | $ sudo pacman -S wireshark-qt # network protocol analyzer 599 | $ sudo pacman -S spotify-launcher # spotify client 600 | $ sudo pacman -S telegram-desktop # my preffered messenger 601 | $ sudo pacman -S rclone # manage or migrate files on cloud storage 602 | $ sudo pacman -S openvpn # openvpn client 603 | $ sudo pacman -S wireguard-tools # wireguard client 604 | $ sudo pacman -S arandr # gui for xrandr 605 |606 |617 | 618 | ### Step 03: Software development tools 619 | 620 | 1. General purpose development tools: 621 | 622 |
- 611 |
612 | $ git clone https://aur.archlinux.org/yay.git 613 | $ cd yay 614 | $ makepkg -si 615 |616 |645 | 646 |
- 623 |
624 | $ sudo pacman -S neovim # powerful console editor 625 | $ sudo pacman -S zed # ultimate graphical editor 626 | $ sudo pacman -S tree-sitter # parsing system for programming tools 627 | $ sudo pacman -S tree-sitter-cli # cli tool tree-sitter parsers 628 | $ sudo pacman -S stow # configuration manager 629 | $ sudo pacman -S sqlite3 # console sqlite client 630 | $ sudo pacman -S tldr # collection of simplified man pages 631 | $ sudo pacman -S jq # cli json processor 632 | $ sudo pacman -S tmux # terminal session multiplexer 633 | $ sudo pacman -S nmap # network scanner with advanced features 634 | $ sudo pacman -S masscan # high performance network scanner 635 | $ sudo pacman -S pgcli # console client for PostgreSQL 636 | $ sudo pacman -S redis # console client for Redis 637 | $ sudo pacman -S apache # http server + some useful utilities (htpasswd) 638 | $ sudo pacman -S meld # git visual diff and merge tool 639 | $ sudo pacman -S websocat # command line client for websockets 640 | $ sudo pacman -S sshpass # noninteractive ssh password provider 641 | $ sudo pacman -S git-filter-repo # faster and safer git-filter-branch alternative 642 | $ sudo pacman -S httpie # human-friendly CLI HTTP client for the API era 643 |644 |650 | 651 | 2. Infrastructure as a Code and DevOps tools: 652 | 653 |
- 647 | 💡 IMPORTANT NOTE: execute
sudo setcap 'cap_net_raw+epi' /usr/bin/masscan
to enable 648 | the ability to runmasscan
as non-root user. 649 |671 | 672 | 3. Install Golang and its tools: 673 | 674 |
- 654 |
655 | $ sudo pacman -S ansible # infrastructure as a code tool (bare metal) 656 | $ sudo pacman -S podman # cli tool for container management 657 | $ sudo pacman -S podman-compose # run multi-container applications with podman 658 | $ sudo pacman -S docker # cli tool for container management 659 | $ sudo pacman -S docker-compose # run multi-container applications with docker 660 | $ sudo pacman -S kubectl # cli tool for managing kubernetes clusters 661 | $ sudo pacman -S helm # package manager for kubernetes 662 | $ sudo pacman -S terraform # infrastructure as a code tool (clouds) 663 | 664 | # configure docker 665 | 666 | $ sudo systemctl enable docker # enable docker daemon on system start 667 | # sudo usermod -a -G docker yourusername # to be able to run docker as non-root 668 | $ newgrp docker # login to docker group without restart 669 |670 |681 | 682 | 4. Install Java and its tools: 683 | 684 |
- 675 |
676 | $ sudo pacman -S go 677 | $ go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest 678 | $ go install github.com/hairyhenderson/gomplate/v4/cmd/gomplate@latest 679 |680 |
- 685 |
695 | 696 |686 | $ sudo pacman -S jdk8-openjdk # OpenJDK Java 8 development kit 687 | $ sudo pacman -S jdk11-openjdk # OpenJDK Java 11 development kit 688 | $ sudo pacman -S jdk17-openjdk # OpenJDK Java 17 development kit 689 | $ sudo pacman -S jdk21-openjdk # OpenJDK Java 21 development kit 690 | $ sudo pacman -S jdk-openjdk # OpenJDK Java 22 development kit 691 | $ sudo pacman -S maven # Java project management tool 692 | $ sudo pacman -S gradle # Java project management tool 693 |694 |700 | 701 | 5. Install Dart and Flutter following instructions from https://docs.flutter.dev/get-started/install/linux 702 | 703 | 6. Install C, C++ and tools for low-level development: 704 | 705 |
- 697 | 💡 IMPORTANT NOTE: JVM version can be switched using
archlinux-java
. List all available 698 | JVM versions usingarchlinux-java status
and set one usingarchlinux-java set VERSION
. 699 |719 | 720 | 7. Install Python and its tools: 721 | 722 |
- 706 |
707 | $ sudo pacman -S gcc # GNU Compiler Collection, C and C++ frontends 708 | $ sudo pacman -S gdb # GNU Debugger 709 | $ sudo pacman -S clang # C/C++ frontend compiler for LLVM 710 | $ sudo pacman -S cmake # C/C++ project management tool 711 | $ sudo pacman -S ninja # Build system with a focus on speed 712 | $ sudo pacman -S cuda # NVIDIA GPU programming toolkit 713 | $ sudo pacman -S nasm # Asssembler for the x86 CPU architecture 714 | $ sudo pacman -S boost # C++ library with general purpose utils and data structures 715 | $ sudo pacman -S cdrtools # CD/DVD/BluRay command line recording software 716 | $ sudo pacman -S qemu-full # Open source machine emulator and virtualizer 717 |718 |730 | 731 | 8. Install Lua: 732 | 733 |
- 723 |
724 | $ sudo pacman -S python # python itself 725 | $ sudo pacman -S python-pip # python package manager 726 | $ sudo pacman -S python-virtualenv # python virtualenv 727 | $ sudo pacman -S python-poetry # python package manager (better one) 728 |729 |738 | 739 | 9. Install JavaScript and its tools: 740 | 741 |
- 734 |
735 | $ sudo pacman -S lua # Collection of Lua tools 736 |737 |748 | 749 | 10. Install Rust and its tools: 750 | 751 |
- 742 |
743 | $ sudo pacman -S nodejs # JavaScript runtime 744 | $ sudo pacman -S npm # JavaScript package manager 745 | $ sudo pacman -S yarn # JavaScript package manager 746 |747 |756 | 757 | 11. Install Virtualbox: 758 | 759 |
- 752 |
753 | $ sudo pacman -S rust # Rust compiler and tools for project management 754 |755 |766 | 767 | 12. Architecture diagraming tools: 768 | 769 |
- 760 |
761 | $ sudo pacman -S linux-headers # Headers for building Linux kernel modules 762 | $ sudo pacman -S virtualbox-host-dkms # VirtualBox Host kernel modules sources 763 | $ sudo pacman -S virtualbox # Hypervisor for x86 virtualization 764 |765 |774 | 775 | 13. Install hugo (static website generator): 776 | 777 |
- 770 |
771 | $ sudo pacman -S plantuml # Tool for creating UML diagrams 772 |773 |783 | 784 | 14. Accounting software: 785 | 786 |
- 778 |
779 | $ sudo pacman -S hugo # fast and flexible static site generator in go 780 | $ sudo pacman -S dart-sass # implementation of sass (required for hugo) 781 |782 |791 | 792 | 15. 3D-Printing software: 793 | 794 |
- 787 |
788 | $ sudo pacman -S gnucash # Personal and small-business financial-accounting application 789 |790 |800 | 801 | 16. Reverse engineering software 802 | 803 |
- 795 |
796 | $ sudo pacman -S freecad # Feature based parametric 3D CAD modeler 797 | $ sudo pacman -S prusa-slicer # G-code generator for 3D printers 798 |799 |810 | 811 | ### Step 04: Install Wine (Windows application runner) 812 | 813 | 1. Go to `/etc/pacman.conf` and uncomment (or add) following lines: 814 | 815 |
- 804 |
805 | $ sudo pacman -S radare2 # open-source tools to disasm, debug, analyze and manipulate binary files 806 | $ sudo pacman -S ghidra # software reverse engineering framework 807 | $ r2pm -U && r2pm -ci r2ghidra # integrate ghidra decompiler into radare2 808 |809 |821 | 822 | 2. Update package database: 823 | 824 |
- 816 |
817 | [multilib] 818 | Include = /etc/pacman.d/mirrorlist 819 |820 |829 | 830 | 3. Install Wine and its utilities: 831 | 832 |
- 825 |
826 | $ sudo pacman -Syu 827 |828 |841 | 842 | 4. Configure smooth font in Wine applications: 843 | 844 |
- 833 |
834 | $ sudo pacman -S wine # Compatibility layer for running Windows programs 835 | $ sudo pacman -S wine-mono # Wine's replacement for Microsoft's .NET Framework 836 | $ sudo pacman -S wine-gecko # Wine's replacement for Microsoft's Internet Explorer 837 | $ sudo pacman -S winetricks # Installer for various runtime libraries in Wine 838 | $ sudo pacman -S zenity # Display dialog boxes from shell scripts (wine dependency) 839 |840 |849 | 850 |
- 845 |
846 | $ winetricks settings fontsmooth=rgb 847 |848 |855 | 856 | ### Step 05: Install texlive (LaTeX distribution) 857 | 858 | 1. Download texlive installer: 859 | 860 |
- 851 | 💡 IMPORTANT NOTE: if you are facing error 852 |
wine: Read access denied for device L"\\??\\Z:\\", FS volume label and serial are not available
, 853 | go to~/.wine/dosdevices
, removez:
symbolic link and make it point to your$HOME
854 |865 | 866 | 2. Unpack texlive installer archive: 867 | 868 |
- 861 |
862 | $ wget http://mirrors.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz 863 |864 |874 | 875 | 3. Run texlive install and select nearest CTAN mirror: 876 | 877 |
- 869 |
870 | $ mkdir ./texlive 871 | $ tar -xvf install-tl-unx.tar.gz -C texlive --strip-components=1 872 |873 |883 | 884 | ### Step 06: Setup Android development tools 885 | 886 | 1. Download zip-archive from here: https://developer.android.com/studio from _Command line tools only_ section. 887 | 888 | 2. Unpack archive and copy cmdline-tools to `$ANDROID_HOME` (in my case `~/Android`): 889 | 890 |
- 878 |
879 | $ cd ./texlive 880 | $ sudo ./install-tl -select-repository 881 |882 |897 | 898 | 3. Set `ANDROID_HOME` environment variable to `~/Andoird` in `.bashrc` 899 | 900 | 4. Install platform tools, build tools and accept all licenses: 901 | 902 |
- 891 |
892 | $ unzip commandlinetools-linux-..._latest.zip # archive you got from website 893 | $ mkdir -p ~/Android/cmdline-tools/latest 894 | $ mv ./cmdline-tools/* ~/Android/cmdline-tools/latest/ 895 |896 |910 | 911 | ### Step 07: Install Yubikey tools 912 | 913 |
- 903 |
904 | $ sdkmanager "platform-tools" "platforms;android-29" 905 | $ sdkmanager "build-tools;29.0.3" 906 | $ sdkmanager --licenses 907 | $ sdkmanager --update 908 |909 |919 | 920 | ### Bonus: My list of reverse engineering tools 921 | 922 | 1. Binary reverse engineering: 923 | `gdb`, `strace`, `ltrace`, `ldd`, `objdump` `radare2`, `frida`, 924 | `Ghidra`, `IDA Pro`, `cutter` + `rz-ghidra` + `cutterref`, `angr-management` 925 | `API Monitor`, `PEiD`, `UpxUnpacker` 926 | 927 | 2. Python: `pycdc` 928 | 929 | 3. Java: `jd-gui`, `jadx` 930 | 931 | 4. C#: `Avalonia ILSpy` 932 | 933 |
- 914 |
915 | $ sudo pacman -S yubikey-manager 916 | $ sudo pacman -S yubikey-personalization-gui 917 |918 |934 | Section 04: F.A.Q.s, bug fixes and other useful tips and playbooks 935 | for Arch Linux 🪲 936 |
937 | 938 | ### Playbook 01: Fix XHCI hibernation error 939 | 940 | In some Linux kernels there are some broken USB 3.0 device drivers, that _sometimes_ wake up 941 | the system right after you launch hibernation process. If you see errors like this in your 942 | `dmesg` command output after an unsuccessful hibernation: 943 | 944 |951 | 952 | To fix the issue put following lines in `/usr/lib/systemd/system-sleep/xhci` and make this file executable: 953 | 954 |
- 945 |
946 | xhci_hcd 0000:00:14.0: PM: pci_pm_freeze(): hcd_pci_suspend+0x0/0x20 returns -16 947 | xhci_hcd 0000:00:14.0: PM: dpm_run_callback(): pci_pm_freeze+0x0/0xc0 returns -16 948 | xhci_hcd 0000:00:14.0: PM: failed to freeze async: error -16 949 |950 |974 | 975 | Original solution: https://gist.github.com/ioggstream/8f380d398aef989ac455b93b92d42048 976 | 977 | ### Playbook 02: Fix GRUB screen resolution 978 | 979 | _This can help if you have very tiny grub font on your 4k monitor_ 980 | 981 | 1. Open `/etc/default/grub` with text editor and add following lines: 982 | 983 |
- 955 |
956 | #!/bin/sh 957 | 958 | run_pre_hook() { 959 | echo "Disable xhci module before suspend at $(date)..." >> /tmp/systemd_suspend_log 960 | grep XHC.\*enable /proc/acpi/wakeup && echo XHC > /proc/acpi/wakeup 961 | } 962 | 963 | run_post_hook() { 964 | echo "Enable xhci module after wakeup from $(date)" >> /tmp/systemd_suspend_log 965 | grep XHC.\*disable /proc/acpi/wakeup && echo XHC > /proc/acpi/wakeup 966 | } 967 | 968 | case $1 in 969 | pre) run_pre_hook ;; 970 | post) run_post_hook ;; 971 | esac 972 |973 |990 | 991 | 2. Generate `grub.cfg`: 992 | 993 |
- 984 |
985 | GRUB_TERMINAL_OUTPUT="gfxterm" 986 | GRUB_GFXPAYLOAD_LINUX=keep 987 | GRUB_GFXMODE=1920x1080x32,1024x768x32,auto 988 |989 |998 | 999 | ### Playbook 03: Fix Lightdm screen resolution 1000 | 1001 | _This can help if you use lightdm and have very tiny font on your 4k monitor_ 1002 | 1003 |
- 994 |
995 | $ sudo grub-mkconfig -o /boot/grub/grub.cfg 996 |997 |1010 | 1011 | ### Playbook 04: Activate dark mode in GTK apps 1012 | 1013 |
- 1004 |
Open
1005 |/etc/lightdm/lightdm.conf
file and add following line under[Seat:\*]
section:1006 | display-setup-script=xrandr --output eDP-1 --mode 1920x1080 1007 |1008 | P.S. your screen output name, like eDP-1 in my case, can be found inxrandr -q
1009 |1018 | 1019 | ### Playbook 05: System goes to sleep too fast with Xfce 1020 | 1021 | - If system goes to sleep after 3-5 minutes, this might be screensaver. 1022 | To stop this, disable option `Settings -> Screensaver -> Activate Screensaver when computer is idle`. 1023 | 1024 | ### Playbook 06: All requests, expept those to internal addresses, fail after launching Wireguard VPN 1025 | 1026 | - This happens when your Wireguard server can only handle requests only to configured IP addresses and DNS names. 1027 | Use `resolvectl revert wg0` (change `wg0` to your wireguard interface name). 1028 | This will prevent system from using Wireguard interface for all routes. 1029 | 1030 | ### Playbook 07: Screen freezed (or hangs) after 2-10 minutes of inactivity when using Picom 1031 | 1032 | - If you screen freezes (or hangs) while not touching keyboard or mouse for some time (usually 2-10 minutes), 1033 | this might be an issue with picom. Try first stopping picom at all to see if this helps. 1034 | If yes, try to change rendering backend of picom from `xrender` to `glx` and check if it helps. 1035 | Worked for me. 1036 | 1037 | ### Playbook 08: Remove annoying menubar from Slack 1038 | 1039 | - `Window -> Always show menu bar -> disable` 1040 | 1041 | ### Playbook 09: Encrypt external disk 1042 | 1043 | 1. [Only once] Select disk partition to be encrypted (in this example `/dev/sdb1`) and initialize LUKS: 1044 | 1045 |
- 1014 |
1015 | $ gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' 1016 |1017 |1050 | 1051 | 2. Open and decrypt LUKS partition, this will create decrypted device at `/dev/mapper/cryptdev`: 1052 | 1053 |
- 1046 |
1047 | $ sudo cryptsetup luksFormat /dev/sdb1 1048 |1049 |1058 | 1059 | 3. [Only once] Initialize filesystem on decrypted partition, in this example `ext4`: 1060 | 1061 |
- 1054 |
1055 | $ sudo cryptsetup open /dev/sdb1 cryptdev 1056 |1057 |1066 | 1067 | 4. Mount created filesystem, to `/mnt` folder in this example, and use it as you want: 1068 | 1069 |
- 1062 |
1063 | $ sudo mkfs.ext4 /dev/mapper/cryptdev 1064 |1065 |1074 | 1075 | 5. Unmount filesystem and close LUKS device after using it: 1076 | 1077 |
- 1070 |
1071 | $ sudo mount /dev/mapper/cryptdev /mnt 1072 |1073 |1083 | 1084 | 6. [If needed] Change LUKS disk encryption passphrase: 1085 | 1086 |
- 1078 |
1079 | $ sudo umount /mnt 1080 | $ sudo cryptsetup close cryptdev 1081 |1082 |1092 | 1093 |
- 1087 | TLDR: LUKS generates a single master key (also known as the "encryption key"), which is used to encrypt 1088 | the data on the disk. Instead of storing the master key directly, LUKS uses key slots. Each slot contains the 1089 | master key encrypted with a unique password or other authentication information. To change the password, we 1090 | need to obtain LUKS slot number for the current key. 1091 |
1099 | 1100 | ### Playbook 10: Fix external microphone artefacts happening after ~20 minutes of connection 1101 | 1102 | 1. Open `/etc/pulse/daemon.conf`. 1103 | 2. Set `exit-idle-time = -1`. Don't forget to uncomment this line if it's commented. 1104 | 3. Stop pulseaudio service: `pulseaudio -k` 1105 | 4. Clear pulseaudio cache: `rm -r ~/.config/pulse/*` 1106 | 5. Start pulseaudio once again: `pulseaudio --start` 1107 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/silentz/arch-linux-install-guide/d89b84fe65a472c24967ccf903fec3d70fe80899/logo.png --------------------------------------------------------------------------------
- 1094 |
1095 | $ sudo cryptsetup luksDump /dev/sdb1 # most probably it will be 0 1096 | $ sudo cryptsetup luksChangeKey /dev/sdb1 -S 0 # use your own slot number in -S parameter 1097 |1098 |