dotfiles/instructions.org
2024-01-27 15:42:16 +07:00

16 KiB

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

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

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

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

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/

how to unstow dotfiles

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

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"

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)

installing swayfx (window manager)

sudo dnf copr enable swayfx/swayfx
sudo dnf install

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

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.

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

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

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"

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

sway notifications

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

dnf copr enable erikreider/SwayNotificationCenter
dnf install SwayNotificationCenter

autotiling in sway (optional)

pip install i3ipc
pip install autotiling==1.8

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: /cho/dotfiles/src/commit/863e93747e2bb506cdc2f3e8fceb3d488f4136a5/%2Ainstalling%20cargo this also needs /cho/dotfiles/src/commit/863e93747e2bb506cdc2f3e8fceb3d488f4136a5/install%20icon%20fonts%20%28Nerd%20Fonts%29

cargo install sworkstyle

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/

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/

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

nsxiv (image viewer)

dnf copr enable mamg22/nsxiv
dnf install nsxiv

pip packages

keepmenu (dmenu keepassxc client)

pulsemixer (pulseaudio controller)

pip install --user pulsemixer

termdown (terminal timer/stopwatch)

pip install termdown

go packages

pup

needed for rssadd RSS scanning to work

go install github.com/ericchiang/pup@latest

packages from source/binaries

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

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

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/

AppImages

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

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

setting up flatpak

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

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

setting up virtualbox

sudo usermod -a -G vboxusers default

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

flatpak install -y com.github.tchx84.Flatseal

Unity

flatpak install flathub com.unity.UnityHub

Foliate (Epub reader)

flatpak install flathub com.github.johnfactotum.Foliate

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

steam

flatpak install -y com.valvesoftware.Steam

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

cemu

flatpak install flathub info.cemu.Cemu

discord

flatpak install flathub com.discordapp.Discord

spotify

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

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

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

todos

TODO remove Virtual Box

TODO remove autotiling

TODO write dependencies and programs to separate files

add packages / other

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

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

ryujinx (WIP)

sudo sysctl -w vm.max_map_count=524288

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

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

https://github.com/pystardust/ani-cli#tier-1-support-linux-mac-android