# Workstation - [Workstation](#workstation) - [Framework AMD Notes](#framework-amd-notes) - [ATH12K Wifi Drivers](#ath12k-wifi-drivers) - [Microcode](#microcode) - [linux-git kernel](#linux-git-kernel) - [Base Tools](#base-tools) - [ZSH](#zsh) - [Prompt Themes](#prompt-themes) - [Aliases](#aliases) - [Rollback Pacman Update](#rollback-pacman-update) - [Podman](#podman) - [Docker](#docker) - [QEMU/KVM](#qemukvm) - [Arch Guests](#arch-guests) - [Kubernetes](#kubernetes) - [VSCode](#vscode) - [Shell](#shell) - [Fonts](#fonts) - [Navigation](#navigation) - [Extensions](#extensions) - [Wireguard](#wireguard) - [Remote Desktop](#remote-desktop) - [Transmission](#transmission) - [VLC](#vlc) - [Bitwarden](#bitwarden) - [Nextcloud](#nextcloud) - [Insomnia](#insomnia) - [QMK](#qmk) - [Initialization](#initialization) - [Development](#development) - [Cura](#cura) - [Creality Print](#creality-print) - [Bambu Studio](#bambu-studio) - [Orca Slicer](#orca-slicer) - [AWS CLI](#aws-cli) - [NSlookup](#nslookup) - [rpi-imager](#rpi-imager) - [Install rpi-imager](#install-rpi-imager) - [Upgrade rpi-imager](#upgrade-rpi-imager) - [qFlipper](#qflipper) ## Framework AMD Notes ### ATH12K Wifi Drivers Install the wireless-regdb to set the regulatory domain to US ```bash pacman -S wireless-regdb ``` Edit `/etc/conf.d/wireless-regdom` to set the domain 1. `git clone https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware` 2. `cd ath12k-firmware` 3. Run the following: ```bash wget https://github.com/qca/qca-swiss-army-knife/raw/master/tools/scripts/ath12k/ath12k-fw-repo chmod 755 ath12k-fw-repo sudo ./ath12k-fw-repo --install /lib/firmware ``` 4. `sudo cp ath12k/board.bin /lib/firmware/ath12k/WCN7850/hw2.0/` 5. `sudo cp ath12k/regdb.bin /lib/firmware/ath12k/WCN7850/hw2.0/` 6. Reboot ### Microcode ```bash pacman -S amd-ucode ``` Edit /boot/loader/entries/.conf and add the following: ```bash title Arch Linux (Work) linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux.img options ... ``` ### linux-git kernel 1. `git clone https://aur.archlinux.org/linux-git.git` 2. `cd linux-git` 3. `makepkg` 4. `sudo pacman -U linux-git... linux-git-headers...` ## Base Tools ```bash # gvfs and gvfs-dnssd are for webdav support pacman -S rsync which git iperf3 pwgen dosfstools exfatprogs gvfs gvfs-dnssd ``` ## ZSH ```bash pacman -S zsh grml-zsh-config zsh-syntax-highlighting zsh-autosuggestions pkgfile chsh -s $(which zsh) cat < ~/.zshrc # Basic settings autoload bashcompinit && bashcompinit autoload -U compinit; compinit zstyle ':completion:*' menu select # Prompt settings autoload -Uz promptinit promptinit PROMPT_EOL_MARK= # Syntax Highlighting source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Command Not Found Autocomplete source /usr/share/doc/pkgfile/command-not-found.zsh ### Custom Commands and Aliases ### EOF ``` ### Prompt Themes See: Use `prompt -l` to list prompts Use `prompt -p` to see previews In your `.zshrc` set the following: ```bash autoload -Uz promptinit promptinit prompt grml ``` ### Aliases You can put you aliases in `.zshrc` with the following format: ```bash alias update='sudo pacman -Syu --noconfirm' ``` It's recommended that for complicated/multiline aliases you create a folder called `~/.local/scripts` where you store each alias. Make sure to back up this folder! #### Rollback Pacman Update This script will grep for all updates performed today and roll them back one by one. rollback_update.sh ```bash grep -a upgraded /var/log/pacman.log| grep $(date +"%Y-%m-%d") > /tmp/lastupdates.txt awk '{print $4}' /tmp/lastupdates.txt > /tmp/lines1;awk '{print $5}' /tmp/lastupdates.txt | sed 's/(/-/g' > /tmp/lines2 paste /tmp/lines1 /tmp/lines2 > /tmp/lines tr -d "[:blank:]" < /tmp/lines > /tmp/packages cd /var/cache/pacman/pkg/ for i in $(cat /tmp/packages); do sudo pacman --noconfirm -U "$i"*; done ``` ## Podman Install with the following `pacman -S podman buildah cni-plugins slirp4netns podman-dnsname aardvark-dns` Then you can run rootless containers like so: ```bash podman pull docker.io/library/python:3.11 podman run -it python:3.11 bash podman network create test podman pod create --network test --publish 8000:8000 test1 podman run -it --pod test1 python:3.11 bash ``` You can also deploy pods with kubernetes yamls. ```bash podman network create test podman kube play --network test podman-deploy.yaml --replace ``` ## Docker ```bash pacman -Sy docker docker-compose usermod -aG docker ducoterra ``` logout, log back in to use docker as non-root user. You can use btrfs as your storage driver by following these instructions: ## QEMU/KVM 1. Install virtualization capabilties ```bash pacman -S qemu-full libvirt iptables-nft dnsmasq virt-manager qemu-desktop swtpm usermod -aG libvirt ducoterra ``` 2. Edit /etc/libvirt/libvirtd.conf ```conf ... unix_sock_group = 'libvirt' ... unix_sock_rw_perms = '0770' ... ``` 3. Edit /etc/libvirt/qemu.conf ```conf # Some examples of valid values are: # # user = "qemu" # A user named "qemu" # user = "+0" # Super user (uid=0) # user = "100" # A user named "100" or a user with uid=100 # user = "ducoterra" # The group for QEMU processes run by the system instance. It can be # specified in a similar way to user. group = "ducoterra" ``` 4. `sudo systemctl enable --now libvirtd` 5. `sudo virsh net-autostart default` If you get a blank screen when launching a VM check that you've used the correct bios - either secboot or not secboot. This is the most common problem. ### Arch Guests In order to get drivers for spice you'll need the guest spice drivers: ```bash sudo pacman -S qemu-guest-agent spice-vdagent ``` ## Kubernetes ```bash pacman -S kubectl helm ``` ## VSCode For the open source version of code install `code`: ```bash sudo pacman -S code ``` For the proprietary version of vscode use the AUR: ```bash cd ~/aur git clone https://aur.archlinux.org/visual-studio-code-bin.git cd visual-studio-code-bin makepkg -si ``` ### Shell Edit settings.json ```json { "terminal.integrated.defaultProfile.linux": "zsh", } ``` ### Fonts Intel One Mono is designed to be easily readable for developers. Download and extract the ttf.zip ```bash mkdir ~/.local/share/fonts rsync -av /path/to/download/*.ttf ~/.local/share/fonts/ ``` Edit settings.json ```json { "editor.fontFamily": "Intel One Mono", "editor.fontLigatures": true, "terminal.integrated.fontFamily": "Intel One Mono", } ``` ### Navigation The best navigation shortcut ever is alt+left and alt+right to move the cursor to it's previous positions. ```json [ { "key": "alt+left", "command": "workbench.action.navigateBack", "when": "" }, { "key": "alt+right", "command": "workbench.action.navigateForward", "when": "" } ] ``` ### Extensions To save a list of installed extensions run: ```bash code --list-extensions >> vscode_extensions.txt ``` To install that list of extensions run: ```bash cat vscode_extensions.txt | xargs -L 1 code --install-extension ``` ## Wireguard Wireguard requires `linux-headers`. If that isn't installed or is misconfigured your vpn likely won't activate. ```bash pacman -S wireguard-tools ``` ## Remote Desktop ```bash pacman -S remmina freerdp ``` ## Transmission ```bash pacman -S gtk4 transmission-gtk ``` ## VLC ```bash pacman -S vlc ``` ## Bitwarden ```bash mv ~/Downloads/Bitwarden*.AppImage ~/Applications/Bitwarden.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Bitwarden Exec=/home/ducoterra/Applications/Bitwarden.AppImage Icon=/home/ducoterra/.icons/bitwarden.png Type=Application ``` ## Nextcloud ```bash mv ~/Downloads/Nextcloud*.AppImage ~/Applications/Nextcloud.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Nextcloud Exec=/home/ducoterra/Applications/Nextcloud.AppImage Icon=/home/ducoterra/.icons/nextcloud.png Type=Application ``` ## Insomnia ```bash mv ~/Downloads/Insomnia*.AppImage ~/Applications/Insomnia.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Insomnia Exec=/home/ducoterra/Applications/Insomnia.AppImage Icon=/home/ducoterra/.icons/insomnia.png Type=Application ``` ## QMK ### Initialization I have a mirror and a fork of the mirror on my personal Gitea. For this strategy you'll need to checkout the fork and add the mirror. This ensures I'll always have an up-to-date mirror of qmk while also giving me a repo to make changes for my personal keyboards. ```bash git clone git@gitea.reeseapps.com:ducoterra/qmk_firmware.git cd qmk_firmware git remote add mirror git@gitea.reeseapps.com:mirrors/qmk_firmware.git git fetch mirror git rebase mirror/master pacman -S qmk qmk setup sudo cp /home/ducoterra/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/ qmk config user.keyboard=keychron/q11/ansi_encoder qmk config user.keymap=ducoterra ``` ### Development Every time you start a project you'll want to sync with the mirror. ```bash git fetch mirror git rebase mirror/master ``` Commit to master while you're in the fork. ## Cura ```bash mv ~/Downloads/*Cura*.AppImage ~/Applications/Cura.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Cura Exec=/home/ducoterra/Applications/Cura.AppImage Icon=/home/ducoterra/.icons/cura.png Type=Application ``` ## Creality Print ```bash mv ~/Downloads/Creality_Print*.AppImage ~/Applications/Creality_Print.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Creality Print Exec=/home/ducoterra/Applications/Creality_Print.AppImage Icon=/home/ducoterra/.icons/creality_print.png Type=Application ``` ## Bambu Studio I usually grab the Ubuntu appimage. The Fedora one seems to crash when displaying the camera. ```bash # You might need to install webkit2gtk pacman -S webkit2gtk ``` ```bash mv ~/Downloads/Bambu_Studio_linux*.AppImage ~/Applications/BambuStudio.AppImage chmod +x ~/Applications/*.AppImage ``` Note! The file name "BambuStudio.desktop" must match the appimage name "BambuStudio" for the icon to show up. ~/.local/share/applications/BambuStudio.desktop ```conf [Desktop Entry] Name=Bambu Studio Exec=/home/ducoterra/Applications/BambuStudio.AppImage Icon=/home/ducoterra/.icons/bambu_studio.png Type=Application ``` ```bash update-desktop-database ``` ## Orca Slicer This is an open source fork of Bambu Slicer with more features. ```bash # You might need to install webkit2gtk pacman -S webkit2gtk ``` ```bash mv ~/Downloads/OrcaSlicer*.AppImage ~/Applications/OrcaSlicer.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=Orca Slicer Exec=/home/ducoterra/Applications/OrcaSlicer.AppImage Icon=/home/ducoterra/.icons/orca_slicer.png Type=Application ``` ## AWS CLI ```bash # Install less if you don't have it already pacman -S less curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install ``` Add the following to your .zshrc: ```bash complete -C '/usr/local/bin/aws_completer' aws ``` ## NSlookup ```bash pacman -Syu bind ``` ## rpi-imager ```bash sudo pacman -S cmake qt5-base ``` ### Install rpi-imager ```bash git clone https://github.com/raspberrypi/rpi-imager.git cd rpi-imager mkdir -p build cd build cmake ../src make sudo make install ``` ### Upgrade rpi-imager ```bash ```bash cd rpi-imager git pull rm -r build mkdir -p build cd build cmake ../src make sudo make install ``` ## qFlipper ```bash mv ~/Downloads/*qFlipper*.AppImage ~/Applications/qFlipper.AppImage chmod +x ~/Applications/*.AppImage ``` ```conf [Desktop Entry] Name=qFlipper Exec=/home/ducoterra/Applications/qFlipper.AppImage Icon=/home/ducoterra/.icons/qFlipper.png Type=Application ```