├── .github └── workflows │ └── check-packages.yml ├── GUIDES.md ├── README.md ├── REFERENCES.md ├── apps ├── gnome-randr.py └── powerprofilecycle.sh ├── configs ├── alvr │ ├── alvr-flatpak.desktop │ └── session.json ├── corectrl │ ├── 90-corectrl.rules │ ├── corectrl.ini │ └── profiles │ │ ├── _global_.ccpro │ │ ├── alvr_dashboard.ccpro │ │ └── wivrn_dashboard.ccpro ├── firefox │ ├── gnome.js │ ├── plasma.js │ └── user.js ├── flatpak │ ├── com.belmoussaoui.Authenticator │ ├── com.bitwarden.desktop │ ├── com.brave.Browser │ ├── com.discordapp.Discord │ ├── com.github.GradienceTeam.Gradience │ ├── com.github.Matoking.protontricks │ ├── com.github.finefindus.eyedropper │ ├── com.github.flxzt.rnote │ ├── com.github.marhkb.Pods │ ├── com.github.tchx84.Flatseal │ ├── com.google.AndroidStudio │ ├── com.heroicgameslauncher.hgl │ ├── com.mattjakeman.ExtensionManager │ ├── com.spotify.Client │ ├── com.usebottles.bottles │ ├── com.usebruno.Bruno │ ├── com.valvesoftware.Steam │ ├── com.visualstudio.code │ ├── com.vysp3r.ProtonPlus │ ├── dev.k8slens.OpenLens │ ├── dev.lizardbyte.app.Sunshine │ ├── dev.skynomads.Seabird │ ├── global │ ├── io.beekeeperstudio.Studio │ ├── io.github.Foldex.AdwSteamGtk │ ├── io.github.celluloid_player.Celluloid │ ├── io.github.wivrn.wivrn │ ├── io.kinvolk.Headlamp │ ├── io.podman_desktop.PodmanDesktop │ ├── md.obsidian.Obsidian │ ├── net.cozic.joplin_desktop │ ├── net.davidotek.pupgui2 │ ├── net.nokyan.Resources │ ├── org.blender.Blender │ ├── org.gaphor.Gaphor │ ├── org.gimp.GIMP │ ├── org.gnome.Evince │ ├── org.gnome.gitg │ ├── org.godotengine.Godot │ ├── org.kde.keysmith │ ├── org.kde.neochat │ ├── org.kde.okular │ ├── org.keepassxc.KeePassXC │ ├── org.libreoffice.LibreOffice │ ├── org.mozilla.firefox │ └── org.sqlitebrowser.sqlitebrowser ├── foot │ └── foot.ini ├── fuzzel │ └── fuzzel.ini ├── gnome │ ├── 01-custom │ ├── 01-laptop │ └── gnome-mimeapps.list ├── greetd-tuigreet │ └── config.toml ├── gtk │ └── kde-gtk.css ├── mangohud │ └── MangoHud.conf ├── opensnitch │ ├── default-config.json │ └── rules │ │ ├── bitwarden.json │ │ ├── chromium.json │ │ ├── curl.json │ │ ├── discord.json │ │ ├── dockerd.json │ │ ├── firefox.json │ │ ├── flatpak.json │ │ ├── fwupdmgr.json │ │ ├── git-remote-http.json │ │ ├── insomnia.json │ │ ├── networkmanager.json │ │ ├── obsidian.json │ │ ├── pacman.json │ │ ├── paru.json │ │ ├── plasmashell.json │ │ ├── ssh.json │ │ ├── syncthing.json │ │ ├── systemd-timesyncd.json │ │ ├── visual-studio-code.json │ │ └── wireguard.json ├── openvr │ ├── openvrpaths.vrpath.opencomposite │ ├── openvrpaths.vrpath.steam │ └── openvrpaths.vrpath.xrizer ├── plasma │ ├── colors │ │ ├── Aseprite.colors │ │ ├── Blender.colors │ │ ├── DiscordOnyx.colors │ │ ├── Gimp.colors │ │ ├── Godot.colors │ │ ├── HeroicGamesLauncher.colors │ │ ├── ObsidianDark.colors │ │ ├── Spotify.colors │ │ └── VSCodeModernDark.colors │ ├── konsole │ │ ├── Breeze_Dark_Modern.colorscheme │ │ ├── custom.profile │ │ └── konsole_breeze_modern_dark.css │ ├── plasma-packages.md │ └── xsettingsd │ │ └── xsettingsd.conf ├── sunshine │ ├── apps-gnome.json │ ├── apps-plasma.json │ └── sunshine.conf ├── sway │ ├── _,mine │ ├── appearance │ ├── applications │ ├── bar │ ├── config │ ├── idle │ ├── input │ ├── key_bindings │ ├── output │ ├── startup │ └── variables ├── swaylock │ └── config ├── vscode │ └── settings.json ├── waybar │ ├── config │ └── style.css ├── wivrn │ └── config.json ├── yambar │ └── config.yaml └── zsh │ ├── .p10k.zsh │ └── .zshrc ├── flatpak.sh ├── gaming.sh ├── gnome.sh ├── install.sh ├── misc.sh ├── plasma.sh ├── setup.sh ├── steam.sh ├── sunshine.sh ├── sway.sh └── vr.sh /.github/workflows/check-packages.yml: -------------------------------------------------------------------------------- 1 | name: Verify packages 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' # Runs daily at midnight UTC 6 | workflow_dispatch: # Allows manual triggering 7 | 8 | jobs: 9 | check-packages: 10 | runs-on: ubuntu-latest 11 | container: 12 | image: archlinux:multilib-devel 13 | 14 | steps: 15 | - name: Checkout Repository 16 | uses: actions/checkout@v4 17 | 18 | - name: Update Pacman and install base packages 19 | run: | 20 | # Add custom repo 21 | tee -a /etc/pacman.conf << EOF 22 | 23 | [gjpin] 24 | SigLevel = Optional TrustAll 25 | Server = https://gjpin.github.io/arch-linux-repo/repo/ 26 | EOF 27 | 28 | # Update pacman database and install essential tools 29 | pacman -Syyu --noconfirm 30 | pacman -S --noconfirm grep sed coreutils git 31 | 32 | - name: Extract GPU packages from install.sh 33 | run: | 34 | # Extract all GPU_PACKAGES values from install.sh 35 | ALL_GPU_PACKAGES=$(grep -E 'export GPU_PACKAGES="[^"]*"' install.sh | \ 36 | sed 's/export GPU_PACKAGES="\([^"]*\)"/\1/' | \ 37 | tr '\n' ' ' | \ 38 | xargs -n1 | sort -u | xargs) 39 | echo "GPU_PACKAGES=$ALL_GPU_PACKAGES" >> $GITHUB_ENV 40 | 41 | - name: Extract and validate packages 42 | run: | 43 | # Array to store failed packages 44 | declare -a failed_packages 45 | 46 | # Function to validate a single package 47 | validate_package() { 48 | local package="$1" 49 | 50 | # Skip empty, comments, argument flags, or variables like $GPU_PACKAGES 51 | if [[ -z "$package" ]] || [[ "$package" == "#"* ]] || [[ "$package" == "-"* ]] || [[ "$package" =~ ^-- ]] || [[ "$package" == *"$"* ]]; then 52 | return 0 53 | fi 54 | 55 | # Extract repository if present (format: repo/package) 56 | if [[ "$package" == */* ]]; then 57 | repo_name="${package%%/*}" 58 | package_name="${package##*/}" 59 | 60 | # Search for package in the specified repository 61 | if pacman -Sl "$repo_name" | grep -q "^$repo_name $package_name "; then 62 | echo "✅ Package exists in pacman: $package" 63 | return 0 64 | fi 65 | else 66 | package_name="$package" 67 | fi 68 | 69 | # Check package in pacman (if not in a custom repo) 70 | if pacman -Ss "^${package_name}$" > /dev/null 2>&1; then 71 | echo "✅ Package exists in pacman: $package" 72 | # Check package in AUR 73 | elif curl -s "https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=${package_name}" | grep -q '"resultcount":1'; then 74 | echo "✅ Package exists in AUR: $package" 75 | else 76 | failed_packages+=("$package") 77 | echo "❌ Package not found: $package" 78 | fi 79 | } 80 | 81 | # Function to clean and process a line of packages 82 | process_packages() { 83 | local line="$1" 84 | # Remove the command and any arguments like --ask N 85 | cleaned_line=$(echo "$line" | \ 86 | sed 's/pacman -S --noconfirm//g' | \ 87 | sed 's/paru -S --noconfirm//g' | \ 88 | sed 's/--ask [0-9]*//g' | \ 89 | sed 's/--needed//g' | \ 90 | tr '\\' ' ') 91 | 92 | # Process packages on this line 93 | for pkg in $cleaned_line; do 94 | validate_package "$pkg" 95 | done 96 | } 97 | 98 | # Process each .sh file 99 | for file in *.sh; do 100 | if [[ -f "$file" ]]; then 101 | echo "📄 Checking packages in $file..." 102 | 103 | # Read file line by line 104 | while IFS= read -r line || [[ -n "$line" ]]; do 105 | # Check if line contains pacman or paru install command 106 | if [[ "$line" == *"pacman -S --noconfirm"* ]] || [[ "$line" == *"paru -S --noconfirm"* ]]; then 107 | # Process the current line 108 | process_packages "$line" 109 | 110 | # If line ends with \, process continuation lines 111 | if [[ "$line" =~ \\[[:space:]]*$ ]]; then 112 | while IFS= read -r line || [[ -n "$line" ]]; do 113 | # Stop if we hit a line that doesn't end with \ and isn't part of package list 114 | if [[ ! "$line" =~ \\[[:space:]]*$ ]] && [[ ! "$line" =~ ^[[:space:]]*[a-zA-Z0-9] ]]; then 115 | break 116 | fi 117 | # Clean and process the continuation line 118 | process_packages "$line" 119 | done 120 | fi 121 | fi 122 | done < "$file" 123 | fi 124 | done 125 | 126 | # Validate GPU_PACKAGES 127 | echo "🔍 Checking GPU_PACKAGES: $GPU_PACKAGES" 128 | for pkg in $GPU_PACKAGES; do 129 | validate_package "$pkg" 130 | done 131 | 132 | # Print summary 133 | echo "=== Summary ===" 134 | if [ ${#failed_packages[@]} -eq 0 ]; then 135 | echo "✅ All packages validated successfully!" 136 | exit 0 137 | else 138 | echo "❌ Failed packages:" 139 | printf '%s\n' "${failed_packages[@]}" 140 | echo "Total failed packages: ${#failed_packages[@]}" 141 | exit 1 142 | fi 143 | -------------------------------------------------------------------------------- /GUIDES.md: -------------------------------------------------------------------------------- 1 | # Table of Contents 2 | 3 | - [Guides](#guides) 4 | - [Sunshine](#sunshine) 5 | - [ALVR](#alvr) 6 | - [Flatpak](#alvr-flatpak) 7 | - [Native](#alvr-native) 8 | - [How to chroot](#how-to-chroot) 9 | - [How to re-enroll keys in TPM2](#how-to-re-enroll-keys-in-tpm2) 10 | - [How to show systemd-boot menu](#how-to-show-systemd-boot-menu) 11 | - [How to repair EFI](#how-to-repair-efi) 12 | - [How to revert to a previous Flatpak commit](#how-to-revert-to-a-previous-flatpak-commit) 13 | - [How to use Gamescope + MangoHud in Steam](#how-to-use-gamescope--mangohud-in-steam) 14 | - [Troubleshooting](#troubleshooting) 15 | - [Keyring issues](#keyring-issues) 16 | - [System Configuration](#system-configuration) 17 | - [Auto-mount extra drive (drive in use)](#auto-mount-extra-drive-drive-in-use) 18 | - [Auto-mount extra drive (from scratch)](#auto-mount-extra-drive-from-scratch) 19 | - [Customization](#customization) 20 | - [Download and apply GTK themes with Gradience](#download-and-apply-gtk-themes-with-gradience) 21 | 22 | # Guides 23 | 24 | ## Sunshine 25 | If using Steam native, then in Sunshine's app.json use the following instead: 26 | 27 | ``` 28 | steam-runtime -gamepadui 29 | ``` 30 | 31 | ## WiVRN 32 | 1. Set game launch options to: 33 | ```bash 34 | VR_OVERRIDE=/opt/opencomposite XR_RUNTIME_JSON=/run/host/usr/share/openxr/1/openxr_wivrn.json PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/wivrn/comp_ipc %command% 35 | ``` 36 | 37 | ## ALVR 38 | ### Flatpak 39 | 40 | 1. Install SteamVR 41 | 2. Run: 42 | 43 | ```bash 44 | sudo setcap CAP_SYS_NICE+eip ~/.var/app/com.valvesoftware.Steam/data/Steam/steamapps/common/SteamVR/bin/linux64/vrcompositor-launcher 45 | ``` 46 | 47 | 3. Launch and close SteamVR 48 | 4. Open ALVR 49 | 5. In the ALVR Dashboard under All Settings (Advanced) > Audio, enable Game Audio and Microphone 50 | 6. In the same place under Microphone, click Expand and set Devices to custom. Enter `default` for the name for both Sink and Source 51 | 7. In the ALVR Dashboard, under All Settings (Advanced) > Connection, set the On connect script and On disconnect script to the absolute path of the script (relative to the Flatpak environment), i.e. `/home/$USER/.var/app/com.valvesoftware.Steam/audio-flatpak-setup.sh` 52 | 8. Restart Steam and ALVR 53 | 54 | ### Native 55 | 56 | 0. See more tips in the official ALVR wiki: [troubleshooting](https://github.com/alvr-org/ALVR/wiki/Linux-Troubleshooting) and [tweaks](https://github.com/alvr-org/ALVR/wiki/Settings-tutorial) 57 | 1. Install SteamVR, launch it once and close it 58 | 2. Add the following commandline option of SteamVR (SteamVR -> Manage/Right Click -> Properties -> General -> Launch Options): 59 | 60 | ``` 61 | ~/.local/share/Steam/steamapps/common/SteamVR/bin/vrmonitor.sh %command% 62 | ``` 63 | 64 | 3. Add workaround for non closable SteamVR window: 65 | 66 | ```bash 67 | # References: 68 | # https://github.com/ValveSoftware/SteamVR-for-Linux/issues/577#issuecomment-1872400869 69 | 70 | sed -ri 's/("preload".*)true/\1false/g' ~/.steam/steam/steamapps/common/SteamVR/drivers/lighthouse/resources/webhelperoverlays.json 71 | sed -ri 's/("preload".*)true/\1false/g' ~/.steam/steam/steamapps/common/SteamVR/resources/webhelperoverlays.json 72 | ``` 73 | 74 | 4. Apply SteamVR patches (optional): 75 | 76 | ```bash 77 | curl -s https://raw.githubusercontent.com/alvr-org/ALVR-Distrobox-Linux-Guide/main/patch_bindings_spam.sh | sh -s /home/zero/.steam/steam/steamapps/common/SteamVR 78 | ``` 79 | 80 | 5. Change ALVR settings: 81 | 82 | ```bash 83 | # References: 84 | # https://github.com/alvr-org/ALVR/wiki/ALVR-in-distrobox 85 | 86 | Presets: 87 | - Preferred framerate: 90hz 88 | 89 | Video: 90 | - Bitrate: constant 91 | - 200mbps 92 | - Preferred codec: AV1 93 | - Foveated encoding: on 94 | - Center region width: 0.680 (increased 50% from default) 95 | - Center region height: 0.600 (increased 50% from default) 96 | - Color correction: on 97 | - Sharpening: 1.00 98 | - Maximum buffering: 1.50 frames 99 | - Encoder config 100 | - 10-bit encoding: on 101 | - Override headset's preference for 10-bit encoding: on 102 | - Transcoding view resolution: absolute 103 | - Width: 2496 104 | - Height: 2592 105 | - Emulated headset view resolution: absolute 106 | - Width: 2496 107 | - Height: 2592 108 | - Preferred FPS: 90hz 109 | 110 | Headset: 111 | - Controllers: on 112 | - Emulation mode: Quest 3 Touch Plus 113 | 114 | Connection: 115 | - Stream protocol: UDP 116 | ``` 117 | 118 | 6. Change SteamVR settings: 119 | 120 | ```bash 121 | - Disable SteamVR Home 122 | - Render Resolution: Custom - 100% 123 | - Disable Advanced Supersample Filtering 124 | - Set steamvr as openxr runtime 125 | ``` 126 | 127 | ## How to chroot 128 | 129 | ```bash 130 | cryptsetup luksOpen /dev/disk/by-partlabel/LUKS system 131 | mount -t ext4 LABEL=system /mnt 132 | mount /dev/nvme0n1p1 /mnt/boot 133 | arch-chroot /mnt 134 | ``` 135 | 136 | ## How to re-enroll keys in TPM2 137 | 138 | ```bash 139 | sudo systemd-cryptenroll --wipe-slot=tpm2 /dev/md/ArchArray OR /dev/nvme0n1p2 140 | sudo systemd-cryptenroll --tpm2-pcrs=0+7 --tpm2-device=auto /dev/md/ArchArray OR /dev/nvme0n1p2 141 | ``` 142 | 143 | ## How to show systemd-boot menu 144 | 145 | ```bash 146 | Press 'space' during boot 147 | ``` 148 | 149 | ## How to repair EFI 150 | 151 | ```bash 152 | 1. chroot 153 | 2. fsck -a /dev/nvme0n1p1 154 | ``` 155 | 156 | ## How to revert to a previous Flatpak commit 157 | 158 | ```bash 159 | # List available commits 160 | flatpak remote-info --log flathub org.godotengine.Godot 161 | 162 | # Downgrade to specific version 163 | sudo flatpak update --commit=${HASH} org.godotengine.Godot 164 | 165 | # Pin version 166 | flatpak mask org.godotengine.Godot 167 | ``` 168 | 169 | ## How to use Gamescope + MangoHud in Steam 170 | 171 | ```bash 172 | # MangoHud 173 | mangohud %command% 174 | 175 | # gamescope in 1440p 176 | gamescope -W 2560 -H 1440 -f -- %command% 177 | 178 | # gamescope in 1440p + MangoHud 179 | gamescope -W 2560 -H 1440 -f -- mangohud %command% 180 | 181 | # gamescope upscale from 1080p to 1440p with FSR + mangohud 182 | gamescope -h 1080 -H 1440 -U -f -- mangohud %command% 183 | ``` 184 | 185 | ## keyring issues 186 | 187 | ```bash 188 | killall gpg-agent 189 | rm -rf /etc/pacman.d/gnupgp 190 | pacman-key --init 191 | pacman-key --populate 192 | ``` 193 | 194 | ## Auto-mount extra drive (drive in use) 195 | 196 | ```bash 197 | # Encrypt and open LUKS partition 198 | sudo cryptsetup luksOpen /dev/disk/by-partlabel/LUKSDATA data 199 | 200 | # Mount root device 201 | sudo mkdir -p /data 202 | sudo mount -t ext4 LABEL=data /data 203 | 204 | # Auto-mount 205 | sudo tee -a /etc/fstab << EOF 206 | 207 | # data disk 208 | /dev/mapper/data /data ext4 defaults 0 0 209 | EOF 210 | 211 | sudo tee -a /etc/crypttab << EOF 212 | 213 | data UUID=$(sudo blkid -s UUID -o value /dev/nvme1n1p1) none 214 | EOF 215 | 216 | # Auto unlock 217 | sudo systemd-cryptenroll --tpm2-device=auto /dev/nvme1n1p1 218 | ``` 219 | 220 | ## Auto-mount extra drive (from scratch) 221 | 222 | ```bash 223 | # Delete old partition layout and re-read partition table 224 | sudo wipefs -af /dev/nvme1n1 225 | sudo sgdisk --zap-all --clear /dev/nvme1n1 226 | sudo partprobe /dev/nvme1n1 227 | 228 | # Partition disk and re-read partition table 229 | sudo sgdisk -n 1:0:0 -t 1:8309 -c 1:LUKSDATA /dev/nvme1n1 230 | sudo partprobe /dev/nvme1n1 231 | 232 | # Encrypt and open LUKS partition 233 | sudo cryptsetup --type luks2 --hash sha512 --use-random luksFormat /dev/disk/by-partlabel/LUKSDATA 234 | sudo cryptsetup luksOpen /dev/disk/by-partlabel/LUKSDATA data 235 | 236 | # Format partition to EXT4 237 | sudo mkfs.ext4 -L data /dev/mapper/data 238 | 239 | # Mount root device 240 | sudo mkdir -p /data 241 | sudo mount -t ext4 LABEL=data /data 242 | 243 | # Auto-mount 244 | sudo tee -a /etc/fstab << EOF 245 | 246 | # data disk 247 | /dev/mapper/data /data ext4 defaults 0 0 248 | EOF 249 | 250 | sudo tee -a /etc/crypttab << EOF 251 | 252 | data UUID=$(sudo blkid -s UUID -o value /dev/nvme1n1p1) none 253 | EOF 254 | 255 | # Change ownership to user 256 | sudo chown -R $USER:$USER /data 257 | 258 | # Auto unlock 259 | sudo systemd-cryptenroll --tpm2-pcrs=0+7 --tpm2-device=auto /dev/nvme1n1p1 260 | ``` 261 | 262 | ## Download and apply GTK themes with Gradience 263 | 264 | ```bash 265 | # Download Breeze themes 266 | sudo -u ${NEW_USER} flatpak run --command=gradience-cli com.github.GradienceTeam.Gradience download -n "Breeze Dark" 267 | sudo -u ${NEW_USER} flatpak run --command=gradience-cli com.github.GradienceTeam.Gradience download -n "Breeze Light" 268 | 269 | # Apply Breeze Dark theme 270 | sudo -u ${NEW_USER} flatpak run --command=gradience-cli com.github.GradienceTeam.Gradience apply -n "Breeze Dark" --gtk "both" 271 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Arch Linux install scripts 2 | 3 | WARNING: Running install.sh with delete all data in nvme0n1 and nvme1n1 (if using RAID0) without confirmation. 4 | 5 | ## Features 6 | 7 | - Unified kernel image (standard + LTS kernels) 8 | - Measured boot 9 | - Secure boot with custom keys 10 | - LUKS automatic unlock with TPM 11 | - systemd-boot 12 | - zram 13 | - Single disk or RAID0 support 14 | - nftables 15 | - Paru (AUR helper) 16 | - AppArmor + AppArmor.d profiles (complain mode by default) 17 | - ZSH 18 | - Plasma / Gnome / Sway 19 | - Steam / Heroic / Bottles 20 | - And a lot more. Code is documented and somewhat modular 21 | 22 | ## Requirements 23 | 24 | - UEFI 25 | - NVMe SSD 26 | - Single GPU (Intel or Radeon) 27 | - TPM2 28 | 29 | ## Partitions layout 30 | 31 | | Name | Type | FS Type | Mountpoint | Size | 32 | | --------------------------------------- | :---: | :-----: | :--------: | :----------: | 33 | | nvme0n1 | disk | | | | 34 | | ├─nvme0n1p1 | part | FAT32 | /boot | 1GiB | 35 | | ├─nvme0n1p2 | part | LUKS2 | | | 36 | |      ├──system | crypt | EXT4 | / | Rest of disk | 37 | 38 | ## Installation guide 39 | 40 | 1. Disable secure boot and delete secure boot keys (automatically enters setup mode) 41 | 2. Boot into Arch Linux ISO 42 | 3. Connect to the internet. If using wifi, you can use `iwctl` to connect to a network: 43 | - scan for networks: `station wlan0 scan` 44 | - list available networks: `station wlan0 get-networks` 45 | - connect to a network: `station wlan0 connect SSID` 46 | 4. Update repos and install git: `pacman -Sy git` 47 | 5. (if previous step fails) Init and populate keyring: `pacman-key --init && pacman-key --populate` 48 | 6. Clone repo: `git clone https://github.com/gjpin/arch-linux.git` 49 | 7. Run script: `cd arch-linux && ./install.sh` 50 | 8. Reboot and enable secure boot 51 | 9. Enroll LUKS key in TPM2: `sudo systemd-cryptenroll --tpm2-pcrs=0+7 --tpm2-device=auto /dev/md/ArchArray (if RAID0) OR /dev/nvme0n1p2` 52 | 10. Re-configure p10k: `p10k configure` 53 | 11. Install Flatpak and applications: 54 | ```bash 55 | curl -LO https://raw.githubusercontent.com/gjpin/arch-linux/main/flatpak.sh 56 | chmod +x flatpak.sh 57 | ./flatpak.sh 58 | rm -f flatpak.sh 59 | ``` 60 | 12. Ensure user services are running 61 | ```bash 62 | systemctl --user enable --now pipewire-pulse.service 63 | systemctl --user enable --now syncthing.service 64 | systemctl --user enable --now podman.socket 65 | 66 | if [[ -f "/usr/bin/sunshine" ]]; then 67 | systemctl --user enable --now sunshine 68 | fi 69 | 70 | if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then 71 | systemctl --user enable --now gcr-ssh-agent.socket 72 | fi 73 | ``` 74 | 13. Consider [enforcing AppArmor.d profiles](https://apparmor.pujol.io/enforce/) 75 | 76 | ## Guides 77 | See [HERE](https://github.com/gjpin/arch-linux/blob/main/GUIDES.md) 78 | 79 | ## References 80 | See [HERE](https://github.com/gjpin/arch-linux/blob/main/REFERENCES.md) 81 | -------------------------------------------------------------------------------- /REFERENCES.md: -------------------------------------------------------------------------------- 1 | # References 2 | 3 | ## sysctl 4 | 5 | ```bash 6 | # References: 7 | # https://github.com/CryoByte33/steam-deck-utilities/blob/main/docs/tweak-explanation.md 8 | # https://wiki.cachyos.org/configuration/general_system_tweaks/ 9 | # https://gitlab.com/cscs/maxperfwiz/-/blob/master/maxperfwiz?ref_type=heads 10 | 11 | # Disabling watchdog will speed up your boot and shutdown, because one less module is loaded. Additionally disabling watchdog timers increases performance and lowers power consumption. 12 | kernel.nmi_watchdog=0 13 | 14 | # In some cases, split lock mitigate can slow down performance in some applications and games. https://github.com/doitsujin/dxvk/issues/2938 15 | kernel.split_lock_mitigate=0 16 | 17 | # This feature proactively defragments memory when Linux detects "downtime". 18 | # Note that compaction has a non-trivial system-wide impact as pages belonging to different processes are moved around, which could also lead to latency spikes in unsuspecting applications. 19 | vm.compaction_proactiveness=0 20 | 21 | # PLU configures how many times a process can try to get a lock on a page before "fair" behavior kicks in, and guarantees that process access to a page. https://www.phoronix.com/review/linux-59-fairness 22 | vm.page_lock_unfairness=1 23 | 24 | # total available memory that contains free pages and reclaimable pages, the number of pages at which a process which is generating disk writes will itself start writing out dirty data. Note the optimum percentage may change depending on amount of available memory. Values resulting in 100MB-600MB are ideal. 25 | vm.dirty_bytes=419430400 26 | 27 | # total available memory that contains free pages and reclaimable pages, the number of pages at which the background kernel flusher threads will start writing out dirty data.Note the optimum percentage may change depending on amount of available memory. Values resulting in 50MB-400MB are ideal. 28 | vm.dirty_background_bytes=209715200 29 | 30 | # Dirty expire centisecs tunable is used to define when dirty data is old enough to be eligible for writeout by the kernel flusher threads, expressed in 100'ths of a second. Data which has been dirty in-memory for longer than this interval will be written out next time a flusher thread wakes up. 31 | vm.dirty_expire_centisecs=3000 32 | 33 | # The kernel flusher threads will periodically wake up and write 'old' data out to disk. This tunable expresses the interval between those wakeups, in 100'ths of a second. 34 | vm.dirty_writeback_centisecs=1500 35 | ``` 36 | 37 | ## AMD P-State EPP 38 | 39 | ```bash 40 | # References: 41 | # https://www.phoronix.com/review/amd-pstate-epp-ryzen-mobile 42 | # https://www.phoronix.com/review/linux-63-amd-epyc-epp 43 | # https://www.reddit.com/r/linux/comments/15p4bfs/amd_pstate_and_amd_pstate_epp_scaling_driver/ 44 | 45 | # Check scaling driver in use 46 | cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver 47 | 48 | # Check EPP in use 49 | cat /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference 50 | 51 | # Check available EPP 52 | cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_available_preferences 53 | 54 | # Check scaling governor 55 | cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 56 | 57 | # Check available scaling governors 58 | cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 59 | ``` 60 | 61 | ## AMD GPU Power profiles 62 | ```bash 63 | # View Current Power State 64 | cat /sys/class/drm/card1/device/power_dpm_state 65 | 66 | # View Current Performance Level 67 | cat /sys/class/drm/card1/device/power_dpm_force_performance_level 68 | 69 | # Check Current Power Profile Mode 70 | cat /sys/class/drm/card1/device/pp_power_profile_mode 71 | ``` -------------------------------------------------------------------------------- /apps/powerprofilecycle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # https://gitlab.com/lassegs/powerprofilecycle/-/blob/ae51b294874b35fecd52480fc8dfa36a1e1484f4/powerprofilecycle.sh 4 | # Script to cycle through power-profiles-daemon profiles. Handy for integration 5 | # with waybar, i3blocks and others. When run it will cycle to next profile and 6 | # output a corresponding fa-icon for displaying in a bar. With the -m toggle, 7 | # the script will not cycle profiles, rather just print fa-icon corresponding to 8 | # current profile. 9 | # 10 | 11 | PSET="powerprofilesctl set" 12 | PGET="powerprofilesctl get" 13 | 14 | while getopts "mh" opt; do 15 | case $opt in 16 | m) 17 | case $($PGET) in 18 | performance) 19 | echo  && exit 0 20 | ;; 21 | power-saver) 22 | echo  && exit 0 23 | ;; 24 | balanced) 25 | echo  && exit 0 26 | esac 27 | ;; 28 | h) 29 | echo -e "Run script without arguments to cycle power profiles and print icon. \n-m Monitor. Get power profile and print icon. \n-h Help. Show this help text" 30 | exit 0 31 | ;; 32 | *) 33 | echo "Invalid option. Try -h." 34 | exit 1 35 | esac 36 | done 37 | 38 | case $($PGET) in 39 | performance) 40 | $PSET power-saver && echo  && exit 0 41 | ;; 42 | power-saver) 43 | $PSET balanced && echo  && exit 0 44 | ;; 45 | balanced) 46 | $PSET performance && echo  && exit 0 47 | ;; 48 | esac 49 | 50 | echo "Could not find power profile match. Is power-profiles-daemon running?" 51 | exit 1 52 | -------------------------------------------------------------------------------- /configs/alvr/alvr-flatpak.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Type=Application 4 | Name=ALVR Launcher 5 | GenericName=Game 6 | Comment=ALVR is an open source remote VR display which allows playing SteamVR games on a standalone headset such as Gear VR or Oculus Go/Quest. 7 | Exec=/usr/bin/flatpak run --command=/app/utils/alvr/bin/alvr_launcher com.valvesoftware.Steam 8 | Icon=application-alvr-launcher 9 | Categories=Game; 10 | StartupNotify=true 11 | PrefersNonDefaultGPU=true 12 | X-KDE-RunOnDiscreteGpu=true 13 | StartupWMClass=ALVR -------------------------------------------------------------------------------- /configs/corectrl/90-corectrl.rules: -------------------------------------------------------------------------------- 1 | polkit.addRule(function(action, subject) { 2 | if ((action.id == "org.corectrl.helper.init" || 3 | action.id == "org.corectrl.helperkiller.init") && 4 | subject.local == true && 5 | subject.active == true && 6 | subject.isInGroup("your-user-group")) { 7 | return polkit.Result.YES; 8 | } 9 | }); -------------------------------------------------------------------------------- /configs/corectrl/corectrl.ini: -------------------------------------------------------------------------------- 1 | [General] 2 | saveWindowGeometry=false 3 | startOnSysTray=true 4 | 5 | [Window] 6 | main-x-pos=1225 7 | main-y-pos=636 -------------------------------------------------------------------------------- /configs/corectrl/profiles/_global_.ccpro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjpin/arch-linux/9d0981985b76f5016cbf98f60e0cd1da3612d73f/configs/corectrl/profiles/_global_.ccpro -------------------------------------------------------------------------------- /configs/corectrl/profiles/alvr_dashboard.ccpro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjpin/arch-linux/9d0981985b76f5016cbf98f60e0cd1da3612d73f/configs/corectrl/profiles/alvr_dashboard.ccpro -------------------------------------------------------------------------------- /configs/corectrl/profiles/wivrn_dashboard.ccpro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gjpin/arch-linux/9d0981985b76f5016cbf98f60e0cd1da3612d73f/configs/corectrl/profiles/wivrn_dashboard.ccpro -------------------------------------------------------------------------------- /configs/firefox/gnome.js: -------------------------------------------------------------------------------- 1 | 2 | // Firefox Gnome theme 3 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); 4 | user_pref("browser.uidensity", 0); 5 | user_pref("svg.context-properties.content.enabled", true); 6 | user_pref("browser.theme.dark-private-windows", false); 7 | user_pref("widget.gtk.rounded-bottom-corners.enabled", true); 8 | user_pref("gnomeTheme.activeTabContrast", true); -------------------------------------------------------------------------------- /configs/firefox/plasma.js: -------------------------------------------------------------------------------- 1 | 2 | // Plasma integration 3 | // https://wiki.archlinux.org/title/firefox#KDE_integration 4 | user_pref("widget.use-xdg-desktop-portal.mime-handler", 1); 5 | user_pref("widget.use-xdg-desktop-portal.file-picker", 1); -------------------------------------------------------------------------------- /configs/firefox/user.js: -------------------------------------------------------------------------------- 1 | // 2 | /* You may copy+paste this file and use it as it is. 3 | * 4 | * If you make changes to your about:config while the program is running, the 5 | * changes will be overwritten by the user.js when the application restarts. 6 | * 7 | * To make lasting changes to preferences, you will have to edit the user.js. 8 | */ 9 | 10 | /**************************************************************************** 11 | * Betterfox * 12 | * "Ad meliora" * 13 | * version: 137 * 14 | * url: https://github.com/yokoffing/Betterfox * 15 | ****************************************************************************/ 16 | 17 | /**************************************************************************** 18 | * SECTION: FASTFOX * 19 | ****************************************************************************/ 20 | /** GENERAL ***/ 21 | user_pref("content.notify.interval", 100000); 22 | 23 | /** GFX ***/ 24 | user_pref("gfx.canvas.accelerated.cache-size", 512); 25 | user_pref("gfx.content.skia-font-cache-size", 20); 26 | 27 | /** DISK CACHE ***/ 28 | user_pref("browser.cache.disk.enable", false); 29 | 30 | /** MEDIA CACHE ***/ 31 | user_pref("media.memory_cache_max_size", 65536); 32 | user_pref("media.cache_readahead_limit", 7200); 33 | user_pref("media.cache_resume_threshold", 3600); 34 | 35 | /** IMAGE CACHE ***/ 36 | user_pref("image.mem.decode_bytes_at_a_time", 32768); 37 | 38 | /** NETWORK ***/ 39 | user_pref("network.http.max-connections", 1800); 40 | user_pref("network.http.max-persistent-connections-per-server", 10); 41 | user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5); 42 | user_pref("network.http.pacing.requests.enabled", false); 43 | user_pref("network.dnsCacheExpiration", 3600); 44 | user_pref("network.ssl_tokens_cache_capacity", 10240); 45 | 46 | /** SPECULATIVE LOADING ***/ 47 | user_pref("network.dns.disablePrefetch", true); 48 | user_pref("network.dns.disablePrefetchFromHTTPS", true); 49 | user_pref("network.prefetch-next", false); 50 | user_pref("network.predictor.enabled", false); 51 | user_pref("network.predictor.enable-prefetch", false); 52 | 53 | /** EXPERIMENTAL ***/ 54 | user_pref("layout.css.grid-template-masonry-value.enabled", true); 55 | 56 | /**************************************************************************** 57 | * SECTION: SECUREFOX * 58 | ****************************************************************************/ 59 | /** TRACKING PROTECTION ***/ 60 | user_pref("browser.contentblocking.category", "strict"); 61 | user_pref("browser.download.start_downloads_in_tmp_dir", true); 62 | user_pref("browser.helperApps.deleteTempFileOnExit", true); 63 | user_pref("browser.uitour.enabled", false); 64 | user_pref("privacy.globalprivacycontrol.enabled", true); 65 | 66 | /** OCSP & CERTS / HPKP ***/ 67 | user_pref("security.OCSP.enabled", 0); 68 | user_pref("security.pki.crlite_mode", 2); 69 | 70 | /** SSL / TLS ***/ 71 | user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true); 72 | user_pref("browser.xul.error_pages.expert_bad_cert", true); 73 | user_pref("security.tls.enable_0rtt_data", false); 74 | 75 | /** DISK AVOIDANCE ***/ 76 | user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); 77 | user_pref("browser.sessionstore.interval", 60000); 78 | 79 | /** SHUTDOWN & SANITIZING ***/ 80 | user_pref("browser.privatebrowsing.resetPBM.enabled", true); 81 | user_pref("privacy.history.custom", true); 82 | 83 | /** SEARCH / URL BAR ***/ 84 | user_pref("browser.urlbar.trimHttps", true); 85 | user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true); 86 | user_pref("browser.search.separatePrivateDefault.ui.enabled", true); 87 | user_pref("browser.urlbar.update2.engineAliasRefresh", true); 88 | user_pref("browser.search.suggest.enabled", false); 89 | user_pref("browser.urlbar.quicksuggest.enabled", false); 90 | user_pref("browser.urlbar.groupLabels.enabled", false); 91 | user_pref("browser.formfill.enable", false); 92 | user_pref("network.IDN_show_punycode", true); 93 | 94 | /** PASSWORDS ***/ 95 | user_pref("signon.formlessCapture.enabled", false); 96 | user_pref("signon.privateBrowsingCapture.enabled", false); 97 | user_pref("network.auth.subresource-http-auth-allow", 1); 98 | user_pref("editor.truncate_user_pastes", false); 99 | 100 | /** MIXED CONTENT + CROSS-SITE ***/ 101 | user_pref("security.mixed_content.block_display_content", true); 102 | user_pref("pdfjs.enableScripting", false); 103 | 104 | /** EXTENSIONS ***/ 105 | user_pref("extensions.enabledScopes", 5); 106 | 107 | /** HEADERS / REFERERS ***/ 108 | user_pref("network.http.referer.XOriginTrimmingPolicy", 2); 109 | 110 | /** CONTAINERS ***/ 111 | user_pref("privacy.userContext.ui.enabled", true); 112 | 113 | /** SAFE BROWSING ***/ 114 | user_pref("browser.safebrowsing.downloads.remote.enabled", false); 115 | 116 | /** MOZILLA ***/ 117 | user_pref("permissions.default.desktop-notification", 2); 118 | user_pref("permissions.default.geo", 2); 119 | user_pref("geo.provider.network.url", "https://beacondb.net/v1/geolocate"); 120 | user_pref("browser.search.update", false); 121 | user_pref("permissions.manager.defaultsUrl", ""); 122 | 123 | /** TELEMETRY ***/ 124 | user_pref("datareporting.policy.dataSubmissionEnabled", false); 125 | user_pref("datareporting.healthreport.uploadEnabled", false); 126 | user_pref("toolkit.telemetry.unified", false); 127 | user_pref("toolkit.telemetry.enabled", false); 128 | user_pref("toolkit.telemetry.server", "data:,"); 129 | user_pref("toolkit.telemetry.archive.enabled", false); 130 | user_pref("toolkit.telemetry.newProfilePing.enabled", false); 131 | user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); 132 | user_pref("toolkit.telemetry.updatePing.enabled", false); 133 | user_pref("toolkit.telemetry.bhrPing.enabled", false); 134 | user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); 135 | user_pref("toolkit.telemetry.coverage.opt-out", true); 136 | user_pref("toolkit.coverage.opt-out", true); 137 | user_pref("toolkit.coverage.endpoint.base", ""); 138 | user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false); 139 | user_pref("browser.newtabpage.activity-stream.telemetry", false); 140 | 141 | /** EXPERIMENTS ***/ 142 | user_pref("app.shield.optoutstudies.enabled", false); 143 | user_pref("app.normandy.enabled", false); 144 | user_pref("app.normandy.api_url", ""); 145 | 146 | /** CRASH REPORTS ***/ 147 | user_pref("breakpad.reportURL", ""); 148 | user_pref("browser.tabs.crashReporting.sendReport", false); 149 | 150 | /** DETECTION ***/ 151 | user_pref("captivedetect.canonicalURL", ""); 152 | user_pref("network.captive-portal-service.enabled", false); 153 | user_pref("network.connectivity-service.enabled", false); 154 | 155 | /**************************************************************************** 156 | * SECTION: PESKYFOX * 157 | ****************************************************************************/ 158 | /** MOZILLA UI ***/ 159 | user_pref("browser.privatebrowsing.vpnpromourl", ""); 160 | user_pref("extensions.getAddons.showPane", false); 161 | user_pref("extensions.htmlaboutaddons.recommendations.enabled", false); 162 | user_pref("browser.discovery.enabled", false); 163 | user_pref("browser.shell.checkDefaultBrowser", false); 164 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false); 165 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false); 166 | user_pref("browser.preferences.moreFromMozilla", false); 167 | user_pref("browser.aboutConfig.showWarning", false); 168 | user_pref("browser.aboutwelcome.enabled", false); 169 | user_pref("browser.profiles.enabled", true); 170 | 171 | /** THEME ADJUSTMENTS ***/ 172 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); 173 | user_pref("browser.compactmode.show", true); 174 | user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS 175 | 176 | /** FULLSCREEN NOTICE ***/ 177 | user_pref("full-screen-api.transition-duration.enter", "0 0"); 178 | user_pref("full-screen-api.transition-duration.leave", "0 0"); 179 | user_pref("full-screen-api.warning.timeout", 0); 180 | 181 | /** URL BAR ***/ 182 | user_pref("browser.urlbar.unitConversion.enabled", true); 183 | user_pref("browser.urlbar.trending.featureGate", false); 184 | user_pref("dom.text_fragments.create_text_fragment.enabled", true); 185 | 186 | /** NEW TAB PAGE ***/ 187 | user_pref("browser.newtabpage.activity-stream.default.sites", ""); 188 | user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); 189 | user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false); 190 | user_pref("browser.newtabpage.activity-stream.showSponsored", false); 191 | 192 | /** POCKET ***/ 193 | user_pref("extensions.pocket.enabled", false); 194 | 195 | /** DOWNLOADS ***/ 196 | user_pref("browser.download.manager.addToRecentDocs", false); 197 | 198 | /** PDF ***/ 199 | user_pref("browser.download.open_pdf_attachments_inline", true); 200 | 201 | /** TAB BEHAVIOR ***/ 202 | user_pref("browser.bookmarks.openInTabClosesMenu", false); 203 | user_pref("browser.menu.showViewImageInfo", true); 204 | user_pref("findbar.highlightAll", true); 205 | user_pref("layout.word_select.eat_space_to_next_word", false); 206 | 207 | /**************************************************************************** 208 | * SECTION: SMOOTHFOX * 209 | ****************************************************************************/ 210 | // https://github.com/yokoffing/Betterfox/blob/master/Smoothfox.js 211 | // NATURAL SMOOTH SCROLLING V3 [MODIFIED] 212 | 213 | user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX 214 | user_pref("general.smoothScroll", true); // DEFAULT 215 | user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12); 216 | user_pref("general.smoothScroll.msdPhysics.enabled", true); 217 | user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600); 218 | user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650); 219 | user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25); 220 | user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2"); 221 | user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250); 222 | user_pref("general.smoothScroll.currentVelocityWeighting", "1"); 223 | user_pref("general.smoothScroll.stopDecelerationWeighting", "1"); 224 | user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking 225 | 226 | /**************************************************************************** 227 | * START: MY OVERRIDES * 228 | ****************************************************************************/ 229 | // visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides 230 | // visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening 231 | // Enter your personal overrides below this line: 232 | 233 | // Disable experiments 234 | user_pref("experiments.supported", false); 235 | user_pref("experiments.enabled", false); 236 | user_pref("experiments.manifest.uri", ""); 237 | user_pref("network.allow-experiments", false); 238 | 239 | // Always use Downloads directory 240 | user_pref("browser.download.useDownloadDir", true); 241 | user_pref("browser.download.always_ask_before_handling_new_types", false); 242 | 243 | // Hardware video decoding 244 | user_pref("media.ffmpeg.vaapi.enabled", true); 245 | user_pref("gfx.webrender.all", true); 246 | user_pref("media.hardware-video-decoding.force-enabled", true); 247 | 248 | // Disable text-to-speech 249 | user_pref("media.webspeech.synth.enabled", false); 250 | 251 | // Enable auto scroll (middle button) 252 | user_pref("general.autoScroll", true); 253 | 254 | // Use PipeWire for camera handling 255 | user_pref("media.webrtc.camera.allow-pipewire", true); 256 | -------------------------------------------------------------------------------- /configs/flatpak/com.belmoussaoui.Authenticator: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.bitwarden.desktop: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Sync/credentials; -------------------------------------------------------------------------------- /configs/flatpak/com.brave.Browser: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents; 3 | x11=false; 4 | fallback-x11=false; -------------------------------------------------------------------------------- /configs/flatpak/com.discordapp.Discord: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.github.GradienceTeam.Gradience: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0; 3 | -------------------------------------------------------------------------------- /configs/flatpak/com.github.Matoking.protontricks: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Games;home/.steam/steam; -------------------------------------------------------------------------------- /configs/flatpak/com.github.finefindus.eyedropper: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.github.flxzt.rnote: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents; -------------------------------------------------------------------------------- /configs/flatpak/com.github.marhkb.Pods: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.github.tchx84.Flatseal: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.google.AndroidStudio: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Android;home/.gradle;home/.m2;home/.java;home/.android;xdg-config/Google;xdg-cache/Google;xdg-data/Google;home/Projects;host-etc:ro;home/.gitconfig:ro;home/.ssh:ro -------------------------------------------------------------------------------- /configs/flatpak/com.heroicgameslauncher.hgl: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Games/Heroic;home/.var/app/com.valvesoftware.Steam/data/Steam;xdg-documents; 3 | -------------------------------------------------------------------------------- /configs/flatpak/com.mattjakeman.ExtensionManager: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.spotify.Client: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.usebottles.bottles: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-data/applications;home/Games/Bottles;home/Projects/bottles/dependencies; -------------------------------------------------------------------------------- /configs/flatpak/com.usebruno.Bruno: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/com.valvesoftware.Steam: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Games/Steam;xdg-run/pipewire-0;xdg-run/wivrn:ro;xdg-data/flatpak/app/io.github.wivrn.wivrn:ro;xdg-config/openxr:ro;xdg-config/openvr:ro;home/steamvr; -------------------------------------------------------------------------------- /configs/flatpak/com.visualstudio.code: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;;home/Projects;home/.ssh:ro;home/.gitconfig:ro;host-etc:ro;xdg-run/podman; 3 | 4 | [Environment] 5 | FLATPAK_ENABLE_SDK_EXT=golang,node20,typescript,llvm18,rust-stable,openjdk21 -------------------------------------------------------------------------------- /configs/flatpak/com.vysp3r.ProtonPlus: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Games;home/.steam/steam; -------------------------------------------------------------------------------- /configs/flatpak/dev.k8slens.OpenLens: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/.minikube;home/.kube/config; 3 | -------------------------------------------------------------------------------- /configs/flatpak/dev.lizardbyte.app.Sunshine: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-config/sunshine; 3 | 4 | [Session Bus Policy] 5 | org.freedesktop.Flatpak=talk -------------------------------------------------------------------------------- /configs/flatpak/dev.skynomads.Seabird: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/.kube/config; -------------------------------------------------------------------------------- /configs/flatpak/global: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!home/.ssh;!home/.bashrc;!home/.bashrc.d;!home/.zshrc;!home/.zshrc.d;!home/.config;!home/Sync;!host;!host-os;!host-etc;!xdg-config;!xdg-cache;!xdg-data;!xdg-data/flatpak;!xdg-documents;!xdg-videos;!xdg-music;!xdg-pictures;!xdg-desktop;xdg-download;xdg-config/gtk-3.0:ro;xdg-config/gtk-4.0:ro;xdg-config/gtkrc:ro;home/.local/share/themes; 3 | 4 | [Session Bus Policy] 5 | org.freedesktop.Flatpak=none -------------------------------------------------------------------------------- /configs/flatpak/io.beekeeperstudio.Studio: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects; -------------------------------------------------------------------------------- /configs/flatpak/io.github.Foldex.AdwSteamGtk: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/.var/app/com.valvesoftware.Steam/.steam/steam;home/.steam/steam; -------------------------------------------------------------------------------- /configs/flatpak/io.github.celluloid_player.Celluloid: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/io.github.wivrn.wivrn: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-config/openxr:create;xdg-config/openvr:create; 3 | 4 | [Session Bus Policy] 5 | org.freedesktop.Flatpak=talk -------------------------------------------------------------------------------- /configs/flatpak/io.kinvolk.Headlamp: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/.kube/config; -------------------------------------------------------------------------------- /configs/flatpak/io.podman_desktop.PodmanDesktop: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/.kube/config; -------------------------------------------------------------------------------- /configs/flatpak/md.obsidian.Obsidian: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Sync/obsidian/vault; 3 | network=none; -------------------------------------------------------------------------------- /configs/flatpak/net.cozic.joplin_desktop: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Sync/joplin; 3 | -------------------------------------------------------------------------------- /configs/flatpak/net.davidotek.pupgui2: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Games;home/.steam/steam; -------------------------------------------------------------------------------- /configs/flatpak/net.nokyan.Resources: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=host:ro;/var/lib/flatpak/app:ro;/var/lib/flatpak/exports/share:ro;xdg-data/flatpak/app:ro;xdg-data/flatpak/exports/share:ro; -------------------------------------------------------------------------------- /configs/flatpak/org.blender.Blender: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects; -------------------------------------------------------------------------------- /configs/flatpak/org.gaphor.Gaphor: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents;home/Projects; -------------------------------------------------------------------------------- /configs/flatpak/org.gimp.GIMP: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects; -------------------------------------------------------------------------------- /configs/flatpak/org.gnome.Evince: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents; -------------------------------------------------------------------------------- /configs/flatpak/org.gnome.gitg: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects; -------------------------------------------------------------------------------- /configs/flatpak/org.godotengine.Godot: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects;home/.devtools/android:ro; 3 | 4 | [Session Bus Policy] 5 | org.freedesktop.Flatpak=talk 6 | 7 | [Environment] 8 | FLATPAK_ENABLE_SDK_EXT=openjdk17 -------------------------------------------------------------------------------- /configs/flatpak/org.kde.keysmith: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/org.kde.neochat: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host; -------------------------------------------------------------------------------- /configs/flatpak/org.kde.okular: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents; -------------------------------------------------------------------------------- /configs/flatpak/org.keepassxc.KeePassXC: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Sync/credentials; -------------------------------------------------------------------------------- /configs/flatpak/org.libreoffice.LibreOffice: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents: -------------------------------------------------------------------------------- /configs/flatpak/org.mozilla.firefox: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;xdg-documents; 3 | x11=false; 4 | fallback-x11=false; -------------------------------------------------------------------------------- /configs/flatpak/org.sqlitebrowser.sqlitebrowser: -------------------------------------------------------------------------------- 1 | [Context] 2 | filesystems=!home;!host;home/Projects; -------------------------------------------------------------------------------- /configs/foot/foot.ini: -------------------------------------------------------------------------------- 1 | font=Fira Code Nerd Font Mono:weight=100:size=10 2 | 3 | [scrollback] 4 | lines=5000 5 | 6 | # colors are based on: 7 | # https://github.com/rockyzhang24/arctic.nvim/blob/v2/lua/lush_theme/arctic.lua 8 | [colors] 9 | foreground=cccccc # Text (norm_fg) 10 | background=181818 # Base (from vscode dark modern sidebar) 11 | regular0=181818 # Surface 1 (black4) 12 | regular1=D16969 # red (dark red) 13 | regular2=6A9955 # green (green) 14 | regular3=DCDCAA # yellow (yellow) 15 | regular4=4fc1ff # blue (blue) 16 | regular5=C586C0 # pink (dark pink) 17 | regular6=4EC9B0 # teal (blue green) 18 | regular7=51504f # Subtext 1 (gray) 19 | bright0=51504f # Surface 2 (gray) 20 | bright1=F14C4C # red (error red) 21 | bright2=89d185 # green (ok green) 22 | bright3=CCA700 # yellow (warn yellow) 23 | bright4=3794ff # blue (info blue) 24 | bright5=f92672 # pink (bright pink) 25 | bright6=B5CEA8 # teal (light_green) 26 | bright7=9d9d9d # Subtext 0 (gray4) -------------------------------------------------------------------------------- /configs/fuzzel/fuzzel.ini: -------------------------------------------------------------------------------- 1 | font=Fira Code Nerd Font Mono:size=10 2 | icon-theme= 3 | 4 | [colors] 5 | background=1f1f1f 6 | text=cccccc 7 | match= 8 | selection= 9 | selection-text= 10 | selection-match= 11 | border= -------------------------------------------------------------------------------- /configs/gnome/01-custom: -------------------------------------------------------------------------------- 1 | [org/gnome/desktop/interface] 2 | gtk-theme='adw-gtk3-dark' 3 | color-scheme='prefer-dark' 4 | font-name='Noto Sans 10' 5 | document-font-name='Noto Sans 10' 6 | monospace-font-name='NotoSansM Nerd Font Mono Medium 10' 7 | font-antialiasing='rgba' 8 | icon-theme='MoreWaita' 9 | 10 | [org/gnome/desktop/wm/keybindings] 11 | close=['q'] 12 | switch-applications=@as [] 13 | switch-applications-backward=@as [] 14 | switch-windows=['Tab'] 15 | switch-windows-backward=['Tab'] 16 | switch-to-workspace-1=['1'] 17 | switch-to-workspace-2=['2'] 18 | switch-to-workspace-3=['3'] 19 | switch-to-workspace-4=['4'] 20 | move-to-workspace-1=['exclam'] 21 | move-to-workspace-2=['at'] 22 | move-to-workspace-3=['numbersign'] 23 | move-to-workspace-4=['dollar'] 24 | 25 | [org/gnome/shell/keybindings] 26 | show-screenshot-ui=['s'] 27 | switch-to-application-1=@as [] 28 | switch-to-application-2=@as [] 29 | switch-to-application-3=@as [] 30 | switch-to-application-4=@as [] 31 | 32 | [org/gnome/desktop/sound] 33 | allow-volume-above-100-percent=true 34 | 35 | [org/gnome/desktop/calendar] 36 | show-weekdate=true 37 | 38 | [org/gnome/mutter] 39 | check-alive-timeout=30000 40 | 41 | [org/gtk/settings/file-chooser] 42 | sort-directories-first=true 43 | 44 | [org/gnome/nautilus/icon-view] 45 | default-zoom-level='small-plus' 46 | 47 | [org/gnome/desktop/wm/preferences] 48 | titlebar-font='Noto Sans Bold 10' 49 | 50 | [org/gnome/shell] 51 | disable-user-extensions=false 52 | 53 | [org/gnome/shell] 54 | favorite-apps=['org.gnome.Nautilus.desktop', 'org.mozilla.firefox.desktop', 'org.gnome.Ptyxis.desktop', 'org.gnome.TextEditor.desktop', 'code.desktop'] 55 | 56 | [org/gnome/shell] 57 | enabled-extensions=['grand-theft-focus@zalckos.github.com', 'legacyschemeautoswitcher@joshimukul29.gmail.com', 'appindicatorsupport@rgcjonas.gmail.com'] 58 | 59 | [org/gnome/terminal/legacy] 60 | theme-variant='dark' 61 | 62 | [org/gnome/terminal/legacy/keybindings] 63 | next-tab='Tab' 64 | 65 | [org/gnome/settings-daemon/plugins/media-keys] 66 | custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/'] 67 | 68 | [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0] 69 | binding='Return' 70 | command='ptyxis --new-window' 71 | name='Ptyxis' 72 | 73 | [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1] 74 | binding='E' 75 | command='nautilus' 76 | name='Nautilus' 77 | 78 | [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2] 79 | binding='Escape' 80 | command='gnome-system-monitor' 81 | name='Gnome System Monitor' 82 | 83 | [org/gnome/Ptyxis/Shortcuts] 84 | close-tab='w' 85 | 86 | [org/gnome/Ptyxis/Shortcuts] 87 | move-next-tab='Tab' 88 | 89 | [org/gnome/desktop/app-folders] 90 | folder-children=['Office', 'Dev', 'Media', 'System', 'Gaming', 'Emulators', 'Security'] 91 | 92 | [org/gnome/desktop/app-folders/folders/Office] 93 | name='Office' 94 | apps=['org.gaphor.Gaphor.desktop', 'com.github.flxzt.rnote.desktop', 'org.gnome.Papers.desktop', 'org.gnome.Calculator.desktop', 'org.gnome.TextEditor.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.clocks.desktop', 'md.obsidian.Obsidian.desktop', 'simple-scan.desktop', 'org.gnome.Contacts.desktop', 'org.libreoffice.LibreOffice.desktop', 'org.libreoffice.LibreOffice.base.desktop', 'org.libreoffice.LibreOffice.calc.desktop', 'org.libreoffice.LibreOffice.draw.desktop', 'org.libreoffice.LibreOffice.impress.desktop', 'org.libreoffice.LibreOffice.math.desktop', 'org.libreoffice.LibreOffice.writer.desktop', 'libreoffice-calc.desktop', 'libreoffice-impress.desktop', 'libreoffice-writer.desktop'] 95 | 96 | [org/gnome/desktop/app-folders/folders/Dev] 97 | name='Dev' 98 | apps=['code.desktop', 'com.visualstudio.code.desktop', 'org.godotengine.Godot', 'com.usebruno.Bruno', 'rest.insomnia.Insomnia.desktop', 'com.github.marhkb.Pods.desktop', 'org.gnome.gitg.desktop', 'org.gnome.Boxes.desktop', 'nvim.desktop', 'org.chromium.Chromium.desktop', 'org.gnome.Connections.desktop', 'qemu.desktop', 'remote-viewer.desktop', 'com.google.Chrome.desktop', 'virt-manager.desktop', 'com.brave.Browser', 'com.google.AndroidStudio', 'dev.k8slens.OpenLens', 'dev.skynomads.Seabird'] 99 | 100 | [org/gnome/desktop/app-folders/folders/Media] 101 | name='Media' 102 | apps=['com.github.finefindus.eyedropper', 'io.github.celluloid_player.Celluloid.desktop', 'io.github.seadve.Kooha.desktop', 'com.spotify.Client.desktop', 'org.blender.Blender.desktop', 'org.gimp.GIMP.desktop', 'org.gnome.eog.desktop', 'org.gnome.Totem.desktop', 'org.gnome.Rhythmbox3.desktop', 'org.gnome.Photos.desktop'] 103 | 104 | [org/gnome/desktop/app-folders/folders/System] 105 | name='System' 106 | apps=['org.gnome.Software.desktop' , 'org.gnome.baobab.desktop', 'com.mattjakeman.ExtensionManager.desktop', 'org.gnome.Settings.desktop', 'gnome-system-monitor.desktop', 'org.gnome.Characters.desktop', 'org.gnome.DiskUtility.desktop', 'org.gnome.font-viewer.desktop', 'org.gnome.Logs.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop', 'kvantummanager.desktop', 'org.fedoraproject.MediaWriter.desktop', 'org.freedesktop.GnomeAbrt.desktop'] 107 | 108 | [org/gnome/desktop/app-folders/folders/Gaming] 109 | name='Gaming' 110 | apps=['com.valvesoftware.Steam.desktop', 'com.heroicgameslauncher.hgl.desktop', 'net.lutris.Lutris.desktop', 'net.davidotek.pupgui2.desktop', 'com.usebottles.bottles.desktop', 'com.steamgriddb.SGDBoop.desktop', 'sunshine.desktop'] 111 | 112 | [org/gnome/desktop/app-folders/folders/Emulators] 113 | name='Emulators' 114 | apps=['org.duckstation.DuckStation.desktop', 'net.pcsx2.PCSX2.desktop', 'org.ppsspp.PPSSPP.desktop', 'org.DolphinEmu.dolphin-emu.desktop', 'org.yuzu_emu.yuzu.desktop', 'org.citra_emu.citra.desktop', 'org.flycast.Flycast.desktop', 'app.xemu.xemu.desktop', 'com.snes9x.Snes9x.desktop', 'net.kuribo64.melonDS.desktop', 'net.rpcs3.RPCS3.desktop', 'io.mgba.mGBA.desktop'] 115 | 116 | [org/gnome/desktop/app-folders/folders/Security] 117 | name='Security' 118 | apps=['com.belmoussaoui.Authenticator.desktop', 'com.bitwarden.desktop.desktop', 'org.keepassxc.KeePassXC.desktop', 'com.github.tchx84.Flatseal.desktop', 'firewall-config.desktop'] 119 | 120 | [org/gnome/shell] 121 | app-picker-layout=[{'Dev': <{'position': <0>}>, 'Emulators': <{'position': <1>}>, 'Gaming': <{'position': <2>}>, 'Media': <{'position': <3>}>, 'Office': <{'position': <4>}>, 'Security': <{'position': <5>}>}] 122 | 123 | [org/gnome/desktop/background] 124 | picture-uri='file:///usr/share/backgrounds/gnome/blobs-d.svg' 125 | picture-uri-dark='file:///usr/share/backgrounds/gnome/blobs-l.svg' 126 | primary-color='#241f31' 127 | 128 | [org/gnome/desktop/screensaver] 129 | picture-uri='file:///usr/share/backgrounds/gnome/blobs-d.svg' 130 | primary-color='#241f31' 131 | 132 | [org/gnome/shell] 133 | disable-extension-version-validation=true 134 | 135 | [org/gnome/desktop/search-provers] 136 | disable-external=true 137 | 138 | [org/freedesktop/Tracker3/Miner/Files] 139 | index-single-directories="@as []" 140 | index-recursive-directories="@as []" -------------------------------------------------------------------------------- /configs/gnome/01-laptop: -------------------------------------------------------------------------------- 1 | [org/gnome/desktop/peripherals/touchpad] 2 | tap-to-click=true 3 | disable-while-typing=false 4 | 5 | [org/gnome/desktop/interface] 6 | show-battery-percentage=true -------------------------------------------------------------------------------- /configs/gnome/gnome-mimeapps.list: -------------------------------------------------------------------------------- 1 | [Default Applications] 2 | application/x-dia-diagram=dia.desktop 3 | text/x-vcard=evolution.desktop 4 | text/directory=evolution.desktop 5 | text/calendar=evolution.desktop 6 | application/x-cd-image=gnome-disk-image-mounter.desktop 7 | application/x-raw-disk-image=gnome-disk-image-writer.desktop 8 | application/x-raw-disk-image-xz-compressed=gnome-disk-image-writer.desktop 9 | image/x-compressed-xcf=gimp.desktop 10 | image/x-xcf=gimp.desktop 11 | image/x-psd=gimp.desktop 12 | image/x-fits=gimp.desktop 13 | application/vnd.ms-word=libreoffice-writer.desktop 14 | application/vnd.wordperfect=libreoffice-writer.desktop 15 | application/vnd.sun.xml.writer=libreoffice-writer.desktop 16 | application/vnd.sun.xml.writer.global=libreoffice-writer.desktop 17 | application/vnd.sun.xml.writer.template=libreoffice-writer.desktop 18 | application/vnd.stardivision.writer=libreoffice-writer.desktop 19 | application/vnd.oasis.opendocument.text=libreoffice-writer.desktop 20 | application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop 21 | application/vnd.oasis.opendocument.text-web=libreoffice-writer.desktop 22 | application/vnd.oasis.opendocument.text-master=libreoffice-writer.desktop 23 | application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop 24 | application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop 25 | application/vnd.ms-excel=libreoffice-calc.desktop 26 | application/vnd.stardivision.calc=libreoffice-calc.desktop 27 | application/vnd.sun.xml.calc=libreoffice-calc.desktop 28 | application/vnd.sun.xml.calc.template=libreoffice-calc.desktop 29 | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop 30 | application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop 31 | application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop 32 | application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop 33 | application/vnd.ms-powerpoint=libreoffice-impress.desktop 34 | application/vnd.stardivision.impress=libreoffice-impress.desktop 35 | application/vnd.sun.xml.impress=libreoffice-impress.desktop 36 | application/vnd.sun.xml.impress.template=libreoffice-impress.desktop 37 | application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop 38 | application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop 39 | application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop 40 | application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop 41 | application/vnd.stardivision.draw=libreoffice-draw.desktop 42 | application/vnd.sun.xml.draw=libreoffice-draw.desktop 43 | application/vnd.sun.xml.draw.template=libreoffice-draw.desktop 44 | application/vnd.oasis.opendocument.graphics=libreoffice-draw.desktop 45 | application/vnd.oasis.opendocument.graphics-template=libreoffice-draw.desktop 46 | application/vnd.oasis.opendocument.formula=libreoffice-math.desktop 47 | application/vnd.sun.xml.math=libreoffice-math.desktop 48 | application/vnd.stardivision.math=libreoffice-math.desktop 49 | application/vnd.oasis.opendocument.database=libreoffice-base.desktop 50 | application/vnd.sun.xml.base=libreoffice-base.desktop 51 | application/x-qw=gnome-gnucash.desktop 52 | application/x-gnucash=gnome-gnucash.desktop 53 | application/vnd.lotus-1-2-3=gnumeric.desktop 54 | application/x-oleo=gnumeric.desktop 55 | application/x-gnumeric=gnumeric.desktop 56 | application/x-xbase=gnumeric.desktop 57 | application/x-abiword=abiword.desktop 58 | application/x-catalog=gpk-install-catalog.desktop 59 | application/x-rpm=gpk-install-local-file.desktop 60 | text/csv=libreoffice-calc.desktop 61 | text/plain=org.gnome.gedit.desktop 62 | text/html=org.mozilla.firefox.desktop 63 | application/xhtml+xml=org.mozilla.firefox.desktop 64 | inode/directory=org.gnome.Nautilus.desktop 65 | x-content/blank-cd=brasero-nautilus.desktop 66 | x-content/blank-dvd=brasero-nautilus.desktop 67 | x-content/blank-bd=brasero-nautilus.desktop 68 | x-content/blank-hddvd=brasero-nautilus.desktop 69 | x-content/audio-cdda=org.gnome.Decibels.desktop 70 | x-content/audio-dvd=org.gnome.Decibels.desktop 71 | x-content/audio-player=org.gnome.Decibels.desktop 72 | x-content/image-dcf=shotwell.desktop 73 | x-content/image-picturecd=shotwell.desktop 74 | # URI scheme handlers 75 | x-scheme-handler/mailto=evolution.desktop 76 | x-scheme-handler/http=org.mozilla.firefox.desktop 77 | x-scheme-handler/https=org.mozilla.firefox.desktop 78 | application/mxf=io.github.celluloid_player.Celluloid.desktop; 79 | application/ogg=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 80 | application/ram=io.github.celluloid_player.Celluloid.desktop; 81 | application/sdp=io.github.celluloid_player.Celluloid.desktop; 82 | application/smil=io.github.celluloid_player.Celluloid.desktop; 83 | application/smil+xml=io.github.celluloid_player.Celluloid.desktop; 84 | application/vnd.apple.mpegurl=io.github.celluloid_player.Celluloid.desktop; 85 | application/vnd.ms-asf=io.github.celluloid_player.Celluloid.desktop; 86 | application/vnd.ms-wpl=io.github.celluloid_player.Celluloid.desktop; 87 | application/vnd.rn-realmedia=io.github.celluloid_player.Celluloid.desktop; 88 | application/vnd.rn-realmedia-vbr=io.github.celluloid_player.Celluloid.desktop; 89 | application/x-extension-m4a=io.github.celluloid_player.Celluloid.desktop; 90 | application/x-extension-mp4=io.github.celluloid_player.Celluloid.desktop; 91 | application/x-flac=io.github.celluloid_player.Celluloid.desktop; 92 | application/x-flash-video=io.github.celluloid_player.Celluloid.desktop; 93 | application/x-matroska=io.github.celluloid_player.Celluloid.desktop; 94 | application/x-netshow-channel=io.github.celluloid_player.Celluloid.desktop; 95 | application/x-ogg=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 96 | application/x-quicktime-media-link=io.github.celluloid_player.Celluloid.desktop; 97 | application/x-quicktimeplayer=io.github.celluloid_player.Celluloid.desktop; 98 | application/x-shorten=io.github.celluloid_player.Celluloid.desktop; 99 | application/x-smil=io.github.celluloid_player.Celluloid.desktop; 100 | application/xspf+xml=io.github.celluloid_player.Celluloid.desktop; 101 | audio/3gpp=io.github.celluloid_player.Celluloid.desktop; 102 | audio/3gpp2=io.github.celluloid_player.Celluloid.desktop; 103 | audio/aac=io.github.celluloid_player.Celluloid.desktop; 104 | audio/ac3=io.github.celluloid_player.Celluloid.desktop; 105 | audio/AMR=io.github.celluloid_player.Celluloid.desktop; 106 | audio/AMR-WB=io.github.celluloid_player.Celluloid.desktop; 107 | audio/basic=io.github.celluloid_player.Celluloid.desktop; 108 | audio/dv=io.github.celluloid_player.Celluloid.desktop; 109 | audio/eac3=io.github.celluloid_player.Celluloid.desktop; 110 | audio/m4a=io.github.celluloid_player.Celluloid.desktop; 111 | audio/midi=io.github.celluloid_player.Celluloid.desktop; 112 | audio/mp1=io.github.celluloid_player.Celluloid.desktop; 113 | audio/mp2=io.github.celluloid_player.Celluloid.desktop; 114 | audio/mp3=io.github.celluloid_player.Celluloid.desktop; 115 | audio/mp4=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 116 | audio/mpeg=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 117 | audio/mpegurl=io.github.celluloid_player.Celluloid.desktop; 118 | audio/mpg=io.github.celluloid_player.Celluloid.desktop; 119 | audio/ogg=io.github.celluloid_player.Celluloid.desktop; 120 | audio/opus=io.github.celluloid_player.Celluloid.desktop; 121 | audio/prs.sid=io.github.celluloid_player.Celluloid.desktop; 122 | audio/scpls=io.github.celluloid_player.Celluloid.desktop; 123 | audio/vnd.rn-realaudio=io.github.celluloid_player.Celluloid.desktop; 124 | audio/wav=io.github.celluloid_player.Celluloid.desktop; 125 | audio/webm=io.github.celluloid_player.Celluloid.desktop; 126 | audio/x-aac=io.github.celluloid_player.Celluloid.desktop; 127 | audio/x-aiff=io.github.celluloid_player.Celluloid.desktop; 128 | audio/x-ape=io.github.celluloid_player.Celluloid.desktop; 129 | audio/x-flac=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 130 | audio/x-gsm=io.github.celluloid_player.Celluloid.desktop; 131 | audio/x-it=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 132 | audio/x-m4a=io.github.celluloid_player.Celluloid.desktop; 133 | audio/x-m4b=io.github.celluloid_player.Celluloid.desktop; 134 | audio/x-matroska=io.github.celluloid_player.Celluloid.desktop; 135 | audio/x-mod=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 136 | audio/x-mp1=io.github.celluloid_player.Celluloid.desktop; 137 | audio/x-mp2=io.github.celluloid_player.Celluloid.desktop; 138 | audio/x-mp3=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 139 | audio/x-mpg=io.github.celluloid_player.Celluloid.desktop; 140 | audio/x-mpeg=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 141 | audio/x-mpegurl=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 142 | audio/x-ms-asf=io.github.celluloid_player.Celluloid.desktop; 143 | audio/x-ms-asx=io.github.celluloid_player.Celluloid.desktop; 144 | audio/x-ms-wax=io.github.celluloid_player.Celluloid.desktop; 145 | audio/x-ms-wma=io.github.celluloid_player.Celluloid.desktop; 146 | audio/x-musepack=io.github.celluloid_player.Celluloid.desktop; 147 | audio/x-opus+ogg=io.github.celluloid_player.Celluloid.desktop; 148 | audio/x-pn-aiff=io.github.celluloid_player.Celluloid.desktop; 149 | audio/x-pn-au=io.github.celluloid_player.Celluloid.desktop; 150 | audio/x-pn-realaudio=io.github.celluloid_player.Celluloid.desktop; 151 | audio/x-pn-realaudio-plugin=io.github.celluloid_player.Celluloid.desktop; 152 | audio/x-pn-wav=io.github.celluloid_player.Celluloid.desktop; 153 | audio/x-pn-windows-acm=io.github.celluloid_player.Celluloid.desktop; 154 | audio/x-realaudio=io.github.celluloid_player.Celluloid.desktop; 155 | audio/x-real-audio=io.github.celluloid_player.Celluloid.desktop; 156 | audio/x-s3m=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 157 | audio/x-sbc=io.github.celluloid_player.Celluloid.desktop; 158 | audio/x-scpls=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 159 | audio/x-shorten=io.github.celluloid_player.Celluloid.desktop; 160 | audio/x-speex=io.github.celluloid_player.Celluloid.desktop; 161 | audio/x-stm=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 162 | audio/x-tta=io.github.celluloid_player.Celluloid.desktop; 163 | audio/x-wav=io.github.celluloid_player.Celluloid.desktop; 164 | audio/x-wavpack=io.github.celluloid_player.Celluloid.desktop; 165 | audio/x-vorbis=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 166 | audio/x-vorbis+ogg=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 167 | audio/x-xm=org.gnome.Decibels.desktopio.github.celluloid_player.Celluloid.desktop; 168 | image/vnd.rn-realpix=io.github.celluloid_player.Celluloid.desktop; 169 | image/x-pict=io.github.celluloid_player.Celluloid.desktop; 170 | misc/ultravox=io.github.celluloid_player.Celluloid.desktop; 171 | text/google-video-pointer=io.github.celluloid_player.Celluloid.desktop; 172 | text/x-google-video-pointer=io.github.celluloid_player.Celluloid.desktop; 173 | video/3gp=io.github.celluloid_player.Celluloid.desktop; 174 | video/3gpp=io.github.celluloid_player.Celluloid.desktop; 175 | video/3gpp2=io.github.celluloid_player.Celluloid.desktop; 176 | video/dv=io.github.celluloid_player.Celluloid.desktop; 177 | video/divx=io.github.celluloid_player.Celluloid.desktop; 178 | video/fli=io.github.celluloid_player.Celluloid.desktop; 179 | video/flv=io.github.celluloid_player.Celluloid.desktop; 180 | video/mp2t=io.github.celluloid_player.Celluloid.desktop; 181 | video/mp4=io.github.celluloid_player.Celluloid.desktop; 182 | video/mp4v-es=io.github.celluloid_player.Celluloid.desktop; 183 | video/mpeg=io.github.celluloid_player.Celluloid.desktop; 184 | video/mpeg-system=io.github.celluloid_player.Celluloid.desktop; 185 | video/msvideo=io.github.celluloid_player.Celluloid.desktop; 186 | video/ogg=io.github.celluloid_player.Celluloid.desktop; 187 | video/quicktime=io.github.celluloid_player.Celluloid.desktop; 188 | video/vivo=io.github.celluloid_player.Celluloid.desktop; 189 | video/vnd.divx=io.github.celluloid_player.Celluloid.desktop; 190 | video/vnd.mpegurl=io.github.celluloid_player.Celluloid.desktop; 191 | video/vnd.rn-realvideo=io.github.celluloid_player.Celluloid.desktop; 192 | video/vnd.vivo=io.github.celluloid_player.Celluloid.desktop; 193 | video/webm=io.github.celluloid_player.Celluloid.desktop; 194 | video/x-anim=io.github.celluloid_player.Celluloid.desktop; 195 | video/x-avi=io.github.celluloid_player.Celluloid.desktop; 196 | video/x-flc=io.github.celluloid_player.Celluloid.desktop; 197 | video/x-fli=io.github.celluloid_player.Celluloid.desktop; 198 | video/x-flic=io.github.celluloid_player.Celluloid.desktop; 199 | video/x-flv=io.github.celluloid_player.Celluloid.desktop; 200 | video/x-m4v=io.github.celluloid_player.Celluloid.desktop; 201 | video/x-matroska=io.github.celluloid_player.Celluloid.desktop; 202 | video/x-mjpeg=io.github.celluloid_player.Celluloid.desktop; 203 | video/x-mpeg=io.github.celluloid_player.Celluloid.desktop; 204 | video/x-mpeg2=io.github.celluloid_player.Celluloid.desktop; 205 | video/x-ms-asf=io.github.celluloid_player.Celluloid.desktop; 206 | video/x-ms-asf-plugin=io.github.celluloid_player.Celluloid.desktop; 207 | video/x-ms-asx=io.github.celluloid_player.Celluloid.desktop; 208 | video/x-msvideo=io.github.celluloid_player.Celluloid.desktop; 209 | video/x-ms-wm=io.github.celluloid_player.Celluloid.desktop; 210 | video/x-ms-wmv=io.github.celluloid_player.Celluloid.desktop; 211 | video/x-ms-wmx=io.github.celluloid_player.Celluloid.desktop; 212 | video/x-ms-wvx=io.github.celluloid_player.Celluloid.desktop; 213 | video/x-nsv=io.github.celluloid_player.Celluloid.desktop; 214 | video/x-ogm+ogg=io.github.celluloid_player.Celluloid.desktop; 215 | video/x-theora=io.github.celluloid_player.Celluloid.desktop; 216 | video/x-theora+ogg=io.github.celluloid_player.Celluloid.desktop; 217 | video/x-totem-stream=io.github.celluloid_player.Celluloid.desktop; 218 | x-content/video-dvd=io.github.celluloid_player.Celluloid.desktop; 219 | x-scheme-handler/pnm=io.github.celluloid_player.Celluloid.desktop; 220 | x-scheme-handler/mms=io.github.celluloid_player.Celluloid.desktop; 221 | x-scheme-handler/net=io.github.celluloid_player.Celluloid.desktop; 222 | x-scheme-handler/rtp=io.github.celluloid_player.Celluloid.desktop; 223 | x-scheme-handler/rtmp=io.github.celluloid_player.Celluloid.desktop; 224 | x-scheme-handler/rtsp=io.github.celluloid_player.Celluloid.desktop; 225 | x-scheme-handler/mmsh=io.github.celluloid_player.Celluloid.desktop; 226 | x-scheme-handler/uvox=io.github.celluloid_player.Celluloid.desktop; 227 | x-scheme-handler/icy=io.github.celluloid_player.Celluloid.desktop; 228 | x-scheme-handler/icyx=io.github.celluloid_player.Celluloid.desktop; 229 | application/bzip2=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 230 | application/gzip=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 231 | application/vnd.android.package-archive=org.gnome.FileRoller.desktop; 232 | application/vnd.ms-cab-compressed=org.gnome.FileRoller.desktop; 233 | application/vnd.debian.binary-package=org.gnome.FileRoller.desktop; 234 | application/x-7z-compressed=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 235 | application/x-7z-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 236 | application/x-ace=org.gnome.FileRoller.desktop; 237 | application/x-alz=org.gnome.FileRoller.desktop; 238 | application/x-ar=org.gnome.FileRoller.desktop; 239 | application/x-archive=org.gnome.FileRoller.desktop; 240 | application/x-arj=org.gnome.FileRoller.desktop; 241 | application/x-brotli=org.gnome.FileRoller.desktop; 242 | application/x-bzip-brotli-tar=org.gnome.FileRoller.desktop; 243 | application/x-bzip=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 244 | application/x-bzip-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 245 | application/x-bzip1=org.gnome.FileRoller.desktop; 246 | application/x-bzip1-compressed-tar=org.gnome.FileRoller.desktop; 247 | application/x-cabinet=org.gnome.FileRoller.desktop; 248 | application/x-compress=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 249 | application/x-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 250 | application/x-cpio=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 251 | application/x-chrome-extension=org.gnome.FileRoller.desktop; 252 | application/x-deb=org.gnome.FileRoller.desktop; 253 | application/x-ear=org.gnome.FileRoller.desktop; 254 | application/x-ms-dos-executable=org.gnome.FileRoller.desktop; 255 | application/x-gtar=org.gnome.FileRoller.desktop; 256 | application/x-gzip=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 257 | application/x-java-archive=org.gnome.FileRoller.desktop; 258 | application/x-lha=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 259 | application/x-lhz=org.gnome.FileRoller.desktop; 260 | application/x-lrzip=org.gnome.FileRoller.desktop; 261 | application/x-lrzip-compressed-tar=org.gnome.FileRoller.desktop; 262 | application/x-lz4=org.gnome.FileRoller.desktop; 263 | application/x-lzip=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 264 | application/x-lzip-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 265 | application/x-lzma=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 266 | application/x-lzma-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 267 | application/x-lzop=org.gnome.FileRoller.desktop; 268 | application/x-lz4-compressed-tar=org.gnome.FileRoller.desktop; 269 | application/x-lzop-compressed-tar=org.gnome.FileRoller.desktop; 270 | application/x-ms-wim=org.gnome.FileRoller.desktop; 271 | application/x-rar=org.gnome.FileRoller.desktop; 272 | application/x-rar-compressed=org.gnome.FileRoller.desktop; 273 | application/x-source-rpm=org.gnome.FileRoller.desktop; 274 | application/x-rzip=org.gnome.FileRoller.desktop; 275 | application/x-rzip-compressed-tar=org.gnome.FileRoller.desktop; 276 | application/x-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 277 | application/x-tarz=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 278 | application/x-stuffit=org.gnome.FileRoller.desktop; 279 | application/x-war=org.gnome.FileRoller.desktop; 280 | application/x-xar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 281 | application/x-xz=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 282 | application/x-xz-compressed-tar=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 283 | application/x-zip=org.gnome.FileRoller.desktop; 284 | application/x-zip-compressed=org.gnome.FileRoller.desktop; 285 | application/x-zoo=org.gnome.FileRoller.desktop; 286 | application/zip=org.gnome.Nautilus.desktop;org.gnome.FileRoller.desktop; 287 | image/bmp=org.gnome.Loupe.desktop; 288 | image/gif=org.gnome.Loupe.desktop; 289 | image/jpeg=org.gnome.Loupe.desktop; 290 | image/jpg=org.gnome.Loupe.desktop; 291 | image/pjpeg=org.gnome.Loupe.desktop; 292 | image/png=org.gnome.Loupe.desktop; 293 | image/tiff=org.gnome.Loupe.desktop; 294 | image/x-bmp=org.gnome.Loupe.desktop; 295 | image/x-gray=org.gnome.Loupe.desktop; 296 | image/x-icb=org.gnome.Loupe.desktop; 297 | image/x-ico=org.gnome.Loupe.desktop; 298 | image/x-png=org.gnome.Loupe.desktop; 299 | image/x-portable-anymap=org.gnome.Loupe.desktop; 300 | image/x-portable-bitmap=org.gnome.Loupe.desktop; 301 | image/x-portable-graymap=org.gnome.Loupe.desktop; 302 | image/x-portable-pixmap=org.gnome.Loupe.desktop; 303 | image/x-xbitmap=org.gnome.Loupe.desktop; 304 | image/x-xpixmap=org.gnome.Loupe.desktop; 305 | image/x-pcx=org.gnome.Loupe.desktop; 306 | image/svg+xml=org.gnome.Loupe.desktop; 307 | image/svg+xml-compressed=org.gnome.Loupe.desktop; 308 | image/vnd.wap.wbmp=org.gnome.Loupe.desktop; 309 | image/x-icns=org.gnome.Loupe.desktop; 310 | application/pdf=org.gnome.Papers.desktop; 311 | application/x-bzpdf=org.gnome.Papers.desktop; 312 | application/x-gzpdf=org.gnome.Papers.desktop; 313 | application/x-xzpdf=org.gnome.Papers.desktop; 314 | application/x-ext-pdf=org.gnome.Papers.desktop; 315 | application/postscript=org.gnome.Papers.desktop; 316 | application/x-bzpostscript=org.gnome.Papers.desktop; 317 | application/x-gzpostscript=org.gnome.Papers.desktop; 318 | image/x-eps=org.gnome.Papers.desktop; 319 | image/x-bzeps=org.gnome.Papers.desktop; 320 | image/x-gzeps=org.gnome.Papers.desktop; 321 | application/x-ext-ps=org.gnome.Papers.desktop; 322 | application/x-ext-eps=org.gnome.Papers.desktop; 323 | application/illustrator=org.gnome.Papers.desktop; 324 | application/x-dvi=org.gnome.Papers.desktop; 325 | application/x-bzdvi=org.gnome.Papers.desktop; 326 | application/x-gzdvi=org.gnome.Papers.desktop; 327 | application/x-ext-dvi=org.gnome.Papers.desktop; 328 | image/vnd.djvu+multipage=org.gnome.Papers.desktop; 329 | application/x-ext-djv=org.gnome.Papers.desktop; 330 | application/x-ext-djvu=org.gnome.Papers.desktop; 331 | image/tiff=org.gnome.Papers.desktop; 332 | application/x-cbr=org.gnome.Papers.desktop; 333 | application/x-cbz=org.gnome.Papers.desktop; 334 | application/x-cb7=org.gnome.Papers.desktop; 335 | application/x-cbt=org.gnome.Papers.desktop; 336 | application/x-ext-cbr=org.gnome.Papers.desktop; 337 | application/x-ext-cbz=org.gnome.Papers.desktop; 338 | application/x-ext-cb7=org.gnome.Papers.desktop; 339 | application/x-ext-cbt=org.gnome.Papers.desktop; 340 | application/vnd.comicbook+zip=org.gnome.Papers.desktop; 341 | application/vnd.comicbook-rar=org.gnome.Papers.desktop; 342 | application/oxps=org.gnome.Papers.desktop; 343 | application/vnd.ms-xpsdocument=org.gnome.Papers.desktop; 344 | -------------------------------------------------------------------------------- /configs/greetd-tuigreet/config.toml: -------------------------------------------------------------------------------- 1 | [terminal] 2 | vt = 1 3 | 4 | [default_session] 5 | command = "tuigreet --remember --asterisks --time --cmd sway" 6 | 7 | user = "greeter" -------------------------------------------------------------------------------- /configs/gtk/kde-gtk.css: -------------------------------------------------------------------------------- 1 | @import 'colors.css'; 2 | @import 'window_decorations.css'; 3 | @define-color accent_color #3daee9; 4 | @define-color accent_bg_color #3daee9; 5 | @define-color accent_fg_color #ffffff; 6 | @define-color destructive_color #da4453; 7 | @define-color destructive_bg_color #da4453; 8 | @define-color destructive_fg_color #ffffff; 9 | @define-color success_color #27ae60; 10 | @define-color success_bg_color #27ae60; 11 | @define-color success_fg_color #ffffff; 12 | @define-color warning_color #f67400; 13 | @define-color warning_bg_color #f67400; 14 | @define-color warning_fg_color #ffffff; 15 | @define-color error_color #da4453; 16 | @define-color error_bg_color #da4453; 17 | @define-color error_fg_color #ffffff; 18 | @define-color window_bg_color #2a2e32; 19 | @define-color window_fg_color #fcfcfc; 20 | @define-color view_bg_color #1b1e20; 21 | @define-color view_fg_color #fcfcfc; 22 | @define-color headerbar_bg_color #31363b; 23 | @define-color headerbar_fg_color #fcfcfc; 24 | @define-color headerbar_border_color #fcfcfc; 25 | @define-color headerbar_backdrop_color #2a2e32; 26 | @define-color headerbar_shade_color rgba(255, 255, 255, 0.09); 27 | @define-color card_bg_color #1b1e20; 28 | @define-color card_fg_color #fcfcfc; 29 | @define-color card_shade_color rgba(255, 255, 255, 0.09); 30 | @define-color dialog_bg_color #2a2e32; 31 | @define-color dialog_fg_color #fcfcfc; 32 | @define-color popover_bg_color #1b1e20; 33 | @define-color popover_fg_color #fcfcfc; 34 | @define-color shade_color rgba(0, 0, 0, 0.36); 35 | @define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); 36 | @define-color blue_1 #99c1f1; 37 | @define-color blue_2 #62a0ea; 38 | @define-color blue_3 #3584e4; 39 | @define-color blue_4 #1c71d8; 40 | @define-color blue_5 #1a5fb4; 41 | @define-color green_1 #8ff0a4; 42 | @define-color green_2 #57e389; 43 | @define-color green_3 #33d17a; 44 | @define-color green_4 #2ec27e; 45 | @define-color green_5 #26a269; 46 | @define-color yellow_1 #f9f06b; 47 | @define-color yellow_2 #f8e45c; 48 | @define-color yellow_3 #f6d32d; 49 | @define-color yellow_4 #f5c211; 50 | @define-color yellow_5 #e5a50a; 51 | @define-color orange_1 #ffbe6f; 52 | @define-color orange_2 #ffa348; 53 | @define-color orange_3 #ff7800; 54 | @define-color orange_4 #e66100; 55 | @define-color orange_5 #c64600; 56 | @define-color red_1 #f66151; 57 | @define-color red_2 #ed333b; 58 | @define-color red_3 #e01b24; 59 | @define-color red_4 #c01c28; 60 | @define-color red_5 #a51d2d; 61 | @define-color purple_1 #dc8add; 62 | @define-color purple_2 #c061cb; 63 | @define-color purple_3 #9141ac; 64 | @define-color purple_4 #813d9c; 65 | @define-color purple_5 #613583; 66 | @define-color brown_1 #cdab8f; 67 | @define-color brown_2 #b5835a; 68 | @define-color brown_3 #986a44; 69 | @define-color brown_4 #865e3c; 70 | @define-color brown_5 #63452c; 71 | @define-color light_1 #ffffff; 72 | @define-color light_2 #f6f5f4; 73 | @define-color light_3 #deddda; 74 | @define-color light_4 #c0bfbc; 75 | @define-color light_5 #9a9996; 76 | @define-color dark_1 #77767b; 77 | @define-color dark_2 #5e5c64; 78 | @define-color dark_3 #3d3846; 79 | @define-color dark_4 #241f31; 80 | @define-color dark_5 #000000; -------------------------------------------------------------------------------- /configs/mangohud/MangoHud.conf: -------------------------------------------------------------------------------- 1 | legacy_layout=0 2 | horizontal 3 | gpu_stats 4 | cpu_stats 5 | cpu_power 6 | gpu_power 7 | ram 8 | fps 9 | frametime=0 10 | hud_no_margin 11 | table_columns=14 12 | frame_timing=1 13 | engine_version 14 | vulkan_driver -------------------------------------------------------------------------------- /configs/opensnitch/default-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "Server": 3 | { 4 | "Address":"unix:///tmp/osui.sock", 5 | "LogFile":"/var/log/opensnitchd.log" 6 | }, 7 | "DefaultAction": "deny", 8 | "DefaultDuration": "once", 9 | "InterceptUnknown": false, 10 | "ProcMonitorMethod": "ebpf", 11 | "LogLevel": 2, 12 | "Firewall": "nftables", 13 | "Stats": { 14 | "MaxEvents": 150, 15 | "MaxStats": 25, 16 | "Workers": 6 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /configs/opensnitch/rules/bitwarden.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:48:36.381959262+01:00", 3 | "updated": "2023-05-15T12:48:36.381996422+01:00", 4 | "name": "bitwarden", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/Bitwarden/bitwarden", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/chromium.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:41:16.347409231+01:00", 3 | "updated": "2023-05-15T12:41:16.347421136+01:00", 4 | "name": "chromium", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/chromium/chrome", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/curl.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:03.463277946+01:00", 3 | "updated": "2023-05-15T12:42:03.463326359+01:00", 4 | "name": "curl", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/curl", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/discord.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:48:14.811010547+01:00", 3 | "updated": "2023-05-15T12:48:14.811064501+01:00", 4 | "name": "discord", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/discord/Discord", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/dockerd.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:10.706168472+01:00", 3 | "updated": "2023-05-15T12:42:10.706224259+01:00", 4 | "name": "dockerd", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/dockerd", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/firefox.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:47:16.224542615+01:00", 3 | "updated": "2023-05-15T12:47:16.224583664+01:00", 4 | "name": "firefox", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/lib/firefox/firefox-bin", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/flatpak.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:17.820212883+01:00", 3 | "updated": "2023-05-15T12:42:17.820255615+01:00", 4 | "name": "flatpak", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/flatpak", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/fwupdmgr.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:24.851439195+01:00", 3 | "updated": "2023-05-15T12:42:24.851480626+01:00", 4 | "name": "fwupdmgr", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/fwupdmgr", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/git-remote-http.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:43:04.813594265+01:00", 3 | "updated": "2023-05-15T12:43:04.813609138+01:00", 4 | "name": "git-remote-http", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/lib/git-core/git-remote-http", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/insomnia.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:41:41.825821733+01:00", 3 | "updated": "2023-05-15T12:41:41.825880729+01:00", 4 | "name": "insomnia", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/main/insomnia", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/networkmanager.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:31.719357609+01:00", 3 | "updated": "2023-05-15T12:42:31.7193708+01:00", 4 | "name": "networkmanager", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/NetworkManager", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/obsidian.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:46:30.654223123+01:00", 3 | "updated": "2023-05-15T12:46:30.654258267+01:00", 4 | "name": "obsidian", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/app/obsidian", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/pacman.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:38.201199701+01:00", 3 | "updated": "2023-05-15T12:42:38.201240924+01:00", 4 | "name": "pacman", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/pacman", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/paru.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:46.416294787+01:00", 3 | "updated": "2023-05-15T12:42:46.416348257+01:00", 4 | "name": "paru", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/paru", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/plasmashell.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:42:54.157417249+01:00", 3 | "updated": "2023-05-15T12:42:54.157459949+01:00", 4 | "name": "plasmashell", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/plasmashell", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/ssh.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T13:12:08.035492294+01:00", 3 | "updated": "2023-05-15T13:12:08.035509324+01:00", 4 | "name": "ssh", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/ssh", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/syncthing.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:43:18.570719824+01:00", 3 | "updated": "2023-05-15T12:43:18.570757442+01:00", 4 | "name": "syncthing", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/bin/syncthing", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/systemd-timesyncd.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:43:12.533459968+01:00", 3 | "updated": "2023-05-15T12:43:12.533470505+01:00", 4 | "name": "systemd-timesyncd", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/usr/lib/systemd/systemd-timesyncd", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/visual-studio-code.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T12:41:56.647203111+01:00", 3 | "updated": "2023-05-15T12:41:56.647239805+01:00", 4 | "name": "visual-studio-code", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "process.path", 12 | "sensitive": false, 13 | "data": "/opt/visual-studio-code/code", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/opensnitch/rules/wireguard.json: -------------------------------------------------------------------------------- 1 | { 2 | "created": "2023-05-15T13:02:35.131684861+01:00", 3 | "updated": "2023-05-15T13:02:35.131731606+01:00", 4 | "name": "wireguard", 5 | "enabled": true, 6 | "precedence": false, 7 | "action": "allow", 8 | "duration": "always", 9 | "operator": { 10 | "type": "simple", 11 | "operand": "dest.port", 12 | "sensitive": false, 13 | "data": "51900", 14 | "list": [] 15 | } 16 | } -------------------------------------------------------------------------------- /configs/openvr/openvrpaths.vrpath.opencomposite: -------------------------------------------------------------------------------- 1 | { 2 | "config": [ 3 | "/home/${NEW_USER}/.local/share/Steam/config" 4 | ], 5 | "external_drivers": null, 6 | "jsonid": "vrpathreg", 7 | "log": [ 8 | "/home/${NEW_USER}/.local/share/Steam/logs" 9 | ], 10 | "runtime": [ 11 | "/opt/opencomposite" 12 | ], 13 | "version": 1 14 | } -------------------------------------------------------------------------------- /configs/openvr/openvrpaths.vrpath.steam: -------------------------------------------------------------------------------- 1 | { 2 | "config": [ 3 | "/home/${NEW_USER}/.local/share/Steam/config" 4 | ], 5 | "external_drivers": null, 6 | "jsonid": "vrpathreg", 7 | "log": [ 8 | "/home/${NEW_USER}/.local/share/Steam/logs" 9 | ], 10 | "runtime": [ 11 | "/home/${NEW_USER}/.local/share/Steam/steamapps/common/SteamVR" 12 | ], 13 | "version": 1 14 | } -------------------------------------------------------------------------------- /configs/openvr/openvrpaths.vrpath.xrizer: -------------------------------------------------------------------------------- 1 | { 2 | "config": [ 3 | "/home/${NEW_USER}/.local/share/Steam/config" 4 | ], 5 | "external_drivers": null, 6 | "jsonid": "vrpathreg", 7 | "log": [ 8 | "/home/${NEW_USER}/.local/share/Steam/logs" 9 | ], 10 | "runtime": [ 11 | "/opt/xrizer" 12 | ], 13 | "version": 1 14 | } -------------------------------------------------------------------------------- /configs/plasma/colors/Aseprite.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=44,44,48 3 | activeForeground=204,204,204 4 | inactiveBackground=44,44,48 5 | inactiveForeground=142,142,142 6 | -------------------------------------------------------------------------------- /configs/plasma/colors/Blender.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=29,29,29 3 | activeForeground=204,204,204 4 | inactiveBackground=29,29,29 5 | inactiveForeground=142,142,142 6 | -------------------------------------------------------------------------------- /configs/plasma/colors/DiscordOnyx.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=0,0,0 3 | activeForeground=204,204,206 4 | inactiveBackground=0,0,0 5 | inactiveForeground=157,157,162 -------------------------------------------------------------------------------- /configs/plasma/colors/Gimp.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=72,72,72 3 | activeForeground=204,204,204 4 | inactiveBackground=72,72,72 5 | inactiveForeground=142,142,142 6 | -------------------------------------------------------------------------------- /configs/plasma/colors/Godot.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=29,34,41 3 | activeForeground=204,204,204 4 | inactiveBackground=29,34,41 5 | inactiveForeground=142,142,142 6 | -------------------------------------------------------------------------------- /configs/plasma/colors/HeroicGamesLauncher.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=6,9,10 3 | activeForeground=250,247,246 4 | inactiveBackground=6,9,10 5 | inactiveForeground=162,159,158 6 | -------------------------------------------------------------------------------- /configs/plasma/colors/ObsidianDark.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=54,54,54 3 | activeForeground=218,218,218 4 | inactiveBackground=38,38,38 5 | inactiveForeground=164,164,164 -------------------------------------------------------------------------------- /configs/plasma/colors/Spotify.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=0,0,0 3 | activeForeground=255,255,255 4 | inactiveBackground=0,0,0 5 | inactiveForeground=167,167,167 -------------------------------------------------------------------------------- /configs/plasma/colors/VSCodeModernDark.colors: -------------------------------------------------------------------------------- 1 | [WM] 2 | activeBackground=23,23,23 3 | activeForeground=232,232,232 4 | inactiveBackground=30,30,30 5 | inactiveForeground=156,156,156 6 | -------------------------------------------------------------------------------- /configs/plasma/konsole/Breeze_Dark_Modern.colorscheme: -------------------------------------------------------------------------------- 1 | [Background] 2 | Color=24,24,24 3 | RandomHueRange=360 4 | RandomSaturationRange=100 5 | 6 | [BackgroundFaint] 7 | Color=24,24,24 8 | RandomHueRange=360 9 | RandomSaturationRange=100 10 | 11 | [BackgroundIntense] 12 | Color=24,24,24 13 | RandomHueRange=360 14 | RandomSaturationRange=100 15 | 16 | [Color0] 17 | Color=35,38,39 18 | 19 | [Color0Faint] 20 | Color=49,54,59 21 | 22 | [Color0Intense] 23 | Color=127,140,141 24 | 25 | [Color1] 26 | Color=237,21,21 27 | 28 | [Color1Faint] 29 | Color=120,50,40 30 | 31 | [Color1Intense] 32 | Color=192,57,43 33 | 34 | [Color2] 35 | Color=17,209,22 36 | 37 | [Color2Faint] 38 | Color=23,162,98 39 | 40 | [Color2Intense] 41 | Color=28,220,154 42 | 43 | [Color3] 44 | Color=246,116,0 45 | 46 | [Color3Faint] 47 | Color=182,86,25 48 | 49 | [Color3Intense] 50 | Color=253,188,75 51 | 52 | [Color4] 53 | Color=29,153,243 54 | 55 | [Color4Faint] 56 | Color=27,102,143 57 | 58 | [Color4Intense] 59 | Color=61,174,233 60 | 61 | [Color5] 62 | Color=155,89,182 63 | 64 | [Color5Faint] 65 | Color=97,74,115 66 | 67 | [Color5Intense] 68 | Color=142,68,173 69 | 70 | [Color6] 71 | Color=26,188,156 72 | 73 | [Color6Faint] 74 | Color=24,108,96 75 | 76 | [Color6Intense] 77 | Color=22,160,133 78 | 79 | [Color7] 80 | Color=252,252,252 81 | 82 | [Color7Faint] 83 | Color=99,104,109 84 | 85 | [Color7Intense] 86 | Color=255,255,255 87 | 88 | [Foreground] 89 | Color=252,252,252 90 | RandomHueRange=360 91 | RandomSaturationRange=100 92 | 93 | [ForegroundFaint] 94 | Color=239,240,241 95 | RandomHueRange=360 96 | RandomSaturationRange=100 97 | 98 | [ForegroundIntense] 99 | Color=255,255,255 100 | RandomHueRange=360 101 | RandomSaturationRange=100 102 | 103 | [General] 104 | Anchor=0.5,0.5 105 | Blur=false 106 | ColorRandomization=false 107 | Description=Breeze Dark Modern 108 | FillStyle=Tile 109 | Opacity=1 110 | Wallpaper= 111 | WallpaperFlipType=NoFlip 112 | WallpaperOpacity=1 113 | -------------------------------------------------------------------------------- /configs/plasma/konsole/custom.profile: -------------------------------------------------------------------------------- 1 | [Appearance] 2 | ColorScheme=Breeze Dark Modern 3 | Font=NotoSansM Nerd Font Mono,10,-1,5,57,0,0,0,0,0,Medium 4 | TabColor=27,30,32,0 5 | 6 | [General] 7 | Name=custom 8 | Parent=FALLBACK/ 9 | ShowTerminalSizeHint=false 10 | 11 | [Scrolling] 12 | HistorySize=10000 13 | -------------------------------------------------------------------------------- /configs/plasma/konsole/konsole_breeze_modern_dark.css: -------------------------------------------------------------------------------- 1 | QTabBar, 2 | QTabBar::tab 3 | { 4 | background-color: #181818; 5 | } 6 | 7 | QTabBar::tab:hover 8 | { 9 | background-color: #1f1f1f; 10 | } 11 | 12 | QTabBar::tab:selected 13 | { 14 | background-color: #1f1f1f; 15 | } 16 | -------------------------------------------------------------------------------- /configs/plasma/plasma-packages.md: -------------------------------------------------------------------------------- 1 | # get KDE packages 2 | 3 | # https://download.kde.org/stable/plasma/ 4 | 5 | ``` 6 | packages=$(curl -s https://download.kde.org/stable/plasma/6.3.4/ | grep -o -P '(?<=" 12 | 13 | 14 | ### Define some constants 15 | 16 | set $neovim $term --title "Neovim" --command nvim 17 | 18 | 19 | ### Run applications 20 | 21 | exec firefox-developer-edition 22 | exec thunderbird 23 | exec $neovim 24 | exec swaymsg "workspace $workspace_terminals; exec $term" 25 | exec udiskie 26 | exec stretchly 27 | 28 | 29 | ### Set focus 30 | 31 | focus output $output_monitor 32 | -------------------------------------------------------------------------------- /configs/sway/variables: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Variables 4 | # 5 | # Shared variables. Strictly local variables are defined in other files near 6 | # their usage. 7 | # 8 | ################################################################################ 9 | 10 | 11 | # Outputs 12 | set $output_laptop eDP-1 13 | set $output_monitor "Dell Inc. DELL U2412M Y1H5T1B831CL" 14 | set $output_tv "Goldstar Company Ltd 42PC3RA-ZJ 0x00000101" 15 | 16 | # Screen locking application 17 | set $lock swaylock 18 | 19 | # Preferred terminal emulator 20 | set $term alacritty 21 | 22 | # Preferred application launcher 23 | # 24 | # NOTE: pass the final command to swaymsg so that the resulting window can be 25 | # opened on the original workspace that the command was run on. 26 | set $menu wofi --show=drun --prompt="Enter the application name" | swaymsg exec -- 27 | 28 | # Workspaces 29 | set $workspace_www 1:WWW 30 | set $workspace_editor 2:Editor 31 | set $workspace_terminals 3:Terminals 32 | set $workspace_mail 4:Mail 33 | set $workspace_documents 8:Documents 34 | set $workspace_multimedia 9:Multimedia 35 | set $workspace_torrent 10:Torrent 36 | -------------------------------------------------------------------------------- /configs/swaylock/config: -------------------------------------------------------------------------------- 1 | daemonize 2 | # Default was sans-serif 3 | font=system-ui 4 | color=000000 5 | hide-keyboard-layout 6 | indicator-caps-lock 7 | indicator-radius=100 -------------------------------------------------------------------------------- /configs/vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "telemetry.telemetryLevel": "off", 3 | "redhat.telemetry.enabled": false, 4 | "terraform.telemetry.enabled": false, 5 | "window.menuBarVisibility": "toggle", 6 | "workbench.startupEditor": "none", 7 | "editor.fontFamily": "'NotoSansM Nerd Font Mono', 'Fira Code Nerd Font Mono' ,'Hack', 'Noto Sans Mono', 'Droid Sans Mono', 'monospace', 'Droid Sans Fallback'", 8 | "workbench.enableExperiments": false, 9 | "workbench.settings.enableNaturalLanguageSearch": false, 10 | "workbench.iconTheme": null, 11 | "workbench.tree.indent": 12, 12 | "window.titleBarStyle": "native", 13 | "editor.fontWeight": "500", 14 | "files.associations": { 15 | "*.j2": "terraform", 16 | "*.hcl": "terraform", 17 | "*.bu": "yaml", 18 | "*.ign": "json", 19 | "*.service": "ini" 20 | }, 21 | "extensions.ignoreRecommendations": true, 22 | "git.enableSmartCommit": true, 23 | "git.confirmSync": false, 24 | "git.autofetch": true, 25 | "[typescript]": { 26 | "editor.defaultFormatter": "esbenp.prettier-vscode" 27 | }, 28 | "[javascript]": { 29 | "editor.defaultFormatter": "esbenp.prettier-vscode" 30 | }, 31 | "workbench.colorCustomizations": { 32 | "[Default Dark Modern]": { 33 | "editor.background": "#181818" 34 | } 35 | }, 36 | "git.useIntegratedAskPass": false, 37 | "telemetry.feedback.enabled": false, 38 | "dotnetAcquisitionExtension.enableTelemetry": false, 39 | "mcp": { 40 | "servers": { 41 | "Context7": { 42 | "command": "podman", 43 | "args": [ 44 | "run", 45 | "-i", 46 | "--rm", 47 | "mcp/context7" 48 | ] 49 | }, 50 | "brave-search": { 51 | "command": "podman", 52 | "args": [ 53 | "run", 54 | "-i", 55 | "--rm", 56 | "-e", 57 | "BRAVE_API_KEY", 58 | "mcp/brave-search" 59 | ], 60 | "env": { 61 | "BRAVE_API_KEY": "YOUR_API_KEY_HERE" 62 | } 63 | }, 64 | "fetch": { 65 | "command": "podman", 66 | "args": [ 67 | "run", 68 | "-i", 69 | "--rm", 70 | "mcp/fetch" 71 | ] 72 | } 73 | } 74 | }, 75 | } -------------------------------------------------------------------------------- /configs/waybar/config: -------------------------------------------------------------------------------- 1 | // ============================================================================= 2 | // 3 | // Waybar configuration 4 | // 5 | // Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration 6 | // 7 | // ============================================================================= 8 | 9 | { 10 | // ------------------------------------------------------------------------- 11 | // Global configuration 12 | // ------------------------------------------------------------------------- 13 | 14 | "layer": "bottom", 15 | 16 | "position": "top", 17 | 18 | // If height property would be not present, it'd be calculated dynamically 19 | "height": 32, 20 | 21 | "modules-left": [ 22 | "sway/workspaces", 23 | "sway/mode" 24 | ], 25 | "modules-center": [ 26 | "sway/window" 27 | ], 28 | "modules-right": [ 29 | "network", 30 | "idle_inhibitor", 31 | // "memory", 32 | // "cpu", 33 | // "temperature", 34 | "custom/keyboard_layout", 35 | "backlight", 36 | "pulseaudio", 37 | "battery", 38 | "custom/power_profile", 39 | "tray", 40 | "clock#date", 41 | "clock#time" 42 | ], 43 | 44 | 45 | // ------------------------------------------------------------------------- 46 | // Modules 47 | // ------------------------------------------------------------------------- 48 | 49 | "backlight": { 50 | "format": " {percent}%", 51 | "interval": 2, 52 | "on-scroll-up": "brightnessctl set +2%", 53 | "on-scroll-down": "brightnessctl set 2%-" 54 | }, 55 | 56 | "custom/power_profile": { 57 | "exec": "sleep 0.3 && /usr/local/bin/powerprofilecycle.sh -m", 58 | "interval": 120, 59 | "on-click": "/usr/local/bin/powerprofilecycle.sh", 60 | "exec-on-event": true 61 | }, 62 | 63 | "battery": { 64 | "interval": 10, 65 | "states": { 66 | "warning": 25, 67 | "critical": 15 68 | }, 69 | // Connected to AC 70 | "format": " {icon} {capacity}%", // Icon: bolt 71 | // Not connected to AC 72 | "format-discharging": "{icon} {capacity}%", 73 | "format-icons": [ 74 | "", // Icon: battery-full 75 | "", // Icon: battery-three-quarters 76 | "", // Icon: battery-half 77 | "", // Icon: battery-quarter 78 | "" // Icon: battery-empty 79 | ], 80 | "tooltip": true 81 | }, 82 | 83 | "clock#time": { 84 | "interval": 1, 85 | "format": "{:%H:%M:%S}", 86 | "tooltip": false 87 | }, 88 | 89 | "clock#date": { 90 | "interval": 10, 91 | "format": " {:%e %b %Y}", // Icon: calendar-alt 92 | "tooltip-format": "{:%e %B %Y}", 93 | "locale": "en_US.UTF-8", 94 | "timezone": "Europe/Lisbon", 95 | }, 96 | 97 | "cpu": { 98 | "interval": 3, 99 | "format": " {usage}% ({load})", // Icon: microchip 100 | "states": { 101 | "warning": 70, 102 | "critical": 90 103 | }, 104 | }, 105 | 106 | "custom/keyboard_layout": { 107 | "exec": "swaymsg -t get_inputs | grep -m1 'xkb_active_layout_name' | cut -d '\"' -f4 | cut -d ' ' -f1", 108 | // Interval set only as a fallback, as the value is updated by signal 109 | "interval": 10, 110 | "format": " {}", // Icon: keyboard 111 | // Signal sent by Sway key binding (~/.config/sway/key-bindings) 112 | "signal": 1, // SIGHUP 113 | "tooltip": false, 114 | "on-click": "swaymsg input type:keyboard xkb_switch_layout next", 115 | "on-scroll-up": "swaymsg input type:keyboard xkb_switch_layout next", 116 | "on-scroll-down": "swaymsg input type:keyboard xkb_switch_layout prev", 117 | }, 118 | 119 | "idle_inhibitor": { 120 | "format": "{icon}", 121 | "format-icons": { 122 | "activated": "", 123 | "deactivated": "", 124 | }, 125 | }, 126 | 127 | "memory": { 128 | "interval": 3, 129 | "format": " {}%", // Icon: memory 130 | "states": { 131 | "warning": 70, 132 | "critical": 90 133 | } 134 | }, 135 | 136 | "network": { 137 | "interval": 3, 138 | "format-wifi": " {essid}", // Icon: wifi 139 | "format-ethernet": " {ifname}: {ipaddr}/{cidr}", // Icon: ethernet 140 | "format-disconnected": "⚠ Disconnected", 141 | "tooltip-format": "{ifname}: {ipaddr} (signal: {signalStrength}%)" 142 | }, 143 | 144 | "pulseaudio": { 145 | "scroll-step": 2, 146 | "format": "{icon} {volume}%", 147 | "format-muted": " Muted", // Icon: volume-mute 148 | "format-icons": { 149 | "headphones": "", // Icon: headphones 150 | "handsfree": "", // Icon: headset 151 | "headset": "", // Icon: headset 152 | "phone": "", // Icon: phone 153 | "portable": "", // Icon: phone 154 | "car": "", // Icon: car 155 | "default": ["", ""] // Icons: volume-down, volume-up 156 | }, 157 | "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle", 158 | "on-click-right": "alacritty --title='Sound Mixer' --command='pulsemixer'", 159 | "tooltip": true 160 | }, 161 | 162 | "sway/mode": { 163 | "format": " {}", // Icon: expand-arrows-alt 164 | "tooltip": false 165 | }, 166 | 167 | "sway/window": { 168 | "format": "{}", 169 | "max-length": 120 170 | }, 171 | 172 | "sway/workspaces": { 173 | "all-outputs": false, 174 | "disable-scroll": true, 175 | "format": "{icon} {name}", 176 | "format-icons": { 177 | "1:WWW": "", // Icon: firefox-browser 178 | "2:Editor": "", // Icon: code 179 | "3:Terminals": "", // Icon: terminal 180 | "4:Mail": "", // Icon: mail 181 | "8:Documents": "", // Icon: book 182 | "9:Multimedia": "", // Icon: music 183 | "10:Torrent": "", // Icon: cloud-download-alt 184 | "urgent": "", 185 | "focused": "", 186 | "default": "" 187 | } 188 | }, 189 | 190 | "temperature": { 191 | "critical-threshold": 75, 192 | "interval": 3, 193 | "format": "{icon} {temperatureC}°C", 194 | "format-icons": [ 195 | "", // Icon: temperature-empty 196 | "", // Icon: temperature-quarter 197 | "", // Icon: temperature-half 198 | "", // Icon: temperature-three-quarters 199 | "" // Icon: temperature-full 200 | ], 201 | "tooltip": true 202 | }, 203 | 204 | "tray": { 205 | "icon-size": 21, 206 | "spacing": 10 207 | } 208 | 209 | } -------------------------------------------------------------------------------- /configs/waybar/style.css: -------------------------------------------------------------------------------- 1 | /* ============================================================================= 2 | * 3 | * Waybar styles 4 | * 5 | * Styles reference: https://github.com/Alexays/Waybar/wiki/Configuration 6 | * 7 | * =========================================================================== */ 8 | 9 | /* ----------------------------------------------------------------------------- 10 | * Keyframes 11 | * -------------------------------------------------------------------------- */ 12 | 13 | @keyframes blink-warning { 14 | 70% { 15 | color: white; 16 | } 17 | 18 | to { 19 | color: white; 20 | background-color: orange; 21 | } 22 | } 23 | 24 | @keyframes blink-critical { 25 | 70% { 26 | color: white; 27 | } 28 | 29 | to { 30 | color: white; 31 | background-color: red; 32 | } 33 | } 34 | 35 | 36 | /* ----------------------------------------------------------------------------- 37 | * Base styles 38 | * -------------------------------------------------------------------------- */ 39 | 40 | /* Reset all styles */ 41 | * { 42 | border: none; 43 | border-radius: 0; 44 | min-height: 0; 45 | margin: 0; 46 | padding: 0; 47 | } 48 | 49 | /* The whole bar */ 50 | #waybar { 51 | background-color: #222222; /* Sway palette: unfocused/background */ 52 | color: #ffffff; /* Sway palette: focused/text */ 53 | font-family: system-ui, sans-serif; 54 | font-size: 14px; 55 | } 56 | 57 | /* ----------------------------------------------------------------------------- 58 | * Module styles 59 | * -------------------------------------------------------------------------- */ 60 | 61 | /* Each module */ 62 | #backlight, 63 | #battery, 64 | #clock, 65 | #cpu, 66 | #custom-keyboard-layout, 67 | #idle_inhibitor, 68 | #memory, 69 | #mode, 70 | #network, 71 | #pulseaudio, 72 | #temperature, 73 | #tray { 74 | margin-left: 18px; 75 | } 76 | 77 | #backlight { 78 | /* No styles */ 79 | } 80 | 81 | #battery { 82 | animation-timing-function: linear; 83 | animation-iteration-count: infinite; 84 | animation-direction: alternate; 85 | } 86 | 87 | #battery.warning { 88 | color: orange; 89 | } 90 | 91 | #battery.critical { 92 | color: red; 93 | } 94 | 95 | #battery.warning.discharging { 96 | animation-name: blink-warning; 97 | animation-duration: 3s; 98 | } 99 | 100 | #battery.critical.discharging { 101 | animation-name: blink-critical; 102 | animation-duration: 2s; 103 | } 104 | 105 | #clock { 106 | /* No styles */ 107 | } 108 | 109 | #clock.time { 110 | margin-left: 12px; 111 | margin-right: 12px; 112 | min-width: 60px; 113 | } 114 | 115 | #cpu { 116 | /* No styles */ 117 | } 118 | 119 | #cpu.warning { 120 | color: orange; 121 | } 122 | 123 | #cpu.critical { 124 | color: red; 125 | } 126 | 127 | #custom-keyboard-layout { 128 | margin-left: 22px; 129 | } 130 | 131 | #memory { 132 | animation-timing-function: linear; 133 | animation-iteration-count: infinite; 134 | animation-direction: alternate; 135 | } 136 | 137 | #memory.warning { 138 | color: orange; 139 | } 140 | 141 | #memory.critical { 142 | color: red; 143 | animation-name: blink-critical; 144 | animation-duration: 2s; 145 | } 146 | 147 | #mode { 148 | color: #ffffff; /* Sway palette: urgent/text */ 149 | background-color: #900000; /* Sway palette: urgent/background */ 150 | margin-left: 0; 151 | /* To compensate for the top border and still have vertical centering */ 152 | padding: 0 16px; 153 | } 154 | 155 | #network { 156 | /* No styles */ 157 | } 158 | 159 | #network.disconnected { 160 | color: orange; 161 | } 162 | 163 | #pulseaudio { 164 | /* No styles */ 165 | } 166 | 167 | #pulseaudio.muted { 168 | /* No styles */ 169 | } 170 | 171 | #temperature { 172 | /* No styles */ 173 | } 174 | 175 | #temperature.critical { 176 | color: red; 177 | } 178 | 179 | #tray { 180 | /* No styles */ 181 | } 182 | 183 | #window { 184 | margin-left: 32px; 185 | margin-right: 32px; 186 | } 187 | 188 | #workspaces button { 189 | border-top: 2px solid transparent; 190 | /* To compensate for the top border and still have vertical centering */ 191 | padding-bottom: 2px; 192 | padding-left: 15px; 193 | padding-right: 18px; 194 | color: #888888; /* Sway palette: unfocused/text */ 195 | } 196 | 197 | #workspaces button:hover { 198 | /* Reset all hover styles */ 199 | background: inherit; 200 | box-shadow: inherit; 201 | text-shadow: inherit; 202 | } 203 | 204 | #workspaces button.visible { 205 | border-color: #333333; /* Sway palette focused_inactive/border */ 206 | color: #ffffff; /* Sway palette: focused_inactive/text */ 207 | background-color: #5f676a; /* Sway palette focused_inactive/background */ 208 | } 209 | 210 | #workspaces button.focused { 211 | border-color: #4c7899; /* Sway palette: focused/border */ 212 | color: #ffffff; /* Sway palette: focused/text */ 213 | background-color: #285577; /* Sway palette: focused/background */ 214 | } 215 | 216 | #workspaces button.urgent { 217 | border-color: #2f343a; /* Sway palette: urgent/border */ 218 | color: #ffffff; /* Sway palette: urgent/text */ 219 | background-color: #900000; /* Sway palette: urgent/background */ 220 | } 221 | -------------------------------------------------------------------------------- /configs/wivrn/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": [ 3 | "/usr/bin/wlx-overlay-s", 4 | "--openxr", 5 | "--show" 6 | ], 7 | "bitrate": 150000000, 8 | "encoders": [ 9 | { 10 | "height": 0.25, 11 | "offset_x": 0.0, 12 | "offset_y": 0.75, 13 | "width": 0.5 14 | }, 15 | { 16 | "height": 0.75, 17 | "offset_x": 0.0, 18 | "offset_y": 0.0, 19 | "width": 0.5 20 | }, 21 | { 22 | "codec": "h264", 23 | "encoder": "x264", 24 | "height": 1.0, 25 | "offset_x": 0.5, 26 | "offset_y": 0.0, 27 | "width": 0.5 28 | } 29 | ], 30 | "openvr-compat-path": "/opt/opencomposite" 31 | } -------------------------------------------------------------------------------- /configs/yambar/config.yaml: -------------------------------------------------------------------------------- 1 | # fonts 2 | awesome: &awesome Font Awesome 6 Free:style=solid:pixelsize=10 3 | firacode: &firacode Fira Code Nerd Font Mono:pixelsize=10 4 | 5 | bar: 6 | height: 26 7 | location: top 8 | spacing: 5 9 | margin: 7 10 | 11 | font: Fira Code Nerd Font Mono:pixelsize=10 12 | 13 | foreground: ccccccff 14 | background: 181818ff 15 | 16 | border: 17 | width: 1 18 | color: 181818ff 19 | margin: 5 20 | top-margin: 0 21 | 22 | left: 23 | - i3: -------------------------------------------------------------------------------- /configs/zsh/.zshrc: -------------------------------------------------------------------------------- 1 | # https://github.com/dreamsofautonomy/zensh/blob/main/.zshrc 2 | 3 | # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. 4 | # Initialization code that may require console input (password prompts, [y/n] 5 | # confirmations, etc.) must go above this block; everything else may go below. 6 | if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then 7 | source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" 8 | fi 9 | 10 | # Set the directory we want to store zinit and plugins 11 | ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git" 12 | 13 | # Download Zinit, if it's not there yet 14 | if [ ! -d "$ZINIT_HOME" ]; then 15 | mkdir -p "$(dirname $ZINIT_HOME)" 16 | git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME" 17 | fi 18 | 19 | # Source/Load zinit 20 | source "${ZINIT_HOME}/zinit.zsh" 21 | 22 | # Add in Powerlevel10k 23 | zinit ice depth=1; zinit light romkatv/powerlevel10k 24 | 25 | # Add in zsh plugins 26 | zinit light zsh-users/zsh-syntax-highlighting 27 | zinit light zsh-users/zsh-completions 28 | zinit light zsh-users/zsh-autosuggestions 29 | zinit light Aloxaf/fzf-tab 30 | 31 | # Add in snippets 32 | zinit snippet OMZP::git 33 | zinit snippet OMZP::sudo 34 | zinit snippet OMZP::archlinux 35 | zinit snippet OMZP::node 36 | zinit snippet OMZP::npm 37 | zinit snippet OMZP::golang 38 | zinit snippet OMZP::python 39 | zinit snippet OMZP::kubectl 40 | zinit snippet OMZP::kubectx 41 | zinit snippet OMZP::command-not-found 42 | 43 | # Load completions 44 | autoload -Uz compinit && compinit 45 | 46 | zinit cdreplay -q 47 | 48 | # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. 49 | [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh 50 | 51 | # Keybindings 52 | bindkey -e 53 | bindkey '^p' history-search-backward 54 | bindkey '^n' history-search-forward 55 | bindkey '^[w' kill-region 56 | bindkey "^[[1;5C" forward-word 57 | bindkey "^[[1;5D" backward-word 58 | bindkey "^[[3~" delete-char 59 | bindkey "^?" backward-delete-char 60 | 61 | # History 62 | HISTSIZE=5000 63 | HISTFILE=~/.zsh_history 64 | SAVEHIST=$HISTSIZE 65 | HISTDUP=erase 66 | setopt appendhistory 67 | setopt sharehistory 68 | setopt hist_ignore_space 69 | setopt hist_ignore_all_dups 70 | setopt hist_save_no_dups 71 | setopt hist_ignore_dups 72 | setopt hist_find_no_dups 73 | 74 | # Completion styling 75 | zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 76 | zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" 77 | zstyle ':completion:*' menu no 78 | zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath' 79 | 80 | # Enable bash-style globbing 81 | setopt NO_NOMATCH # Do not raise an error if a glob does not match any files 82 | setopt GLOB_SUBST # Perform substitutions in globs 83 | setopt NO_GLOB_DOTS # Do not match leading dots with wildcards 84 | unsetopt EXTENDED_GLOB # Disable extended globbing 85 | 86 | # Enable comments in interactive sessions 87 | setopt INTERACTIVE_COMMENTS 88 | 89 | # Aliases 90 | alias ls='ls --color' 91 | 92 | # Source .zshrc.d files 93 | if [ -d ~/.zshrc.d ]; then 94 | for rc in ~/.zshrc.d/*; do 95 | if [ -f "$rc" ]; then 96 | . "$rc" 97 | fi 98 | done 99 | fi 100 | 101 | unset rc 102 | 103 | # Shell integrations 104 | eval "$(fzf --zsh)" -------------------------------------------------------------------------------- /flatpak.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | read -p "Gaming (yes / no): " GAMING 4 | export GAMING 5 | 6 | read -p "VR (yes / no): " VR 7 | export VR 8 | 9 | ################################################ 10 | ##### Installation 11 | ################################################ 12 | 13 | # References 14 | # https://wiki.archlinux.org/title/Flatpak 15 | # https://github.com/containers/bubblewrap/issues/324 16 | 17 | # Install Flatpak 18 | sudo pacman -S --noconfirm flatpak flatpak-builder xdg-desktop-portal-gtk 19 | systemctl --user enable --now xdg-desktop-portal.service 20 | 21 | # Add Flathub repositories 22 | sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo 23 | flatpak update 24 | 25 | # Import global Flatpak overrides 26 | mkdir -p ${HOME}/.local/share/flatpak/overrides 27 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/global -o ${HOME}/.local/share/flatpak/overrides/global 28 | 29 | # Add KDE specific global configurations 30 | if [[ "$XDG_CURRENT_DESKTOP" == *"KDE"* ]]; then 31 | mkdir -p ${HOME}/.config/xdg-desktop-portal 32 | tee -a ${HOME}/.config/xdg-desktop-portal/portals.conf << 'EOF' 33 | [preferred] 34 | default=kde 35 | org.freedesktop.impl.portal.FileChooser=kde 36 | EOF 37 | fi 38 | 39 | ################################################ 40 | ##### Applications / Runtimes 41 | ################################################ 42 | 43 | # Install Flatpak runtimes 44 | flatpak install -y flathub org.freedesktop.Platform.ffmpeg-full//24.08 45 | flatpak install -y flathub org.freedesktop.Platform.GL.default//24.08extra 46 | flatpak install -y flathub org.freedesktop.Platform.GL32.default//24.08extra 47 | flatpak install -y flathub org.freedesktop.Sdk//24.08 48 | 49 | if lspci | grep VGA | grep "Intel" > /dev/null; then 50 | flatpak install -y flathub org.freedesktop.Platform.VAAPI.Intel//24.08 51 | fi 52 | 53 | # Install DE specific applications 54 | if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then 55 | # Install Flatseal 56 | flatpak install -y flathub com.github.tchx84.Flatseal 57 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.github.tchx84.Flatseal -o ${HOME}/.local/share/flatpak/overrides/com.github.tchx84.Flatseal 58 | 59 | # Install Seabird 60 | flatpak install -y flathub dev.skynomads.Seabird 61 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/dev.skynomads.Seabird -o ${HOME}/.local/share/flatpak/overrides/dev.skynomads.Seabird 62 | 63 | # Install Pods 64 | flatpak install -y flathub com.github.marhkb.Pods 65 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.github.marhkb.Pods -o ${HOME}/.local/share/flatpak/overrides/com.github.marhkb.Pods 66 | 67 | # Install Rnote 68 | flatpak install -y flathub com.github.flxzt.rnote 69 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.github.flxzt.rnote -o ${HOME}/.local/share/flatpak/overrides/com.github.flxzt.rnote 70 | 71 | # Install Gaphor 72 | flatpak install -y flathub org.gaphor.Gaphor 73 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/org.gaphor.Gaphor -o ${HOME}/.local/share/flatpak/overrides/org.gaphor.Gaphor 74 | 75 | # Install Eyedropper 76 | flatpak install -y flathub com.github.finefindus.eyedropper 77 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.github.finefindus.eyedropper -o ${HOME}/.local/share/flatpak/overrides/com.github.finefindus.eyedropper 78 | 79 | # Install Authenticator 80 | flatpak install -y flathub com.belmoussaoui.Authenticator 81 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.belmoussaoui.Authenticator -o ${HOME}/.local/share/flatpak/overrides/com.belmoussaoui.Authenticator 82 | 83 | # Install Celluloid 84 | flatpak install -y flathub io.github.celluloid_player.Celluloid 85 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/io.github.celluloid_player.Celluloid -o ${HOME}/.local/share/flatpak/overrides/io.github.celluloid_player.Celluloid 86 | elif [[ "$XDG_CURRENT_DESKTOP" == *"KDE"* ]]; then 87 | # Install NeoChat 88 | flatpak install -y flathub com.github.tchx84.Flatseal 89 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/org.kde.neochat -o ${HOME}/.local/share/flatpak/overrides/org.kde.neochat 90 | fi 91 | 92 | # Install applications 93 | flatpak install -y flathub com.bitwarden.desktop 94 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.bitwarden.desktop -o ${HOME}/.local/share/flatpak/overrides/com.bitwarden.desktop 95 | 96 | flatpak install -y flathub org.keepassxc.KeePassXC 97 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/org.keepassxc.KeePassXC -o ${HOME}/.local/share/flatpak/overrides/org.keepassxc.KeePassXC 98 | 99 | flatpak install -y flathub com.spotify.Client 100 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.spotify.Client -o ${HOME}/.local/share/flatpak/overrides/com.spotify.Client 101 | 102 | flatpak install -y flathub org.gimp.GIMP 103 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/org.gimp.GIMP -o ${HOME}/.local/share/flatpak/overrides/org.gimp.GIMP 104 | 105 | flatpak install -y flathub com.brave.Browser 106 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.brave.Browser -o ${HOME}/.local/share/flatpak/overrides/com.brave.Browser 107 | 108 | flatpak install -y flathub com.discordapp.Discord 109 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.discordapp.Discord -o ${HOME}/.local/share/flatpak/overrides/com.discordapp.Discord 110 | 111 | flatpak install -y flathub md.obsidian.Obsidian 112 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/md.obsidian.Obsidian -o ${HOME}/.local/share/flatpak/overrides/md.obsidian.Obsidian 113 | 114 | # Install development applications 115 | flatpak install -y flathub com.usebruno.Bruno 116 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.usebruno.Bruno -o ${HOME}/.local/share/flatpak/overrides/com.usebruno.Bruno 117 | 118 | flatpak install -y flathub io.kinvolk.Headlamp 119 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/io.kinvolk.Headlamp -o ${HOME}/.local/share/flatpak/overrides/io.kinvolk.Headlamp 120 | 121 | ################################################ 122 | ##### GTK theming 123 | ################################################ 124 | 125 | # Install GTK themes 126 | if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then 127 | flatpak install -y org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark 128 | elif [[ "$XDG_CURRENT_DESKTOP" == *"KDE"* ]]; then 129 | flatpak install -y flathub org.gtk.Gtk3theme.Breeze org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark 130 | fi 131 | 132 | ################################################ 133 | ##### Steam 134 | ################################################ 135 | 136 | if [ ${GAMING} = "yes" ]; then 137 | if [ ! -e "/usr/bin/steam" ]; then 138 | # Create directory for Steam games 139 | mkdir -p $HOME/Games/Steam 140 | 141 | # Install Steam 142 | flatpak install -y flathub com.valvesoftware.Steam 143 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.valvesoftware.Steam -o ${HOME}/.local/share/flatpak/overrides/com.valvesoftware.Steam 144 | 145 | # Steam controllers udev rules 146 | sudo curl -sSL https://raw.githubusercontent.com/ValveSoftware/steam-devices/master/60-steam-input.rules -o /etc/udev/rules.d/60-steam-input.rules 147 | sudo curl -sSL https://raw.githubusercontent.com/ValveSoftware/steam-devices/master/60-steam-vr.rules -o /etc/udev/rules.d/60-steam-vr.rules 148 | 149 | # Configure MangoHud for Steam 150 | mkdir -p ${HOME}/.var/app/com.valvesoftware.Steam/config/MangoHud 151 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/mangohud/MangoHud.conf -o ${HOME}/.var/app/com.valvesoftware.Steam/config/MangoHud/MangoHud.conf 152 | 153 | if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then 154 | flatpak install -y flathub io.github.Foldex.AdwSteamGtk 155 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/io.github.Foldex.AdwSteamGtk -o ${HOME}/.local/share/flatpak/overrides/io.github.Foldex.AdwSteamGtk 156 | fi 157 | fi 158 | fi 159 | 160 | ################################################ 161 | ##### Heroic Games Launcher 162 | ################################################ 163 | 164 | if [ ${GAMING} = "yes" ]; then 165 | # Install Heroic Games Launcher 166 | flatpak install -y flathub com.heroicgameslauncher.hgl 167 | 168 | # Create directories for Heroic games and prefixes 169 | mkdir -p ${HOME}/Games/Heroic/Prefixes 170 | 171 | # Import Flatpak overrides 172 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.heroicgameslauncher.hgl -o ${HOME}/.local/share/flatpak/overrides/com.heroicgameslauncher.hgl 173 | 174 | # Configure MangoHud for Heroic 175 | mkdir -p ${HOME}/.var/app/com.heroicgameslauncher.hgl/config/MangoHud 176 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/mangohud/MangoHud.conf -o ${HOME}/.var/app/com.heroicgameslauncher.hgl/config/MangoHud/MangoHud.conf 177 | fi 178 | 179 | ################################################ 180 | ##### Bottles 181 | ################################################ 182 | 183 | if [ ${GAMING} = "yes" ]; then 184 | # Install Bottles 185 | flatpak install -y flathub com.usebottles.bottles 186 | 187 | # Create directories for Bottles 188 | mkdir -p ${HOME}/Games/Bottles 189 | 190 | # Import Flatpak overrides 191 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.usebottles.bottles -o ${HOME}/.local/share/flatpak/overrides/com.usebottles.bottles 192 | 193 | # Configure MangoHud for Bottles 194 | mkdir -p ${HOME}/.var/app/com.usebottles.bottles/config/MangoHud 195 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/mangohud/MangoHud.conf -o ${HOME}/.var/app/com.usebottles.bottles/config/MangoHud/MangoHud.conf 196 | fi 197 | 198 | ################################################ 199 | ##### Gaming utilities 200 | ################################################ 201 | 202 | # References: 203 | # https://wiki.archlinux.org/title/MangoHud 204 | 205 | if [ ${GAMING} = "yes" ]; then 206 | # Install MangoHud 207 | flatpak install -y flathub org.freedesktop.Platform.VulkanLayer.MangoHud//24.08 208 | 209 | # Install Gamescope 210 | flatpak install -y flathub org.freedesktop.Platform.VulkanLayer.gamescope//24.08 211 | 212 | # Install ProtonUp-Qt 213 | flatpak install -y flathub net.davidotek.pupgui2 214 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/net.davidotek.pupgui2 -o ${HOME}/.local/share/flatpak/overrides/net.davidotek.pupgui2 215 | 216 | # Install Protontricks 217 | flatpak install -y flathub com.github.Matoking.protontricks 218 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/com.github.Matoking.protontricks -o ${HOME}/.local/share/flatpak/overrides/com.github.Matoking.protontricks 219 | fi 220 | 221 | ################################################ 222 | ##### WiVRn 223 | ################################################ 224 | 225 | # References: 226 | # https://github.com/WiVRn/WiVRn 227 | 228 | if [ "$VR" = "yes" ]; then 229 | # Install WiVRn 230 | flatpak install -y flathub io.github.wivrn.wivrn 231 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/flatpak/io.github.wivrn.wivrn -o ${HOME}/.local/share/flatpak/overrides/io.github.wivrn.wivrn 232 | 233 | # Steam Flatpak integration 234 | mkdir -p ${HOME}/.var/app/com.valvesoftware.Steam/.config/openxr 235 | mkdir -p ${HOME}/.config/openxr/1 236 | ln -s ${HOME}/.config/openxr/1 ${HOME}/.var/app/com.valvesoftware.Steam/.config/openxr/1 237 | 238 | # Enable Avahi service 239 | sudo systemctl enable avahi-daemon.service 240 | 241 | # Allow mDNS through firewall (required by WiVRn) 242 | sudo firewall-cmd --zone=home --add-port=5353/udp --permanent 243 | 244 | # Allow Avahi through firewall (required by WiVRn) 245 | sudo firewall-cmd --zone=home --add-port=9757/tcp --permanent 246 | sudo firewall-cmd --zone=home --add-port=9757/udp --permanent 247 | fi 248 | 249 | ################################################ 250 | ##### ALVR 251 | ################################################ 252 | 253 | # References: 254 | # https://github.com/alvr-org/ALVR/wiki/Installing-ALVR-and-using-SteamVR-on-Linux-through-Flatpak 255 | 256 | if [ "$VR" = "yes" ]; then 257 | # Download ALVR 258 | curl https://github.com/alvr-org/ALVR/releases/latest/download/com.valvesoftware.Steam.Utility.alvr.flatpak -L -O 259 | 260 | # Install ALVR 261 | flatpak install -y --bundle com.valvesoftware.Steam.Utility.alvr.flatpak 262 | 263 | # Remove ALVR flatpak file 264 | rm -f com.valvesoftware.Steam.Utility.alvr.flatpak 265 | 266 | # Create ALVR dashboard alias 267 | echo 'alias alvr="flatpak run --command=alvr_launcher com.valvesoftware.Steam"' > ${HOME}/.zshrc.d/alvr 268 | 269 | # Create ALVR dashboard desktop entry 270 | mkdir -p ${HOME}/.local/share/icons/hicolor/256x256/apps 271 | curl -sSL https://raw.githubusercontent.com/alvr-org/ALVR/refs/heads/master/alvr/xtask/flatpak/alvr_icon.png \ 272 | -o ${HOME}/.local/share/icons/hicolor/256x256/apps/application-alvr-launcher.png 273 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/alvr/alvr-flatpak.desktop -o ${HOME}/.local/share/applications/com.valvesoftware.Steam.Utility.alvr.desktop 274 | 275 | # Allow ALVR through firewall 276 | sudo firewall-cmd --zone=home --add-port=9943/tcp --permanent 277 | sudo firewall-cmd --zone=home --add-port=9943/udp --permanent 278 | sudo firewall-cmd --zone=home --add-port=9944/tcp --permanent 279 | sudo firewall-cmd --zone=home --add-port=9944/udp --permanent 280 | fi -------------------------------------------------------------------------------- /gaming.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Utilities 5 | ################################################ 6 | 7 | if [ ${STEAM_NATIVE} = "yes" ]; then 8 | # Install Gamescope 9 | pacman -S --noconfirm gamescope 10 | 11 | # Install MangoHud 12 | pacman -S --noconfirm mangohud lib32-mangohud 13 | 14 | # Configure MangoHud 15 | mkdir -p /home/${NEW_USER}/.config/MangoHud 16 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/mangohud/MangoHud.conf -o /home/${NEW_USER}/.config/MangoHud/MangoHud.conf 17 | fi 18 | 19 | ################################################ 20 | ##### Steam 21 | ################################################ 22 | 23 | if [ ${STEAM_NATIVE} = "yes" ]; then 24 | # Install Steam 25 | pacman -S --noconfirm steam 26 | 27 | # Make sure correct driver is installed 28 | if pacman -Qs lib32-amdvlk > /dev/null; then 29 | pacman -S --noconfirm lib32-vulkan-radeon 30 | pacman -Rs --noconfirm lib32-amdvlk 31 | fi 32 | fi 33 | 34 | ################################################ 35 | ##### Sunshine (native - prebuilt) 36 | ################################################ 37 | 38 | # References: 39 | # https://github.com/LizardByte/Sunshine 40 | # https://docs.lizardbyte.dev/projects/sunshine/en/latest/ 41 | # https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/advanced_usage.html#port 42 | 43 | # Install sunshine 44 | sudo -u ${NEW_USER} paru -S --noconfirm sunshine-beta-bin 45 | 46 | # Enable sunshine service 47 | chown -R ${NEW_USER}:${NEW_USER} /home/${NEW_USER} 48 | sudo -u ${NEW_USER} systemctl --user enable sunshine 49 | 50 | # Import sunshine configurations 51 | mkdir -p /home/${NEW_USER}/.config/sunshine 52 | 53 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/sunshine.conf -o /home/${NEW_USER}/.config/sunshine/sunshine.conf 54 | 55 | if [ ${DESKTOP_ENVIRONMENT} = "gnome" ]; then 56 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/apps-gnome.json -o /home/${NEW_USER}/.config/sunshine/apps.json 57 | elif [ ${DESKTOP_ENVIRONMENT} = "plasma" ]; then 58 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/apps-plasma.json -o /home/${NEW_USER}/.config/sunshine/apps.json 59 | fi 60 | 61 | # Enable KMS display capture 62 | setcap cap_sys_admin+p $(readlink -f /usr/bin/sunshine) 63 | 64 | # Allow Sunshine through firewall 65 | firewall-offline-cmd --zone=home --add-port=47984/tcp 66 | firewall-offline-cmd --zone=home --add-port=47989/tcp 67 | firewall-offline-cmd --zone=home --add-port=48010/tcp 68 | firewall-offline-cmd --zone=home --add-port=47998/udp 69 | firewall-offline-cmd --zone=home --add-port=47999/udp 70 | firewall-offline-cmd --zone=home --add-port=48000/udp -------------------------------------------------------------------------------- /gnome.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | # References: 4 | # https://wiki.archlinux.org/title/GNOME 5 | # https://aur.archlinux.org/cgit/aur.git/tree/INSTALL.md?h=firefox-gnome-theme-git 6 | # https://wiki.archlinux.org/title/GDM 7 | # https://help.gnome.org/admin/system-admin-guide/stable/dconf-custom-defaults.html.en 8 | # https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration 9 | # https://archlinux.org/groups/x86_64/gnome/ 10 | 11 | ################################################ 12 | ##### Gnome 13 | ################################################ 14 | 15 | # Install Gnome core applications 16 | # https://archlinux.org/groups/x86_64/gnome/ 17 | # https://wiki.archlinux.org/title/GNOME/Keyring 18 | 19 | pacman -S --noconfirm \ 20 | baobab \ 21 | papers \ 22 | file-roller \ 23 | gnome-backgrounds \ 24 | gnome-calculator \ 25 | gnome-calendar \ 26 | gnome-color-manager \ 27 | gnome-control-center \ 28 | gnome-disk-utility \ 29 | gnome-font-viewer \ 30 | gnome-keyring \ 31 | gnome-logs \ 32 | decibels \ 33 | gnome-session \ 34 | gnome-settings-daemon \ 35 | gnome-shell \ 36 | gnome-shell-extensions \ 37 | gnome-system-monitor \ 38 | gnome-text-editor \ 39 | grilo-plugins \ 40 | gvfs \ 41 | gvfs-mtp \ 42 | gvfs-nfs \ 43 | loupe \ 44 | ptyxis \ 45 | nautilus \ 46 | snapshot \ 47 | sushi \ 48 | xdg-desktop-portal-gnome \ 49 | xdg-user-dirs-gtk 50 | 51 | # Additional Gnome/GTK packages 52 | pacman -S --noconfirm \ 53 | xdg-desktop-portal-gtk \ 54 | webp-pixbuf-loader \ 55 | seahorse \ 56 | gitg 57 | 58 | # Install and enable GDM 59 | pacman -S --noconfirm gdm 60 | systemctl enable gdm.service 61 | 62 | # Enable SSH wrapper 63 | sudo -u ${NEW_USER} systemctl --user enable gcr-ssh-agent.socket 64 | 65 | # Configure Gnome's default file associations (based on shared-mime-info-gnome) 66 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/gnome/gnome-mimeapps.list -o /usr/share/applications/gnome-mimeapps.list 67 | 68 | # Enable VRR 69 | sudo -u ${NEW_USER} gsettings set org.gnome.mutter experimental-features "['variable-refresh-rate']" 70 | 71 | ################################################ 72 | ##### Disable unneeded packages and services 73 | ################################################ 74 | 75 | # Disable ABRT service 76 | systemctl mask abrtd.service 77 | 78 | # Disable mobile broadband modem management service 79 | systemctl mask ModemManager.service 80 | 81 | # Disable PC/SC Smart Card service 82 | systemctl mask pcscd.service 83 | 84 | # Disable location lookup service 85 | systemctl mask geoclue.service 86 | 87 | # Disable speech dispatcher 88 | sed -i "s|^# DisableAutoSpawn|DisableAutoSpawn|g" /etc/speech-dispatcher/speechd.conf 89 | 90 | ################################################ 91 | ##### Gnome Shell extensions 92 | ################################################ 93 | 94 | # Create Gnome shell extensions folder 95 | mkdir -p /home/${NEW_USER}/.local/share/gnome-shell/extensions 96 | 97 | # Grand Theft Focus 98 | # https://extensions.gnome.org/extension/5410/grand-theft-focus 99 | curl -sSL https://extensions.gnome.org/extension-data/grand-theft-focuszalckos.github.com.v8.shell-extension.zip -o shell-extension.zip 100 | mkdir -p /home/${NEW_USER}/.local/share/gnome-shell/extensions/grand-theft-focus@zalckos.github.com 101 | unzip shell-extension.zip -d /home/${NEW_USER}/.local/share/gnome-shell/extensions/grand-theft-focus@zalckos.github.com 102 | rm -f shell-extension.zip 103 | 104 | # Legacy (GTK3) Theme Scheme Auto Switcher 105 | # https://extensions.gnome.org/extension/4998/legacy-gtk3-theme-scheme-auto-switcher/ 106 | curl -sSL https://extensions.gnome.org/extension-data/legacyschemeautoswitcherjoshimukul29.gmail.com.v10.shell-extension.zip -o shell-extension.zip 107 | mkdir -p /home/${NEW_USER}/.local/share/gnome-shell/extensions/legacyschemeautoswitcher@joshimukul29.gmail.com 108 | unzip shell-extension.zip -d /home/${NEW_USER}/.local/share/gnome-shell/extensions/legacyschemeautoswitcher@joshimukul29.gmail.com 109 | rm -f shell-extension.zip 110 | 111 | # AppIndicator and KStatusNotifierItem Support 112 | # https://extensions.gnome.org/extension/615/appindicator-support/ 113 | # https://src.fedoraproject.org/rpms/gnome-shell-extension-appindicator/blob/rawhide/f/gnome-shell-extension-appindicator.spec 114 | pacman -S --noconfirm \ 115 | libappindicator-gtk3 \ 116 | gnome-shell-extension-appindicator 117 | 118 | ################################################ 119 | ##### Themes and icons 120 | ################################################ 121 | 122 | # References: 123 | # https://github.com/lassekongo83/adw-gtk3 124 | # https://github.com/somepaulo/MoreWaita 125 | 126 | # Install adw-gtk3 127 | pacman -S --noconfirm adw-gtk-theme 128 | 129 | # Install MoreWaita icon theme 130 | sudo -u ${NEW_USER} paru -S --noconfirm morewaita-icon-theme 131 | 132 | ################################################ 133 | ##### Utilities 134 | ################################################ 135 | 136 | # Install gnome-randr 137 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/apps/gnome-randr.py -o /usr/local/bin/gnome-randr 138 | chmod +x /usr/local/bin/gnome-randr 139 | 140 | ################################################ 141 | ##### Gnome configurations 142 | ################################################ 143 | 144 | # Create user profile 145 | mkdir -p /etc/dconf/profile 146 | tee /etc/dconf/profile/user << EOF 147 | user-db:user 148 | system-db:local 149 | EOF 150 | 151 | # Import Gnome configurations 152 | mkdir -p /etc/dconf/db/local.d 153 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/gnome/01-custom -o /etc/dconf/db/local.d/01-custom 154 | 155 | # Laptop specific Gnome configurations 156 | if cat /sys/class/dmi/id/chassis_type | grep 10 > /dev/null; then 157 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/gnome/01-laptop -o /etc/dconf/db/local.d/01-laptop 158 | fi 159 | 160 | # Update Gnome system databases 161 | dconf update 162 | 163 | ################################################ 164 | ##### Autologin 165 | ################################################ 166 | 167 | # References: 168 | # https://wiki.archlinux.org/title/GDM#Automatic_login 169 | 170 | # Enable autologin 171 | if [ ${AUTOLOGIN} = "yes" ]; then 172 | tee /etc/gdm/custom.conf << EOF 173 | # Enable automatic login for user 174 | [daemon] 175 | AutomaticLogin=${NEW_USER} 176 | AutomaticLoginEnable=True 177 | EOF 178 | fi -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Logs 5 | ################################################ 6 | 7 | # Define the log file 8 | LOGFILE="install.log" 9 | 10 | # Start logging all output to the log file 11 | exec > >(tee -a "$LOGFILE") 2>&1 12 | 13 | # Log each command before executing it 14 | log_command() { 15 | echo "\$ $BASH_COMMAND" >> "$LOGFILE" 16 | } 17 | trap log_command DEBUG 18 | 19 | ################################################ 20 | ##### Set variables 21 | ################################################ 22 | 23 | read -p "RAID0 (yes / no): " RAID0 24 | export RAID0 25 | 26 | read -sp "LUKS password: " LUKS_PASSWORD 27 | export LUKS_PASSWORD 28 | 29 | read -p "Username: " NEW_USER 30 | export NEW_USER 31 | 32 | read -sp "User password: " NEW_USER_PASSWORD 33 | export NEW_USER_PASSWORD 34 | 35 | read -p "Hostname: " NEW_HOSTNAME 36 | export NEW_HOSTNAME 37 | 38 | read -p "Timezone (timedatectl list-timezones): " TIMEZONE 39 | export TIMEZONE 40 | 41 | read -p "Desktop environment (plasma / gnome): " DESKTOP_ENVIRONMENT 42 | export DESKTOP_ENVIRONMENT 43 | 44 | read -p "Steam native (yes / no): " STEAM_NATIVE 45 | export STEAM_NATIVE 46 | 47 | read -p "Sunshine native (yes / no): " SUNSHINE_NATIVE 48 | export SUNSHINE_NATIVE 49 | 50 | read -p "VR native - ALVR/Envision (yes / no): " VR_NATIVE 51 | export VR_NATIVE 52 | 53 | read -p "Autologin (yes / no): " AUTOLOGIN 54 | export AUTOLOGIN 55 | 56 | # CPU vendor 57 | if cat /proc/cpuinfo | grep "vendor" | grep "GenuineIntel" > /dev/null; then 58 | export CPU_MICROCODE="intel-ucode" 59 | elif cat /proc/cpuinfo | grep "vendor" | grep "AuthenticAMD" > /dev/null; then 60 | export CPU_MICROCODE="amd-ucode" 61 | export AMD_SCALING_DRIVER="amd_pstate=active" 62 | fi 63 | 64 | # GPU vendor 65 | if lspci | grep "VGA" | grep "Intel" > /dev/null; then 66 | export GPU_PACKAGES="vulkan-intel intel-media-driver intel-gpu-tools" 67 | export GPU_MKINITCPIO_MODULES="i915" 68 | export LIBVA_ENV_VAR="LIBVA_DRIVER_NAME=iHD" 69 | elif lspci | grep "VGA" | grep "AMD" > /dev/null; then 70 | export GPU_PACKAGES="vulkan-radeon libva-mesa-driver radeontop mesa-vdpau" 71 | export GPU_MKINITCPIO_MODULES="amdgpu" 72 | export LIBVA_ENV_VAR="LIBVA_DRIVER_NAME=radeonsi" 73 | fi 74 | 75 | ################################################ 76 | ##### Partitioning 77 | ################################################ 78 | 79 | # References: 80 | # https://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html 81 | # https://www.dwarmstrong.org/archlinux-install/ 82 | # https://wiki.archlinux.org/title/RAID#Installation 83 | 84 | if [ ${RAID0} = "no" ]; then 85 | # Read partition table 86 | partprobe /dev/nvme0n1 87 | 88 | # Delete old partition layout 89 | wipefs -af /dev/nvme0n1 90 | sgdisk --zap-all --clear /dev/nvme0n1 91 | 92 | # Read partition table 93 | partprobe /dev/nvme0n1 94 | 95 | # Partition disk and re-read partition table 96 | sgdisk -n 1:0:+1G -t 1:ef00 -c 1:EFI /dev/nvme0n1 97 | sgdisk -n 2:0:0 -t 2:8309 -c 2:LUKS /dev/nvme0n1 98 | 99 | # Read partition table 100 | partprobe /dev/nvme0n1 101 | elif [ ${RAID0} = "yes" ]; then 102 | # Install mdadm 103 | pacman -S --noconfirm mdadm 104 | 105 | # Read partition tables 106 | partprobe /dev/nvme0n1 107 | partprobe /dev/nvme1n1 108 | 109 | # Delete old partition layouts 110 | wipefs -af /dev/nvme0n1 111 | wipefs -af /dev/nvme1n1 112 | sgdisk --zap-all --clear /dev/nvme0n1 113 | sgdisk --zap-all --clear /dev/nvme1n1 114 | 115 | # Read partition tables 116 | partprobe /dev/nvme0n1 117 | partprobe /dev/nvme1n1 118 | 119 | # Erase old RAID configuration information 120 | mdadm --misc --zero-superblock /dev/nvme0n1 121 | mdadm --misc --zero-superblock /dev/nvme1n1 122 | 123 | # Partition disks 124 | sgdisk -n 1:0:+1G -t 1:ef00 -c 1:EFI /dev/nvme0n1 125 | sgdisk -n 2:0:0 -t 2:fd00 -c 2:RAID /dev/nvme0n1 126 | sgdisk -n 1:0:+1G -t 1:ef00 -c 1:EFIDUMMY /dev/nvme1n1 127 | sgdisk -n 2:0:0 -t 2:fd00 -c 2:RAID /dev/nvme1n1 128 | 129 | # Read partition tables 130 | partprobe /dev/nvme0n1 131 | partprobe /dev/nvme1n1 132 | 133 | # Build RAID array 134 | mdadm --create /dev/md/ArchArray --level=0 --metadata=1.2 --chunk=512 --raid-devices=2 --force /dev/nvme0n1p2 /dev/nvme1n1p2 135 | 136 | # Update mdadm configuration file 137 | mdadm --detail --scan >> /etc/mdadm.conf 138 | fi 139 | 140 | ################################################ 141 | ##### LUKS / System and boot partitions 142 | ################################################ 143 | 144 | # References: 145 | # https://github.com/tytso/e2fsprogs/blob/master/misc/mke2fs.conf.in 146 | # https://wiki.archlinux.org/title/RAID#Format_the_RAID_filesystem 147 | 148 | if [ ${RAID0} = "no" ]; then 149 | # Encrypt and open LUKS partition 150 | echo ${LUKS_PASSWORD} | cryptsetup --type luks2 --hash sha512 --use-random luksFormat /dev/disk/by-partlabel/LUKS 151 | echo ${LUKS_PASSWORD} | cryptsetup luksOpen /dev/disk/by-partlabel/LUKS system 152 | 153 | # Format partition to EXT4 154 | mkfs.ext4 -L system /dev/mapper/system 155 | 156 | # Mount root device 157 | mount -t ext4 LABEL=system /mnt 158 | 159 | # Format and mount EFI/boot partition 160 | mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI 161 | mount --mkdir /dev/nvme0n1p1 /mnt/boot 162 | elif [ ${RAID0} = "yes" ]; then 163 | # Mount RAID partition 164 | mdadm --assemble /dev/md/ArchArray /dev/nvme0n1p2 /dev/nvme1n1p2 165 | 166 | # Encrypt and open LUKS partition 167 | echo ${LUKS_PASSWORD} | cryptsetup --type luks2 --hash sha512 --use-random luksFormat /dev/md/ArchArray 168 | echo ${LUKS_PASSWORD} | cryptsetup luksOpen /dev/md/ArchArray system 169 | 170 | # Format partition to EXT4 171 | mkfs.ext4 -L system /dev/mapper/system 172 | 173 | # Mount root device 174 | mount -t ext4 LABEL=system /mnt 175 | 176 | # Format and mount EFI/boot partition 177 | mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI 178 | mount --mkdir /dev/nvme0n1p1 /mnt/boot 179 | fi 180 | 181 | ################################################ 182 | ##### Install system 183 | ################################################ 184 | 185 | # Import mirrorlist 186 | tee /etc/pacman.d/mirrorlist << 'EOF' 187 | Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch 188 | Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch 189 | EOF 190 | 191 | # Synchronize package databases 192 | pacman -Syy 193 | 194 | # Install system 195 | pacstrap /mnt base base-devel linux linux-lts linux-firmware e2fsprogs mdadm tpm2-tools tpm2-tss ${CPU_MICROCODE} 196 | 197 | # Generate filesystem tab 198 | genfstab -U /mnt >> /mnt/etc/fstab 199 | 200 | # Update mdadm configuration file 201 | if [ ${RAID0} = "yes" ]; then 202 | mdadm --detail --scan >> /mnt/etc/mdadm.conf 203 | fi 204 | 205 | # Configure system 206 | mkdir -p /mnt/install-arch 207 | cp ./*.sh /mnt/install-arch 208 | arch-chroot /mnt /bin/bash /install-arch/setup.sh 209 | rm -rf /mnt/install-arch 210 | umount -R /mnt -------------------------------------------------------------------------------- /plasma.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Plasma 5 | ################################################ 6 | 7 | # Plasma packages 8 | pacman -S --noconfirm \ 9 | bluedevil \ 10 | breeze \ 11 | breeze-gtk \ 12 | drkonqi \ 13 | flatpak-kcm \ 14 | kactivitymanagerd \ 15 | kde-cli-tools \ 16 | kde-gtk-config \ 17 | kdecoration \ 18 | kdeplasma-addons \ 19 | kgamma \ 20 | kglobalacceld \ 21 | kinfocenter \ 22 | kmenuedit \ 23 | kpipewire \ 24 | kscreen \ 25 | kscreenlocker \ 26 | ksshaskpass \ 27 | ksystemstats \ 28 | kwallet-pam \ 29 | kwayland \ 30 | kwayland-integration \ 31 | kwin \ 32 | kwrited \ 33 | layer-shell-qt \ 34 | libkscreen \ 35 | libksysguard \ 36 | libplasma \ 37 | milou \ 38 | ocean-sound-theme \ 39 | oxygen \ 40 | oxygen-sounds \ 41 | plasma-activities \ 42 | plasma-activities-stats \ 43 | plasma-browser-integration \ 44 | plasma-desktop \ 45 | plasma-disks \ 46 | plasma-firewall \ 47 | plasma-integration \ 48 | plasma-nm \ 49 | plasma-pa \ 50 | plasma-systemmonitor \ 51 | plasma-thunderbolt \ 52 | plasma-vault \ 53 | plasma-workspace \ 54 | plasma-workspace-wallpapers \ 55 | plasma5support \ 56 | polkit-kde-agent \ 57 | powerdevil \ 58 | print-manager \ 59 | qqc2-breeze-style \ 60 | systemsettings \ 61 | wacomtablet \ 62 | xdg-desktop-portal-kde 63 | 64 | # Non-Plasma packages (add-ons, extensions, ...) 65 | # https://community.kde.org/Distributions/Packaging_Recommendations#Non-Plasma_packages 66 | pacman -S --noconfirm \ 67 | baloo-widgets \ 68 | dolphin-plugins \ 69 | ffmpegthumbs \ 70 | kde-inotify-survey \ 71 | kdeconnect \ 72 | kdegraphics-thumbnailers \ 73 | kdenetwork-filesharing \ 74 | kimageformats \ 75 | kio-admin \ 76 | kio-extras \ 77 | kio-fuse \ 78 | phonon-qt6-vlc \ 79 | qt6-imageformats 80 | 81 | # 3rd-party packages 82 | # https://community.kde.org/Distributions/Packaging_Recommendations#3rd-party_packages 83 | pacman -S --noconfirm \ 84 | fprintd \ 85 | icoutils \ 86 | iio-sensor-proxy \ 87 | libappindicator-gtk3 \ 88 | qt6-imageformats \ 89 | switcheroo-control \ 90 | xdg-desktop-portal-gtk \ 91 | xsettingsd 92 | 93 | # KDE applications 94 | pacman -S --noconfirm \ 95 | ark \ 96 | dolphin \ 97 | filelight \ 98 | gwenview \ 99 | kate \ 100 | kcalc \ 101 | kcolorchooser \ 102 | kfind \ 103 | kompare \ 104 | konsole \ 105 | kwalletmanager \ 106 | okular \ 107 | partitionmanager \ 108 | plasma-systemmonitor \ 109 | spectacle \ 110 | keysmith 111 | 112 | # Extra Plasma packages 113 | pacman -S --noconfirm \ 114 | sshfs \ 115 | quota-tools \ 116 | kommit 117 | 118 | # Install VLC 119 | pacman -S --noconfirm vlc 120 | 121 | # Use KDE file picker in GTK applications 122 | tee -a /etc/environment << EOF 123 | 124 | # KDE file picker 125 | GDK_DEBUG=portals 126 | EOF 127 | 128 | # Disable baloo (file indexer) 129 | sudo -u ${NEW_USER} balooctl6 suspend 130 | sudo -u ${NEW_USER} balooctl6 disable 131 | sudo -u ${NEW_USER} balooctl6 purge 132 | 133 | # Allow KDE Connect through firewall 134 | firewall-offline-cmd --zone=home --add-service=kdeconnect 135 | 136 | ################################################ 137 | ##### SDDM 138 | ################################################ 139 | 140 | # Install SDDM 141 | pacman -S --noconfirm sddm sddm-kcm 142 | 143 | # Enable SDDM service 144 | systemctl enable sddm.service 145 | 146 | ################################################ 147 | ##### GTK theming 148 | ################################################ 149 | 150 | # Apply Breeze Dark theme to GTK applications 151 | mkdir -p /home/${NEW_USER}/.config/{gtk-3.0,gtk-4.0} 152 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/gtk/kde-gtk.css -o /home/${NEW_USER}/.config/gtk-3.0/gtk.css 153 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/gtk/kde-gtk.css -o /home/${NEW_USER}/.config/gtk-4.0/gtk.css 154 | 155 | # Select GTK theme 156 | mkdir -p /home/${NEW_USER}/.config/xsettingsd 157 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/xsettingsd/xsettingsd.conf -o /home/${NEW_USER}/.config/xsettingsd/xsettingsd.conf 158 | 159 | ################################################ 160 | ##### SSH 161 | ################################################ 162 | 163 | # Use the KDE Wallet to store ssh key passphrases 164 | # https://wiki.archlinux.org/title/KDE_Wallet#Using_the_KDE_Wallet_to_store_ssh_key_passphrases 165 | tee /home/${NEW_USER}/.config/environment.d/ssh_askpass.conf << EOF 166 | SSH_ASKPASS='/usr/bin/ksshaskpass' 167 | GIT_ASKPASS=ksshaskpass 168 | SSH_ASKPASS=ksshaskpass 169 | SSH_ASKPASS_REQUIRE=prefer 170 | EOF 171 | 172 | ################################################ 173 | ##### Autologin 174 | ################################################ 175 | 176 | # References: 177 | # https://wiki.archlinux.org/title/SDDM#Autologin 178 | 179 | # Enable autologin 180 | if [ ${AUTOLOGIN} = "yes" ]; then 181 | tee /etc/sddm.conf.d/autologin.conf << EOF 182 | [Autologin] 183 | User=${NEW_USER} 184 | Session=plasmawayland 185 | EOF 186 | fi 187 | 188 | ################################################ 189 | ##### Plasma shortcuts 190 | ################################################ 191 | 192 | # Konsole shortcut 193 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group org.kde.konsole.desktop --key "_launch" "Meta+Return,none,Konsole" 194 | 195 | # Toggle overview shortcut 196 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Overview" "Meta+Tab,Meta+W,Toggle Overview" 197 | 198 | # Close windows shortcut 199 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window Close" "Meta+Shift+Q,none,Close Window" 200 | 201 | # Disable task manager entry activation 202 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 1" "none,none,Activate Task Manager Entry 1" 203 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 2" "none,none,Activate Task Manager Entry 2" 204 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 3" "none,none,Activate Task Manager Entry 3" 205 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 4" "none,none,Activate Task Manager Entry 4" 206 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 5" "none,none,Activate Task Manager Entry 5" 207 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 6" "none,none,Activate Task Manager Entry 6" 208 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 7" "none,none,Activate Task Manager Entry 7" 209 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 8" "none,none,Activate Task Manager Entry 8" 210 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 9" "none,none,Activate Task Manager Entry 9" 211 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group plasmashell --key "activate task manager entry 10" "none,none,Activate Task Manager Entry 10" 212 | 213 | # Go to virtual desktop 214 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 1" "Meta+1,none,Switch to Desktop 1" 215 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 2" "Meta+2,none,Switch to Desktop 2" 216 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 3" "Meta+3,none,Switch to Desktop 3" 217 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 4" "Meta+4,none,Switch to Desktop 4" 218 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 5" "Meta+5,none,Switch to Desktop 5" 219 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 6" "Meta+6,none,Switch to Desktop 6" 220 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 7" "Meta+7,none,Switch to Desktop 7" 221 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 8" "Meta+8,none,Switch to Desktop 8" 222 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 9" "Meta+9,none,Switch to Desktop 9" 223 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Switch to Desktop 10" "Meta+0,none,Switch to Desktop 10" 224 | 225 | # Move window to virtual desktop 226 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 1" "Meta+\!,none,Window to Desktop 1" 227 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 2" "Meta+@,none,Window to Desktop 2" 228 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 3" "Meta+#,none,Window to Desktop 3" 229 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 4" "Meta+$,none,Window to Desktop 4" 230 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 5" "Meta+%,none,Window to Desktop 5" 231 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 6" "Meta+^,none,Window to Desktop 6" 232 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 7" "Meta+&,none,Window to Desktop 7" 233 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 8" "Meta+*,none,Window to Desktop 8" 234 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 9" "Meta+(,none,Window to Desktop 9" 235 | sudo -u ${NEW_USER} kwriteconfig6 --file kglobalshortcutsrc --group kwin --key "Window to Desktop 10" "Meta+),none,Window to Desktop 10" 236 | 237 | ################################################ 238 | ##### Plasma UI / UX changes 239 | ################################################ 240 | 241 | # Set SDDM theme 242 | kwriteconfig6 --file /etc/sddm.conf.d/kde_settings.conf --group Theme --key "Current" "breeze" 243 | 244 | # Set Plasma theme 245 | sudo -u ${NEW_USER} kwriteconfig6 --file kdeglobals --group KDE --key LookAndFeelPackage "org.kde.breezedark.desktop" 246 | 247 | # Enable 2 desktops 248 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group Desktops --key Name_2 "Desktop 2" 249 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group Desktops --key Number "2" 250 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group Desktops --key Rows "1" 251 | 252 | # Change window decorations 253 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group org.kde.kdecoration2 --key ButtonsOnLeft "" 254 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group org.kde.kdecoration2 --key ButtonsOnRight "IAX" 255 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group org.kde.kdecoration2 --key ShowToolTips --type bool false 256 | 257 | # Disable app launch feedback 258 | sudo -u ${NEW_USER} kwriteconfig6 --file klaunchrc --group BusyCursorSettings --key "Bouncing" --type bool false 259 | sudo -u ${NEW_USER} kwriteconfig6 --file klaunchrc --group FeedbackStyle --key "BusyCursor" --type bool false 260 | 261 | # Disable cursor shake 262 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrc --group Plugins --key "shakecursorEnabled" --type bool false 263 | 264 | # Disable windows outline 265 | sudo -u ${NEW_USER} kwriteconfig6 --file breezerc --group "Common" --key OutlineIntensity "OutlineOff" 266 | 267 | ################################################ 268 | ##### Titlebar color schemes 269 | ################################################ 270 | 271 | # References: 272 | # https://github.com/eritbh/kde-application-titlebar-themes 273 | 274 | # Create directory for custom color schemes 275 | mkdir -p /home/${NEW_USER}/.local/share/color-schemes 276 | 277 | # VSCode 278 | curl -O --output-dir /home/${NEW_USER}/.local/share/color-schemes https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/colors/VSCodeModernDark.colors 279 | 280 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key clientmachine "localhost" 281 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key decocolor "VSCodeModernDark" 282 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key Description "Application settings for Code" 283 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key decocolorrule "2" 284 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key wmclass "code Code" 285 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key wmclasscomplete "true" 286 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6" --key wmclassmatch "1" 287 | 288 | # Discord 289 | curl -O --output-dir /home/${NEW_USER}/.local/share/color-schemes https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/colors/DiscordOnyx.colors 290 | 291 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key Description "Application settings for discord" 292 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key clientmachine "localhost" 293 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key decocolor "DiscordOnyx" 294 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key decocolorrule "2" 295 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key wmclass "discord" 296 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "2100c0f9-f5ae-410a-ab1c-892232f95c06" --key wmclassmatch "1" 297 | 298 | # Heroic 299 | curl -O --output-dir /home/${NEW_USER}/.local/share/color-schemes https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/colors/HeroicGamesLauncher.colors 300 | 301 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key Description "Application settings for heroic" 302 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key clientmachine "localhost" 303 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key decocolor "HeroicGamesLauncher" 304 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key decocolorrule "2" 305 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key wmclass "heroic" 306 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "474e9587-e3c9-4d3b-adb8-81126272ced3" --key wmclassmatch "1" 307 | 308 | # Obsidian 309 | curl -O --output-dir /home/${NEW_USER}/.local/share/color-schemes https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/colors/ObsidianDark.colors 310 | 311 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key Description "Application settings for obsidian" 312 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key clientmachine "localhost" 313 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key decocolor "ObsidianDark" 314 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key decocolorrule "2" 315 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key wmclass "obsidian" 316 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "eaf84238-f041-4f87-b04b-0ba58bcddff3" --key wmclassmatch "1" 317 | 318 | # Spotify 319 | curl -O --output-dir /home/${NEW_USER}/.local/share/color-schemes https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/plasma/colors/Spotify.colors 320 | 321 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key Description "Application settings for Spotify" 322 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key clientmachine "localhost" 323 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key decocolor "Spotify" 324 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key decocolorrule "2" 325 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key wmclass "spotify Spotify" 326 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key wmclasscomplete "true" 327 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" --key wmclassmatch "1" 328 | 329 | # General 330 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "General" --key count "5" 331 | sudo -u ${NEW_USER} kwriteconfig6 --file kwinrulesrc --group "General" --key rules "474e9587-e3c9-4d3b-adb8-81126272ced3,eaf84238-f041-4f87-b04b-0ba58bcddff3,2100c0f9-f5ae-410a-ab1c-892232f95c06,0fcd2e39-42a2-4e82-a8b0-ee01dbe06bd6,f251c05a-63f7-4d9c-a7c8-9bfb6728acb4" -------------------------------------------------------------------------------- /steam.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### 32-bit support 5 | ################################################ 6 | 7 | # Enable multilib repository 8 | sed -i '/#\[multilib\]/{N;s/#\[multilib\]\n#Include = \/etc\/pacman.d\/mirrorlist/\[multilib\]\nInclude = \/etc\/pacman.d\/mirrorlist/}' /etc/pacman.conf 9 | 10 | # Refresh package databases 11 | pacman -Sy 12 | 13 | # Install 32-bit packages 14 | pacman -S --noconfirm lib32-mesa lib32-vulkan-icd-loader lib32-vulkan-mesa-layers 15 | 16 | if lspci | grep "VGA" | grep "Intel" > /dev/null; then 17 | pacman -S --noconfirm lib32-vulkan-intel 18 | elif lspci | grep "VGA" | grep "AMD" > /dev/null; then 19 | pacman -S --noconfirm lib32-vulkan-radeon lib32-libva 20 | fi 21 | 22 | ################################################ 23 | ##### Utilities 24 | ################################################ 25 | 26 | # Install Gamescope 27 | pacman -S --noconfirm gamescope 28 | 29 | # Install MangoHud 30 | pacman -S --noconfirm mangohud lib32-mangohud 31 | 32 | # Configure MangoHud 33 | mkdir -p /home/${NEW_USER}/.config/MangoHud 34 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/mangohud/MangoHud.conf -o /home/${NEW_USER}/.config/MangoHud/MangoHud.conf 35 | 36 | ################################################ 37 | ##### Steam 38 | ################################################ 39 | 40 | # Install Steam 41 | pacman -S --noconfirm steam 42 | 43 | # Make sure correct driver is installed 44 | if pacman -Qs lib32-amdvlk > /dev/null; then 45 | pacman -S --noconfirm lib32-vulkan-radeon 46 | pacman -Rs --noconfirm lib32-amdvlk 47 | fi 48 | 49 | # Create directory for Steam games 50 | mkdir -p /home/${NEW_USER}/Games/Steam -------------------------------------------------------------------------------- /sunshine.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Sunshine (native - prebuilt) 5 | ################################################ 6 | 7 | # References: 8 | # https://github.com/LizardByte/Sunshine 9 | # https://docs.lizardbyte.dev/projects/sunshine/en/latest/ 10 | # https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/advanced_usage.html#port 11 | 12 | # Install sunshine 13 | sudo -u ${NEW_USER} paru -S --noconfirm sunshine-beta-bin 14 | 15 | # Enable sunshine service 16 | chown -R ${NEW_USER}:${NEW_USER} /home/${NEW_USER} 17 | sudo -u ${NEW_USER} systemctl --user enable sunshine 18 | 19 | # Import sunshine configurations 20 | mkdir -p /home/${NEW_USER}/.config/sunshine 21 | 22 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/sunshine.conf -o /home/${NEW_USER}/.config/sunshine/sunshine.conf 23 | 24 | if [ ${DESKTOP_ENVIRONMENT} = "gnome" ]; then 25 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/apps-gnome.json -o /home/${NEW_USER}/.config/sunshine/apps.json 26 | elif [ ${DESKTOP_ENVIRONMENT} = "plasma" ]; then 27 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sunshine/apps-plasma.json -o /home/${NEW_USER}/.config/sunshine/apps.json 28 | fi 29 | 30 | # Enable KMS display capture 31 | setcap cap_sys_admin+p /usr/bin/sunshine 32 | 33 | # Allow Sunshine through firewall 34 | firewall-offline-cmd --zone=home --add-port=47984/tcp 35 | firewall-offline-cmd --zone=home --add-port=47989/tcp 36 | firewall-offline-cmd --zone=home --add-port=48010/tcp 37 | firewall-offline-cmd --zone=home --add-port=47998/udp 38 | firewall-offline-cmd --zone=home --add-port=47999/udp 39 | firewall-offline-cmd --zone=home --add-port=48000/udp 40 | 41 | # Sunshine pacman hook 42 | tee /etc/pacman.d/hooks/95-sunshine.hook << 'EOF' 43 | [Trigger] 44 | Type = Package 45 | Operation = Upgrade 46 | Target = sunshine-beta-bin 47 | 48 | [Action] 49 | Description = Re-enabling Sunshine's KMS display capture 50 | When = PostTransaction 51 | Exec = /usr/bin/setcap cap_sys_admin+p /usr/bin/sunshine 52 | EOF -------------------------------------------------------------------------------- /sway.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Sway 5 | ################################################ 6 | 7 | # Install Sway 8 | # https://wiki.archlinux.org/title/sway 9 | pacman -S --noconfirm \ 10 | sway \ 11 | swaylock \ 12 | swayidle \ 13 | swaybg 14 | 15 | # Import Sway configs 16 | # https://github.com/swaywm/sway/wiki#configuration 17 | mkdir -p /home/${NEW_USER}/.config/sway 18 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/appearance -o /home/${NEW_USER}/.config/sway/appearance 19 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/applications -o /home/${NEW_USER}/.config/sway/applications 20 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/bar -o /home/${NEW_USER}/.config/sway/bar 21 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/config -o /home/${NEW_USER}/.config/sway/config 22 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/idle -o /home/${NEW_USER}/.config/sway/idle 23 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/input -o /home/${NEW_USER}/.config/sway/input 24 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/key_bindings -o /home/${NEW_USER}/.config/sway/key_bindings 25 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/output -o /home/${NEW_USER}/.config/sway/output 26 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/startup -o /home/${NEW_USER}/.config/sway/startup 27 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/sway/variables -o /home/${NEW_USER}/.config/sway/variables 28 | 29 | ################################################ 30 | ##### Thunar (file manager) 31 | ################################################ 32 | 33 | # References: 34 | # https://wiki.archlinux.org/title/thunar 35 | 36 | # Install thunar 37 | pacman -S --noconfirm thunar 38 | 39 | # Install Thunar Archive Plugin and achiver 40 | pacman -S --noconfirm \ 41 | thunar-archive-plugin \ 42 | xarchiver 43 | 44 | # Install Thunar Volume Manager and GVFS 45 | pacman -S --noconfirm \ 46 | thunar-volman \ 47 | gvfs \ 48 | gvfs-mtp 49 | 50 | # Install Tumbler (thumbnails) 51 | pacman -S --noconfirm tumbler ffmpegthumbnailer 52 | 53 | # Disable GVFS network mounts 54 | # https://wiki.archlinux.org/title/thunar#Solving_problem_with_slow_cold_start 55 | sed -i "s|^AutoMount=true|AutoMount=false|g" /usr/share/gvfs/mounts/network.mount 56 | 57 | ################################################ 58 | ##### Common desktop applications 59 | ################################################ 60 | 61 | # Install ristretto (picture viewer) 62 | pacman -S --noconfirm ristretto 63 | 64 | ################################################ 65 | ##### tuigreet (login manager) 66 | ################################################ 67 | 68 | # References: 69 | # https://github.com/apognu/tuigreet 70 | 71 | # Install tuigreet 72 | pacman -S --noconfirm greetd-tuigreet 73 | 74 | # Enable greetd service 75 | systemctl enable greetd.service 76 | 77 | # Import tuigreet configs 78 | # https://git.sr.ht/~kennylevinsen/greetd/tree/master/item/config.toml 79 | # https://github.com/apognu/tuigreet 80 | mkdir -p /etc/greetd 81 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/greetd-tuigreet/config.toml -o /etc/greetd/config.toml 82 | 83 | ################################################ 84 | ##### Foot (terminal) 85 | ################################################ 86 | 87 | # References: 88 | # https://codeberg.org/dnkl/foot#index 89 | # https://wiki.archlinux.org/title/Foot 90 | 91 | # Install foot 92 | pacman -S --noconfirm foot 93 | 94 | # Import foot configs 95 | mkdir -p /home/${NEW_USER}/.config/foot 96 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/foot/foot.ini -o /home/${NEW_USER}/.config/foot/foot.ini 97 | 98 | ################################################ 99 | ##### Yambar (status bar) 100 | ################################################ 101 | 102 | # References: 103 | # https://codeberg.org/dnkl/yambar 104 | # https://codeberg.org/dnkl/yambar/src/branch/master/examples/configurations 105 | 106 | # Install Yambar 107 | sudo -u ${NEW_USER} paru -S --noconfirm yambar 108 | 109 | # Import Yambar configs and styles 110 | mkdir -p /home/${NEW_USER}/.config/yambar 111 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/yambar/config.yaml -o /home/${NEW_USER}/.config/yambar/config.yaml 112 | 113 | ################################################ 114 | ##### Fuzzel (application launcher) 115 | ################################################ 116 | 117 | # References: 118 | # https://codeberg.org/dnkl/fuzzel 119 | # https://codeberg.org/dnkl/fuzzel/src/branch/master/doc/fuzzel.ini.5.scd 120 | 121 | # Install fuzzel 122 | pacman -S --noconfirm fuzzel 123 | 124 | # Import fuzzel configs 125 | mkdir -p /home/${NEW_USER}/.config/fuzzel 126 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/fuzzel/fuzzel.ini -o /home/${NEW_USER}/.config/fuzzel/fuzzel.ini 127 | 128 | ################################################ 129 | ##### Power profile cycle 130 | ################################################ 131 | 132 | # Install 'Power profile cycle' 133 | # https://gitlab.com/lassegs/powerprofilecycle 134 | curl https://raw.githubusercontent.com/gjpin/arch-linux/main/apps/powerprofilecycle.sh -o /usr/local/bin/powerprofilecycle.sh 135 | chmod +x /usr/local/bin/powerprofilecycle.sh 136 | 137 | ################################################ 138 | ##### ssh-agent 139 | ################################################ 140 | 141 | # Start ssh-agent with systemd user 142 | # https://wiki.archlinux.org/title/SSH_keys#Start_ssh-agent_with_systemd_user 143 | chown -R ${NEW_USER}:${NEW_USER} /home/${NEW_USER} 144 | sudo -u ${NEW_USER} systemctl --user enable ssh-agent.service 145 | 146 | tee /home/${NEW_USER}/.config/environment.d/90-SSH_AUTH_SOCK << 'EOF' 147 | SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket 148 | EOF 149 | -------------------------------------------------------------------------------- /vr.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ################################################ 4 | ##### Custom repo 5 | ################################################ 6 | 7 | # References: 8 | # https://github.com/gjpin/arch-linux-repo 9 | 10 | # Add custom repo with VR packages 11 | tee -a /etc/pacman.conf << EOF 12 | 13 | [gjpin] 14 | SigLevel = Optional TrustAll 15 | Server = https://gjpin.github.io/arch-linux-repo/repo/ 16 | EOF 17 | 18 | # Refresh package databases 19 | pacman -Sy 20 | 21 | ################################################ 22 | ##### Utilities 23 | ################################################ 24 | 25 | # References: 26 | # https://monado.freedesktop.org/valve-index-setup.html#5-setting-up-opencomposite 27 | # https://aur.archlinux.org/packages/opencomposite-git 28 | 29 | # Install OpenXR and OpenVR 30 | pacman -S --noconfirm openxr openvr 31 | 32 | # Install Monado, OpenComposite and xrizer 33 | sudo -u ${NEW_USER} paru -S --noconfirm \ 34 | gjpin/xr-hardware-git \ 35 | gjpin/monado-git \ 36 | gjpin/opencomposite-git \ 37 | gjpin/xrizer-git 38 | 39 | # Install WlxOverlay-S 40 | sudo -u ${NEW_USER} paru -S --noconfirm gjpin/wlx-overlay-s-git 41 | 42 | # Setup OpenVR to use OpenComposite 43 | mkdir -p /home/${NEW_USER}/.config/openvr 44 | 45 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/openvr/openvrpaths.vrpath.opencomposite | envsubst > /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.opencomposite 46 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/openvr/openvrpaths.vrpath.steam | envsubst > /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.steam 47 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/openvr/openvrpaths.vrpath.xrizer | envsubst > /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.xrizer 48 | 49 | chmod 444 /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.opencomposite 50 | chmod 444 /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.steam 51 | chmod 444 /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.xrizer 52 | 53 | ln -sf /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath.opencomposite /home/${NEW_USER}/.config/openvr/openvrpaths.vrpath 54 | 55 | ################################################ 56 | ##### WiVRn 57 | ################################################ 58 | 59 | # References: 60 | # https://github.com/WiVRn/WiVRn 61 | # https://github.com/WiVRn/WiVRn/blob/master/docs/steamvr.md 62 | # https://github.com/WiVRn/WiVRn/blob/master/docs/configuration.md 63 | # /usr/share/openxr/1/openxr_wivrn.json 64 | 65 | # Install WiVRn 66 | sudo -u ${NEW_USER} paru -S --noconfirm \ 67 | gjpin/wivrn-server \ 68 | gjpin/wivrn-dashboard 69 | 70 | # Configure WiVRn 71 | mkdir -p /home/${NEW_USER}/.config/wivrn 72 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/wivrn/config.json -o /home/${NEW_USER}/.config/wivrn/config.json 73 | 74 | # Enable Avahi service 75 | systemctl enable avahi-daemon.service 76 | 77 | # Allow mDNS through firewall 78 | firewall-offline-cmd --zone=home --add-port=5353/udp 79 | 80 | # Allow Avahi through firewall 81 | firewall-offline-cmd --zone=home --add-port=9757/tcp 82 | firewall-offline-cmd --zone=home --add-port=9757/udp 83 | 84 | ################################################ 85 | ##### ALVR 86 | ################################################ 87 | 88 | # References: 89 | # https://github.com/alvr-org/ALVR/blob/master/alvr/xtask/flatpak/com.valvesoftware.Steam.Utility.alvr.desktop 90 | # https://github.com/alvr-org/ALVR/wiki/Installation-guide#portable-targz 91 | # https://github.com/alvr-org/ALVR/tree/master/alvr/xtask/firewall 92 | # https://github.com/alvr-org/ALVR/wiki/Flatpak 93 | # https://github.com/alvr-org/ALVR/wiki/Installation-guide 94 | 95 | # Ensure alvr firewalld service does not exist due to conflict 96 | rm -f /usr/lib/firewalld/services/alvr.xml 97 | 98 | # Install ALVR 99 | sudo -u ${NEW_USER} paru -S --noconfirm gjpin/alvr-git 100 | 101 | # Configure ALVR 102 | mkdir -p /home/${NEW_USER}/.config/alvr 103 | curl -sSL https://raw.githubusercontent.com/gjpin/arch-linux/main/configs/alvr/session.json -o /home/${NEW_USER}/.config/alvr/session.json 104 | 105 | # Allow ALVR through firewall 106 | firewall-offline-cmd --zone=home --add-port=9943/tcp 107 | firewall-offline-cmd --zone=home --add-port=9943/udp 108 | firewall-offline-cmd --zone=home --add-port=9944/tcp 109 | firewall-offline-cmd --zone=home --add-port=9944/udp --------------------------------------------------------------------------------