Instructions

Table of Contents

  • 1. fixes
  • 2. todos
  • 0.1. 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.

    0.2. 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.

    0.2.1. 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)
    curl -O https://fedoraproject.org/fedora.gpg
    
    1. Verify the CHECKSUM file is valid
    gpgv --keyring ./fedora.gpg *-CHECKSUM
    
    1. Verify the checksum matches
    sha256sum -c *-CHECKSUM
    

    0.2.2. 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:
    sudo dnf install neovim sway firefox locate git bzip2
    
    • neovim: a text editor to edit files
    • firefox: a browser to follow along guide
    • locate, git, bzip2: missing dependencies not included in the guide.
    • 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/

    0.3. how to make new user and add to wheel

    # make a user and add to the wheel group
    useradd -m -g wheel user_name
    # set a password
    passwd user_name
    

    0.4. prerequisites

    for building/installing packages, also some dependencies for doomemacs, and zsh.

    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
    

    0.5. installing dotfiles

    # 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/
    

    0.5.1. how to unstow dotfiles

    cd ~/.dots/home/ && stow -D default --target=$HOME/
    

    0.6. setting up rpmfusion

    from https://rpmfusion.org/Configuration and https://rpmfusion.org/Howto/Multimedia

    # 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"
    

    0.7. 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)

    sudo dnf install -y $(cat ~/.dots/packages.txt)
    

    0.8. installing swayfx (window manager)

    sudo dnf copr enable swayfx/swayfx
    sudo dnf install
    

    0.9. configuring sudoers

    Allow wheel users to sudo with password and allow several system commands (like `shutdown` to run without password).

    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
    

    0.10. Make zsh the default shell for the user.

    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/"
    

    at this point, you should logout and login again to set the variables.

    0.11. librewolf (browser)

    from https://librewolf.net/installation/fedora/

    sudo dnf config-manager --add-repo https://rpm.librewolf.net/librewolf-repo.repo
    
    sudo dnf install librewolf
    

    0.12. doom emacs

    first we need to install marked for markdown support

    sudo npm install -g marked
    

    then install emacs

    sudo dnf install emacs
    

    alternatively build emacs with native compilation and pgtk for better compatibility with wayland

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

    install doom emacs:

    git clone https://github.com/doomemacs/doomemacs ~/.emacs.d
    ~/.emacs.d/bin/doom install
    

    0.13. 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

    env CGO_ENABLED=0 go install -ldflags="-s -w" github.com/horriblename/lf@latest
    mkdir -p $HOME/.cache/lf
    

    0.14. interception tools (keyboard input mappings)

    change caps lock to escape (when pressed) and mod (when held down)

    INSTALL FROM SOURCE

    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
    
    git clone https://gitlab.com/interception/linux/plugins/dual-function-keys.git
    cd dual-function-keys
    make && sudo make install
    

    it’s a good idea to install these as well, if anything doesn’t compile.

    sudo dnf groupinstall "Development Tools" "Development Libraries"
    

    0.14.1. installing the configuration

    sudo cp -rv ~/.dots/etc/interception /etc/
    sudo cp ~/.dots/etc/systemd/system/udevmon.service /etc/systemd/system/
    
    # enable
    sudo systemctl enable udevmon.service
    

    0.15. sway notifications

    from https://github.com/ErikReider/SwayNotificationCenter#fedora

    dnf copr enable erikreider/SwayNotificationCenter
    dnf install SwayNotificationCenter
    

    0.16. autotiling in sway (optional)

    pip install i3ipc
    pip install autotiling==1.8
    

    0.17. 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: 0.25 this also needs 0.17.1

    cargo install sworkstyle
    

    0.17.1. install icon fonts (Nerd Fonts)

    for sworkstyle icons in waybar

    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/
    

    0.18. uxn

    installing this just for catclock

    cd Downloads/
    curl -LOv https://rabbits.srht.site/uxn/uxn-essentials-lin64.tar.gz
    tar xvf uxn-essentials-lin64.tar.gz
    mv uxn ~/.local/
    

    0.19. sc-im (terminal spreadsheet)

    I’m using this for sc files

    from https://github.com/andmarti1424/sc-im/wiki/Installing-on-Fedora-27

    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
    

    0.20. nsxiv (image viewer)

    dnf copr enable mamg22/nsxiv
    dnf install nsxiv
    

    0.21. pip packages

    0.21.1. keepmenu (dmenu keepassxc client)

    0.21.2. pulsemixer (pulseaudio controller)

    pip install --user pulsemixer
    

    0.21.3. termdown (terminal timer/stopwatch)

    pip install termdown
    

    0.22. go packages

    0.22.1. pup

    needed for rssadd RSS scanning to work

    go install github.com/ericchiang/pup@latest
    

    0.23. packages from source/binaries

    0.23.1. simple-mtpfs (for mounting usb)

    install dependencies:

    sudo dnf install libgcc fuse-devel libmtp-devel autoconf-archive
    

    https://github.com/phatina/simple-mtpfs#installation

    git clone https://github.com/phatina/simple-mtpfs
    cd simple-mtpfs
    ./autogen.sh
    mkdir build && cd build
    ../configure
    make
    sudo make install
    

    0.23.2. mpvpaper

    animated wallpapers (used by `change-background`)

    # 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
    

    0.23.3. 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

    # downloading and extracting the file
    cd ~/Downloads/
    curl -O <download-url>
    mkdir 7-zip/
    cd 7-zip/
    tar -xvf ../<filename>.tar.xz
    # put it into a PATH directory
    sudo cp 7zz /usr/local/bin/
    

    0.24. AppImages

    0.24.1. syncplay

    from https://syncplay.pl/download/

    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
    

    0.25. 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)

    curl https://sh.rustup.rs -sSf | sh
    

    0.26. setting up flatpak

    from https://flatpak.org/setup/Fedora

    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    

    0.27. setting up virtualbox

    sudo usermod -a -G vboxusers default
    

    0.28. 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.

    0.28.1. flatseal

    flatpak install -y com.github.tchx84.Flatseal
    

    0.28.2. Unity

    flatpak install flathub com.unity.UnityHub
    

    0.28.3. Foliate (Epub reader)

    flatpak install flathub com.github.johnfactotum.Foliate
    

    0.28.4. bottles and dependencies

    • gamescope
    • mangohud
    • OBS VkCapture tools
    • OBS VkCapture plugin
    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
    

    0.28.5. steam

    flatpak install -y com.valvesoftware.Steam
    

    0.28.6. rpsc3

    sudo flatpak install -y net.rpcs3.RPCS3
    

    limits.conf settings https://github.com/RPCS3/rpcs3/issues/9328

    sudo su
    printf '*        hard    memlock        unlimited\n*        soft    memlock        unlimited' >> /etc/security/limits.conf
    

    0.28.7. cemu

    flatpak install flathub info.cemu.Cemu
    

    0.28.8. discord

    flatpak install flathub com.discordapp.Discord
    

    0.28.9. spotify

    flatpak install flathub io.github.hrkfdn.ncspot
    flatpak install flathub com.spotify.Client
    

    1. fixes

    1.1. 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

    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
    

    you can check the status with `radcard.sh get` , make sure the output is as follows:

    power_dpm_state: performance
    power_dpm_force_performance_level: high
    

    2. todos

    2.1. TODO remove Virtual Box

    2.2. TODO remove autotiling

    2.3. TODO write dependencies and programs to separate files

    2.4. add packages / other

    2.4.1. installing bubblejail (WIP)

    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
    

    2.5. setting up termux (WIP)

    1. install termux-api and termux-styling from fdroid
    2. install these packages
    pkg install termux-api fd ripgrep git emacs neovim shellcheck rsync nodejs lf man ffmpeg jq pup recode python-pip clang fontconfig-utils which
    
    1. setup storage
    termux-setup-storage
    
    1. install doom emacs
    sudo npm install -g marked
    git clone https://github.com/doomemacs/doomemacs ~/.emacs.d
    ~/.emacs.d/bin/doom install
    
    1. yt-dlp
    pip install yt-dlp
    

    2.6. ryujinx (WIP)

    sudo sysctl -w vm.maxmapcount=524288

    2.7. setup flatpak env variable for theme

    flatpak install org.gtk.Gtk3theme.Materia-dark
    flatpak install org.gtk.Gtk3theme.Materia
    sudo flatpak override --env GTK_THEME=Materia-dark
    

    2.8. wlrobs

    sudo dnf install wayland-devel obs-studio-devel pkg-config meson
    
    hg clone https://hg.sr.ht/~scoopta/wlrobs
    cd wlrobs
    meson setup build
    ninja -C build