Skip to content

Latest commit

 

History

History
595 lines (425 loc) · 15.5 KB

File metadata and controls

595 lines (425 loc) · 15.5 KB

How I install my system

Preparing

Copy .ssh and .local/share/gnupg to Private.

Download Fedora image and write it to the USB drive:

sudo ~/Projects/env/prepare-install-drive PATH_TO.iso /dev/sdX

Copy these Vídeos/* to server and backup machine:

~/Projects/env/bin/backup

BIOS

  1. Boot to BIOS and set supervisor password.
  2. Set Game Optimized iGPU.
  3. Temporary enable USB boot.

Install

Start installer:

  1. Select English language.
  2. Use entire disk mode with encryption.

Reboot to USB drive again. Mount laptop SSD.

Open etc/fstab.

Add noatime,nodiratime to root & home partitions.

Move /tmp and /var/tmp to RAM:

vartmp /var/tmp tmpfs defaults,noatime,nodiratime 0 0
vartmp /tmp     tmpfs defaults,noatime,nodiratime 0 0

Reboot to BIOS. Block boot from USB.

Reboot to system. Set Russian language, name to Andrey Sitnik and login ai.

Set laptop name:

sudo hostnamectl set-hostname savoia

Reboot.

Copy Projects/ and Документы/.Private/ from external SDD and open Install.md locally.

Reduce swap usage by creating /etc/sysctl.d/99-swappiness.conf with:

vm.swappiness = 10

Enable Performance, disable Automatic waiting saving in Power settings.

System Update

Add XKBLAYOUT="us" in /etc/vconsole.conf.

Remove unnecessary packages:

sudo dnf remove cheese rhythmbox gnome-boxesd orca gnome-contacts gnome-getting-started-docs nautilus-sendto gnome-shell-extension-* libreoffice-* gnome-characters gnome-maps gnome-photos simple-scan virtualbox-guest-additions gedit gnome-boxes gnome-tour gnome-connections mediawriter eog gnome-system-monitor baobab gnome-log gnome-calculator gnome-weather gnome-text-editor gnome-font-viewer gnome-clocks gnome-calendar evince totem ffmpeg-free snapshot intel-media-driver cups-browsed anaconda malcontent-control loupe cockpit-bridge cockpit-system cockpit-storaged cockpit-ws cockpit-ws-selinux

Run Software Center, enable Flathub and Chrome.

Add RPM Fusion (for codecs):

sudo dnf install --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
flatpak remote-delete fedora

Update system via Software Center.

Install software:

sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
sudo dnf swap ffmpeg-free ffmpeg --allowerasing
sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld
sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld
sudo dnf copr enable atim/starship
sudo dnf copr enable dusansimic/themes
sudo dnf copr enable hyperreal/better_fonts
sudo dnf install xclip micro fuse-encfs zenity borgbackup openssl ffmpegthumbnailer nss-tools mosquitto ydotool amrnb amrwb faac faad2 flac gstreamer1-libav gstreamer1-plugins-bad-freeworld gstreamer-ffmpeg gstreamer-plugins-bad-nonfree gstreamer-plugins-espeak gstreamer-plugins-ugly lame libdca libmad libmatroska x264 x265 xvidcore gstreamer1-plugins-bad-free gstreamer1-plugins-base gstreamer1-plugins-good gstreamer-plugins-bad gstreamer1-plugins-ugly-free mpv ffmpeg xorg-x11-drv-intel intel-media-driver webp-pixbuf-loader heif-pixbuf-loader avif-pixbuf-loader libheif-freeworld ffmpeg-libs libva libva-utils gstreamer1-vaapi mozilla-openh264 libheif-tools unrar p7zip p7zip-plugins speech-dispatcher speech-dispatcher-utils google-chrome-stable nodejs podman git tig ripgrep xkill bat make difftastic nextcloud-client zsh util-linux-user starship sqlite  morewaita-icon-theme nethogs fuse-sshfs logiops libgda libgda-sqlite playerctl cabextract xorg-x11-font-utils tesseract tesseract-devel zed podman-compose sgdisk tesseract-langpack-rus zbar
sudo rpm -ivh --nodigest --nofiledigest https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

Set Flatpak languages:

flatpak config languages --set "es;en;ru"
sudo flatpak update

Install applications from Flatpak:

flatpak install flathub de.haeckerfelix.Fragments org.telegram.desktop org.nickvision.tubeconverter org.gnome.Loupe com.mattjakeman.ExtensionManager io.gitlab.adhami3310.Converter net.nokyan.Resources org.gnome.Calculator org.gnome.Logs org.gnome.Weather org.gnome.clocks org.gnome.Calendar org.gnome.Epiphany org.inkscape.Inkscape org.gnome.gitlab.YaLTeR.VideoTrimmer org.gnome.World.Iotas app.devsuite.Ptyxis hu.irl.cameractrls org.gnome.Snapshot org.gnome.Papers org.gimp.GIMP be.alexandervanhee.gradia com.github.PintaProject.Pinta com.yubico.yubioath org.gnome.font-viewer

Remove default GNOME console.

Set Ctrl + C and Ctrl + V for copy/paste in new terminal settings.

Add Autologin and fingers to user settings.

Speed-up boot:

sudo systemctl disable NetworkManager-wait-online.service

Disable Software auto-update and notifications.

Install micro and its plugins:

micro -plugin install editorconfig
sudo dnf remove nano

Disable waking up by mouse by creating /etc/udev/rules.d/logitech-bolt.rules:

ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTR{power/wakeup}="disabled"

Disable file system scanning:

dconf write /org/freedesktop/tracker/miner/files/crawling-interval -2

Personal Files

Copy .ssh and .local/share/gnupg:

~/Projects/env/bin/private

Change permissions:

chmod 744 ~/.ssh
chmod 700 ~/.local/share/gnupg/
chmod 644 ~/.ssh/* ~/.local/share/gnupg/*
chmod 700 ~/.local/share/gnupg/private-keys-v1.d
chmod 600 ~/.ssh/id_* ~/.local/share/gnupg/private-keys-v1.d/*

Copy configs:

~/Projects/env/bin/copy-env system

Input

Set mouse buttons config at /etc/logid.cfg:

devices: ({
  name: "MX Master 4";

  smartshift: { on: false; };

  hiresscroll: { hires: false; invert: false; target: false; };

  buttons: (
    {
      cid: 0x53;  # Back
      action: {
        type: "Keypress";
        keys: ["KEY_LEFTCTRL", "KEY_V"];
      };
    },
    {
      cid: 0x56;  # Forward
      action: {
        type: "Keypress";
        keys: ["KEY_LEFTCTRL", "KEY_C"];
      };
    },
    {
      cid: 0x1a0;  # Thumb button
      action: {
        type: "Keypress";
        keys: ["KEY_LEFTMETA"];
      };
    }
  );
});

Add -c /etc/logid.cfg to Exec field of /usr/lib/systemd/system/logid.service.

Enable mouse extensions:

sudo systemctl enable --now logid

Install custom universal keyboard layouts:

mkdir -p ~/.config/xkb/symbols/ ~/.config/xkb/rules/
wget -O ~/.config/xkb/symbols/universal_en https://raw.githubusercontent.com/ai/universal-layout/main/universal_en.xkb
wget -O ~/.config/xkb/symbols/universal_ru https://raw.githubusercontent.com/ai/universal-layout/main/universal_ru.xkb
wget -O ~/.config/xkb/rules/evdev.xml https://raw.githubusercontent.com/ai/universal-layout/main/evdev.xml

Set keyboard settings:

dconf write /org/gnome/desktop/input-sources/xkb-options "['grp_led:caps', 'lv3:ralt_switch', 'grp:shift_caps_switch']"

Terminal

Install eza:

curl -sL https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz
chmod +x eza
mkdir -p ~/.local/bin/
mv eza ~/.local/bin

Install atuin:

curl -sL https://github.com/atuinsh/atuin/releases/download/v18.6.1/atuin-x86_64-unknown-linux-gnu.tar.gz | tar xz --strip-components=1 atuin-x86_64-unknown-linux-gnu/atuin
mv atuin ~/.local/bin

Install zsh:

mkdir -p ~/.local/share/history
chmod 700 ~/.local/share/history
git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.local/lib/zsh/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.local/lib/zsh/zsh-autosuggestions
git clone https://github.com/jimhester/per-directory-history ~/.local/lib/zsh/per-directory-history
chsh -s /bin/zsh

Create /root/.zshrc:

eval "$(starship init zsh)"

Reboot.

Select English/Spanish/Catalan Universal (first) and Russian Universal layouts.

rm ~/.bash*

Open backup and copy files from it.

mkdir ~/backup
borg mount "ai@susedko.local:/var/mnt/vault/ai/backup" ~/backup

Copy files.

borg umount ~/backup
rmdir ~/backup

Start copying Vídeos/* from SDD.

Set color profile in Color settings.

Text Editors

Move Claude Code:

mkdir -p ~/.config/environment.d/
mkdir -p ~/.local/share/claude
echo "GNUPGHOME=$HOME/.local/share/gnupg" >> ~/.config/environment.d/90-clean-home.conf
echo "NODE_COMPILE_CACHE=$HOME/.cache/node" >> ~/.config/environment.d/90-clean-home.conf
echo "NPM_CONFIG_USERCONFIG=$HOME/.config/npmrc" >> ~/.config/environment.d/90-clean-home.conf
echo "CLAUDE_CONFIG_DIR=$HOME/.local/share/claude" >> ~/.config/environment.d/90-clean-home.conf

Sign-in into accounts in Zed.

Install Zed plugins: ini, dockerfile, toml, svelte, make, adwaita-pastel, material icon theme, codebook, sql, nginx, git-firefly, pug, xml, po, env, oxc.

Login to NextCloud client to sync.sitnik.es.

Open Iotas app, log-in into Nextcloud account.

GNOME Settings

Open Clock and add Vladivostok, Moscow, Lisbon, and San Francisco.

Run Weather app and set current location.

Install Lilex.

mkdir -p ~/.local/share/fonts
# Copy variable fonts
fc-cache -f -v
gsettings set org.gnome.desktop.interface monospace-font-name "Lilex 12"

Open settings:

  • Appearance: use standard GNOME wallpaper.
  • Notifications: disable Notifications on lock screen.
  • Search: keep only Calculator and Settings.
  • Multitask: disable Active corners & Hot corner.
  • Online accounts: add Google.
  • Power: enable Show percentage.
  • Mouse: mouse speed to 75%, touchpad speed to 90%.
  • Date and time: enable seconds and week day on top panel.
  • Privacy → disable File History.

Boost volume over 100%:

gsettings set org.gnome.desktop.sound allow-volume-above-100-percent true

Nautilus:

  • Enable Sort folders before files.
  • Enable Single click to open items.
  • Enable preview, search, file numbers for remote folders.

Disable GNOME extension version check:

gsettings set org.gnome.shell disable-extension-version-validation true

Download the latest framework_tool, extract and copy to the system:

sudo cp ~/Загрузки/framework_tool /usr/local/bin
sudo chmod a+x /usr/local/bin/framework_tool

Install tool for clipboard manager:

mkdir -p ~/.local/share/copyous@boerdereinar.dev/
curl https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/es/highlight.min.js > ~/.local/share/copyous@boerdereinar.dev/highlight.min.js

Install extensions from GNOME.md.

Restore settings file from backup:

~/Projects/env/bin/restore-gnome-extensions

Disable disk name in password prompt.

Folders

Create empty file template:

mkdir ~/.local/share/desktop
mkdir ~/.local/share/templates
touch ~/.local/share/templates/Пустой\ файл

Fix folders at ~/.config/user-dirs.dirs:

XDG_DESKTOP_DIR="$HOME/.local/share/desktop"
XDG_DOWNLOAD_DIR="$HOME/Загрузки"
XDG_TEMPLATES_DIR="$HOME/.local/share/templates"
XDG_PUBLICSHARE_DIR="$HOME/.local/share/desktop"
XDG_DOCUMENTS_DIR="$HOME/Документы"
XDG_MUSIC_DIR="$HOME"
XDG_PICTURES_DIR="$HOME/Загрузки"
XDG_VIDEOS_DIR="$HOME/Видео"

Clean bookmarks:

echo "" > ~/.config/gtk-3.0/bookmarks

Remove unnecessary folders:

mkdir "Загрузки/Снимки экрана"

Connect to server in Files by sftp://ai@susedko.local/ and add vault to Favorites places. Add Загрузки and Снимки экрана to Favorites places.

Left only Telegram, Firefox, Nautilus, Terminal, Iotas, System Update, and Backup in the dock.

Add icon theme:

gsettings set org.gnome.desktop.interface icon-theme 'MoreWaita'

Set icons:

  • /usr/share/icons/MoreWaita/scalable/places/folder-code.svg for ~/Projects/.
  • /usr/share/icons/Adwaita/scalable/places/folder-pictures.svg for ~/Загрузки/Снимки экрана/.

Home Server

Add server’s certificate to the system:

mkdir -p ~/.pki/nssdb
certutil -N -d sql:$HOME/.pki/nssdb --empty-password
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n sitnik -i ~/Projects/susedko/sitniks.crt
sudo cp ~/Projects/susedko/sitniks.crt /etc/pki/ca-trust/source/anchors/sitniks.pem
sudo update-ca-trust

Add service to ~/.config/systemd/user/force-lock.service:

[Unit]
Description=Force Lock

[Service]
ExecStart=/home/ai/Projects/env/bin/force-lock
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=default.target

Add service to ~/.config/systemd/user/domovoy-listener.service:

[Unit]
Description=Domovoy Listener
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/home/ai/Projects/env/bin/domovoy-listener
Restart=on-failure
RestartSec=30s
StartLimitBurst=5

[Install]
WantedBy=default.target

Add service to /etc/systemd/system/ydotoold.service:

[Unit]
Description=ydotool Daemon

[Service]
ExecStart=ydotoold --socket-path="/run/.ydotool_socket" --socket-own="1000:1000"
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=default.target

Enable services:

sudo systemctl enable ydotoold.service
sudo systemctl start ydotoold.service
systemctl --user enable domovoy-listener.service force-lock.service
systemctl --user start domovoy-listener.service force-lock.service

Development Tools

Install Zoom.

Install Node.js, TypeScript, and Dev Containers.

npm config set cache "$HOME/.cache/npm"
mkdir -p ~/.local/lib/node/
tee -a ~/.local/lib/node/package.json << EOM
{
  "dependencies": {
    "@devcontainers/cli": ">=0.80.1"
  }
}
EOM
cd ~/.local/lib/node && npm install && cd

mkdir -p ~/.local/share/zed_server
mkdir -p ~/.local/share/multiocular
mkdir -p ~/.local/share/history
chmod 700 ~/.local/share/history

Fix Dev Container with Podman in Zed:

sudo ln -s $(which podman) /usr/local/bin/docker

Create ~/.config/containers/containers.conf:

[containers]
userns = "keep-id"
label = false

Install Keybase:

sudo dnf install https://prerelease.keybase.io/keybase_amd64.rpm
run_keybase

Disable autostart in Keybase settings and revoke old laptop.

LanguageTool Server

Prepare ngrams:

mkdir -p ~/.local/share/ngrams
cd ~/.local/share/ngrams
wget https://languagetool.org/download/ngram-data/ngrams-en-20150817.zip
wget https://languagetool.org/download/ngram-data/ngrams-es-20150915.zip
wget https://languagetool.org/download/ngram-data/untested/ngram-ru-20150914.zip
unzip ngrams-en-20150817.zip
unzip ngrams-es-20150915.zip
unzip ngram-ru-20150914.zip
rm ngram*.zip

Create service unit ~/.config/systemd/user/languagetool.service:

[Unit]
Description=LanguageTool Server

[Service]
ExecStart=podman run --rm --replace --name languagetool \
  -p 8081:8010 \
  -e langtool_languageModel=/ngrams \
  -e Java_Xms=512m -e Java_Xmx=2g \
  -v /home/ai/.local/share/ngrams:/ngrams:Z \
  docker.io/erikvl87/languagetool:latest

[Install]
WantedBy=default.target

Enable service.

systemctl --user daemon-reload
systemctl --user enable --now languagetool.service
systemctl --user start --now languagetool.service