#+title: Instructions ** information :info: This org document is a list of instructions on how to install the whole setup of my personal system, including installation of standalone programs. ** installing fedora minimal with btrfs snapshots (snapper) this sections assumes that you know how to use sway (window manager), neovim (text editor), basic terminal shell commands, burn an iso to disk, as well as using the anaconda installer. get the os image (Fedora Everything) from here https://alt.fedoraproject.org/en/ and burn it to your usb/other. *** verifying the iso file 1. Download the checksum file (from https://alt.fedoraproject.org/en/) into the same directory as the image you downloaded. 2. Import Fedora's GPG key(s) #+BEGIN_SRC sh curl -O https://fedoraproject.org/fedora.gpg #+END_SRC 3. Verify the CHECKSUM file is valid #+BEGIN_SRC sh gpgv --keyring ./fedora.gpg *-CHECKSUM #+END_SRC 4. Verify the checksum matches #+BEGIN_SRC sh sha256sum -c *-CHECKSUM #+END_SRC *** installing fedora and setting up btrfs with snapshots differences/notes before continuing with the installation: 1. some dependencies aren't available with 'fedora custom operating system'. before installing snapper install these packages: #+BEGIN_SRC sh sudo dnf install neovim sway firefox locate git bzip2 #+END_SRC - ~neovim~: a text editor to edit files - ~firefox~: a browser to follow along guide - ~locate~, ~git~, ~bzip2~: missing dependencies not included in the guide. 2. software selection will be =fedora custom operating system= boot your fedora installer media and follow this guide, make sure to boot with EUFI mode: https://sysguides.com/install-fedora-38-with-snapshot-and-rollback-support/ or for full disk encryption https://sysguides.com/install-fedora-38-with-full-disk-encryption-snapshot-and-rollback-support/ ** how to make new user and add to wheel #+BEGIN_SRC sh # make a user and add to the wheel group useradd -m -g wheel user_name # set a password passwd user_name #+END_SRC ** prerequisites for building/installing packages, also some dependencies for doomemacs, and zsh. #+BEGIN_SRC sh sudo dnf install curl ca-certificates make automake gcc gcc-c++ kernel-devel git util-linux-user zsh ntpsec dnf-plugins-core golang flatpak cmake libevdev-devel systemd-devel yaml-cpp-devel boost-devel ripgrep fd-find ShellCheck tar pip npm #+END_SRC ** installing dotfiles #+BEGIN_SRC sh # getting dotfiles git clone https://gitea.bubbletea.dev/cho/dotfiles ~/.dots cp -rv ~/.dots/home/default/.* ~/ # or using stow # make sure you make directories you don't want as symlinks mkdir -p ~/.local/share/applications mkdir -p ~/.local/bin mkdir -p ~/.config mkdir -p ~/.config/shell mkdir -p ~/.config/mpd mkdir -p ~/.config/zsh mkdir -p ~/.config/newsboat mkdir -p ~/.config/nvim cd ~/.dots/home/ && stow default --target=$HOME/ #+END_SRC *** how to unstow dotfiles #+BEGIN_SRC sh cd ~/.dots/home/ && stow -D default --target=$HOME/ #+END_SRC ** setting up rpmfusion from https://rpmfusion.org/Configuration and https://rpmfusion.org/Howto/Multimedia #+BEGIN_SRC sh # rpmfusion sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm sudo dnf groupupdate core # multimedia sudo dnf swap ffmpeg-free ffmpeg --allowerasing sudo dnf groupupdate multimedia --setop="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin sudo dnf groupupdate sound-and-video #amd sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld #dvd sudo dnf install rpmfusion-free-release-tainted sudo dnf install libdvdcss # non-free firmware sudo dnf install rpmfusion-nonfree-release-tainted sudo dnf --repo=rpmfusion-nonfree-tainted install "*-firmware" #+END_SRC ** installing dnf packages this will install programs, as well as (99% of) dependencies of shell scripts and configuration included within lf (file manager) the other dependency not included in packages.txt is `pup` (included in a section below) #+BEGIN_SRC sh sudo dnf install -y $(cat ~/.dots/packages.txt) #+END_SRC ** installing swayfx (window manager) #+begin_src sh sudo dnf copr enable swayfx/swayfx sudo dnf install #+end_src ** configuring sudoers Allow wheel users to sudo with password and allow several system commands (like `shutdown` to run without password). #+BEGIN_SRC shell echo "%wheel ALL=(ALL:ALL) ALL" >/etc/sudoers.d/00-wheel-can-sudo echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/dnf update,/usr/bin/dnf update -y,/usr/bin/dnf upgrade,/usr/bin/dnf upgrade,/usr/bin/dnf makecache,/usr/bin/dnf makecache -y,/usr/bin/loadkeys" >/etc/sudoers.d/01-cmds-without-password echo "Defaults editor=/usr/bin/nvim" >/etc/sudoers.d/02-visudo-editor #+END_SRC ** Make zsh the default shell for the user. #+BEGIN_SRC shell name=$USER chsh -s /bin/zsh "$name" >/dev/null 2>&1 sudo -u "$name" mkdir -p "/home/$name/.cache/zsh/" sudo -u "$name" mkdir -p "/home/$name/.config/abook/" sudo -u "$name" mkdir -p "/home/$name/.config/mpd/playlists/" #+END_SRC at this point, you should logout and login again to set the variables. ** librewolf (browser) from https://librewolf.net/installation/fedora/ #+BEGIN_SRC sh sudo dnf config-manager --add-repo https://rpm.librewolf.net/librewolf-repo.repo sudo dnf install librewolf #+END_SRC *** plugins, etc https://github.com/ranmaru22/firefox-vertical-tabs https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/ https://addons.mozilla.org/en-US/firefox/addon/nicothin-dark-theme/ https://addons.mozilla.org/en-US/firefox/addon/tomorrow-theme-night https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox ** doom emacs first we need to install marked for markdown support #+BEGIN_SRC sh sudo npm install -g marked #+END_SRC then install emacs #+begin_src sh sudo dnf install emacs #+end_src alternatively build emacs with native compilation and pgtk for better compatibility with wayland #+begin_src sh ## clone the emacs repository git clone git://git.savannah.gnu.org/emacs.git ## install dependencies sudo dnf install gcc atk-devel cairo-devel freetype-devel fontconfig-devel dbus-devel giflib-devel glibc-devel libgccjit-devel libpng-devel libjpeg-turbo-devel libjpeg-turbo libtiff-devel libX11-devel libXau-devel libXdmcp-devel libXrender-devel libXt-devel libXpm-devel ncurses-devel xorg-x11-proto-devel zlib-devel gnutls-devel librsvg2-devel m17n-lib-devel libotf-devel libselinux-devel alsa-lib-devel gpm-devel liblockfile-devel libxml2-devel autoconf bzip2 cairo texinfo gzip desktop-file-utils libacl-devel harfbuzz-devel jansson-devel systemd-devel lcms2-devel systemd-rpm-macros libtree-sitter-devel gtk3-devel webkit2gtk3-devel gnupg2 sysprof-devel ## build emacs 29.1 cd emacs git checkout emacs-29.1.90 ./autogen.sh ./configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \ --with-tiff --with-xft --with-xpm --with-gpm=no \ --with-xwidgets --with-modules --with-harfbuzz --with-cairo --with-json \ --with-tree-sitter --with-pgtk --with-native-compilation make -j$(nproc) sudo make install #+end_src install doom emacs: #+BEGIN_SRC sh git clone https://github.com/doomemacs/doomemacs ~/.emacs.d ~/.emacs.d/bin/doom install #+END_SRC ** lf (file manager) this fork of lf allows for sixel graphics, which allows you to see images in terminals that supports sixel from https://github.com/horriblename/lf#installation #+BEGIN_SRC sh env CGO_ENABLED=0 go install -ldflags="-s -w" github.com/horriblename/lf@latest mkdir -p $HOME/.cache/lf #+END_SRC ** interception tools (keyboard input mappings) change caps lock to escape (when pressed) and mod (when held down) INSTALL FROM SOURCE #+BEGIN_SRC sh git clone https://gitlab.com/interception/linux/tools.git interception-tools cd interception-tools cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build cd build sudo make install #+END_SRC #+BEGIN_SRC sh git clone https://gitlab.com/interception/linux/plugins/dual-function-keys.git cd dual-function-keys make && sudo make install #+END_SRC it's a good idea to install these as well, if anything doesn't compile. #+BEGIN_SRC sh sudo dnf groupinstall "Development Tools" "Development Libraries" #+END_SRC *** installing the configuration #+BEGIN_SRC sh sudo cp -rv ~/.dots/etc/interception /etc/ sudo cp ~/.dots/etc/systemd/system/udevmon.service /etc/systemd/system/ # enable sudo systemctl enable udevmon.service #+END_SRC ** sway notifications from https://github.com/ErikReider/SwayNotificationCenter#fedora #+BEGIN_SRC sh dnf copr enable erikreider/SwayNotificationCenter dnf install SwayNotificationCenter #+END_SRC ** autotiling in sway (optional) #+BEGIN_SRC sh pip install i3ipc pip install autotiling==1.8 #+END_SRC ** sworkstyle (workspace icons) (optional) this is disabled by default within sway config, but compatible with waybar and sway installing this needs cargo, to install go here: [[*installing cargo]] this also needs [[install icon fonts (Nerd Fonts)]] #+begin_src sh cargo install sworkstyle #+end_src *** install icon fonts (Nerd Fonts) for sworkstyle icons in waybar #+begin_src sh mkdir ~/.local/share/fonts curl -LOv https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/NerdFontsSymbolsOnly.tar.xz --output-dir /tmp/ tar -xvf /tmp/NerdFontsSymbolsOnly.tar.xz -C ~/.local/share/fonts/ #+end_src ** uxn installing this just for catclock #+begin_src sh cd Downloads/ curl -LOv https://rabbits.srht.site/uxn/uxn-essentials-lin64.tar.gz tar xvf uxn-essentials-lin64.tar.gz mv uxn ~/.local/ #+end_src ** sc-im (terminal spreadsheet) I'm using this for sc files from https://github.com/andmarti1424/sc-im/wiki/Installing-on-Fedora-27 #+BEGIN_SRC sh sudo dnf install libzip libzip-devel libxml2-devel ncurses-devel byacc git gcc gnuplot git clone https://github.com/andmarti1424/sc-im.git cd sc-im/src/ make sudo make install #+END_SRC ** nsxiv (image viewer) #+BEGIN_SRC sh dnf copr enable mamg22/nsxiv dnf install nsxiv #+END_SRC ** pip packages *** keepmenu (dmenu keepassxc client) https://github.com/firecat53/keepmenu/blob/main/docs/install.md#install-recommended #+BEGIN_SRC sh pip install --user keepmenu #+END_SRC *** pulsemixer (pulseaudio controller) #+BEGIN_SRC sh pip install --user pulsemixer #+END_SRC *** termdown (terminal timer/stopwatch) #+BEGIN_SRC sh pip install termdown #+END_SRC ** go packages *** pup needed for rssadd RSS scanning to work #+BEGIN_SRC sh go install github.com/ericchiang/pup@latest #+END_SRC ** packages from source/binaries *** simple-mtpfs (for mounting usb) install dependencies: #+begin_src sh sudo dnf install libgcc fuse-devel libmtp-devel autoconf-archive #+end_src https://github.com/phatina/simple-mtpfs#installation #+begin_src sh git clone https://github.com/phatina/simple-mtpfs cd simple-mtpfs ./autogen.sh mkdir build && cd build ../configure make sudo make install #+end_src *** mpvpaper animated wallpapers (used by `change-background`) #+BEGIN_SRC sh # install dependencies sudo dnf install meson ninja-build pkg-config wayland-protocols-devel wayland-devel mpv-devel wlroots-devel # Clone git clone --single-branch https://github.com/GhostNaN/mpvpaper # Build cd mpvpaper meson build --prefix=/usr/local ninja -C build # Install sudo ninja -C build install #+END_SRC *** 7-zip get the downloads from https://www.7-zip.org/download.html if you're using modern hardware, it's usually 64-bit linux x86-x64 #+BEGIN_SRC sh # downloading and extracting the file cd ~/Downloads/ curl -O mkdir 7-zip/ cd 7-zip/ tar -xvf ../.tar.xz # put it into a PATH directory sudo cp 7zz /usr/local/bin/ #+END_SRC ** AppImages *** syncplay from https://syncplay.pl/download/ #+begin_src sh curl -LOv https://github.com/Syncplay/syncplay/releases/download/v1.7.0/Syncplay-1.7.0-x86_64.AppImage chmod +x Syncplay-*.AppImage mv Syncplay-*.AppImage ~/.local/bin/syncplay #+end_src ** installing cargo https://doc.rust-lang.org/cargo/getting-started/installation.html when asked, choose to customize installation, and then choose `no` when it asks to modify PATH variable. (it's already set in ~~/config/shell/profile~) #+BEGIN_SRC shell curl https://sh.rustup.rs -sSf | sh #+END_SRC ** setting up flatpak from https://flatpak.org/setup/Fedora #+BEGIN_SRC sh flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo #+END_SRC ** setting up virtualbox #+BEGIN_SRC sh sudo usermod -a -G vboxusers default #+END_SRC ** flatpak packages remember to set permissions with Flatseal, especially access to personal files according to what you want the software to have before launching them. *** flatseal #+BEGIN_SRC sh flatpak install -y com.github.tchx84.Flatseal #+END_SRC *** Unity #+BEGIN_SRC sh flatpak install flathub com.unity.UnityHub #+END_SRC *** Foliate (Epub reader) #+BEGIN_SRC sh flatpak install flathub com.github.johnfactotum.Foliate #+END_SRC *** bottles and dependencies - gamescope - mangohud - OBS VkCapture tools - OBS VkCapture plugin #+BEGIN_SRC sh flatpak install -y com.valvesoftware.Steam.Utility.gamescope com.usebottles.bottles org.freedesktop.Platform.VulkanLayer.MangoHud org.freedesktop.Platform.VulkanLayer.OBSVkCapture obs-studio-plugin-vkcapture com.obsproject.Studio #+END_SRC *** steam #+BEGIN_SRC sh flatpak install -y com.valvesoftware.Steam #+END_SRC *** rpsc3 #+BEGIN_SRC sh sudo flatpak install -y net.rpcs3.RPCS3 #+END_SRC limits.conf settings https://github.com/RPCS3/rpcs3/issues/9328 #+BEGIN_SRC sh sudo su printf '* hard memlock unlimited\n* soft memlock unlimited' >> /etc/security/limits.conf #+END_SRC *** cemu #+BEGIN_SRC sh flatpak install flathub info.cemu.Cemu #+END_SRC *** discord #+BEGIN_SRC sh flatpak install flathub com.discordapp.Discord #+END_SRC *** spotify #+BEGIN_SRC sh flatpak install flathub io.github.hrkfdn.ncspot flatpak install flathub com.spotify.Client #+END_SRC * fixes ** crashes with wayland under amd gpus see https://bbs.archlinux.org/viewtopic.php?id=270468 https://forum.manjaro.org/t/graphics-glitches-freeze-up-with-new-comp-error-ring-gfx-timeout/55979/6 #+BEGIN_SRC sh sudo cp ~/.dots/usr/local/bin/radcard* /usr/local/bin/ sudo cp ~/.dots/etc/systemd/system/radcard.service /etc/systemd/system/ sudo systemctl enable --now radcard.service #+END_SRC you can check the status with `radcard.sh get` , make sure the output is as follows: #+BEGIN_SRC power_dpm_state: performance power_dpm_force_performance_level: high #+END_SRC * todos ** TODO remove Virtual Box ** TODO remove autotiling ** TODO write dependencies and programs to separate files ** add packages / other *** installing bubblejail (WIP) #+begin_src sh git clone https://github.com/igo95862/bubblejail cd bubblejail git checkout tags/0.8.1 sudo dnf install scdoc sudo dnf install python3 sudo dnf install python3-jinja2 sudo dnf install python3-tomli-w sudo dnf install python3-tomli sudo dnf install libseccomp sudo dnf install python3-pyqt6 sudo dnf install python3-pyxdg sudo dnf install bubblewrap sudo dnf install xdg-dbus-proxy meson setup build cd build meson compile sudo meson install #+end_src ** setting up termux (WIP) 1. install termux-api and termux-styling from fdroid 2. install these packages #+begin_src sh pkg install termux-api fd ripgrep git emacs neovim shellcheck rsync nodejs lf man ffmpeg jq pup recode python-pip clang fontconfig-utils which #+end_src 3. setup storage #+begin_src sh termux-setup-storage #+end_src 3. install doom emacs #+BEGIN_SRC sh sudo npm install -g marked git clone https://github.com/doomemacs/doomemacs ~/.emacs.d ~/.emacs.d/bin/doom install #+END_SRC 4. yt-dlp #+begin_src sh pip install yt-dlp #+end_src ** ryujinx (WIP) sudo sysctl -w vm.max_map_count=524288 ** setup flatpak env variable for theme #+begin_src flatpak install org.gtk.Gtk3theme.Materia-dark flatpak install org.gtk.Gtk3theme.Materia sudo flatpak override --env GTK_THEME=Materia-dark #+end_src ** wlrobs #+begin_src sh sudo dnf install wayland-devel obs-studio-devel pkg-config meson #+end_src #+begin_src sh hg clone https://hg.sr.ht/~scoopta/wlrobs cd wlrobs meson setup build ninja -C build #+end_src https://github.com/pystardust/ani-cli#tier-1-support-linux-mac-android