docs/docs/environment.md

3115 lines
71 KiB
Markdown

# Development Environment
**Effective 14 July 2024**
This page documents Naomi's local development environment. The information here is provided to allow contributors to mirror the environment as closely as possible, ensuring the smoothest developer experience.
## 1. System Information
Naomi's local environment runs on the Arch Linux kernel.
### 1.1. `hyfetch`
This is the current diagnostic report from `hyfetch`.
<details>
<summary>Expand Information</summary>
```bash
naomi@technomancer
-` ------------------
.o+` OS: Arch Linux x86_64
`ooo/ Host: MS-7B86 4.0
`+oooo: Kernel: 6.10.3-arch1-2
`+oooooo: Uptime: 1 hour, 36 mins
-+oooooo+: Packages: 2 (npm), 1147 (pacman), 33 (steam)
`/:-:++oooo+: Shell: zsh 5.9
`/++++/+++++++: Resolution: 1920x1080, 3840x2160, 1920x1080, 1024x768
`/++++++++++++++: WM: Hyprland
`/+++ooooooooooooo/` Theme: Adwaita [GTK2/3]
./ooosssso++osssssso+` Icons: Adwaita [GTK2/3]
.oossssso-````/ossssss+` Cursor: Adwaita [GTK3]
-osssssso. :ssssssso. Terminal: alacritty
:osssssss/ osssso+++. CPU: AMD Ryzen 5 3600X (12) @ 3.8GHz
/ossssssss/ +ssssooo/- GPU: NVIDIA GeForce GTX 1070 Ti
`/ossssso+/:- -:/+osssso+- Memory: 4.53 GiB / 31.29 GiB (14%)
`+sso+:-` `.-/+oso: Network: 1 Gbps
`++:. `-/+/ BIOS: American Megatrends Inc. 5.14 (11/07/2019)
.` `/
```
</details>
### 1.2. Steam
This is the current system report from Steam.
<details>
<summary>Expand Information</summary>
```txt
Computer Information:
Manufacturer: Micro-Star International Co., Ltd
Model: B450-A PRO MAX (MS-7B86)
Form Factor: Desktop
No Touch Input Detected
Processor Information:
CPU Vendor: AuthenticAMD
CPU Brand: AMD Ryzen 5 3600X 6-Core Processor
CPU Family: 0x17
CPU Model: 0x71
CPU Stepping: 0x0
CPU Type: 0x0
Speed: 4408 MHz
12 logical processors
6 physical processors
Hyper-threading: Supported
FCMOV: Supported
SSE2: Supported
SSE3: Supported
SSSE3: Supported
SSE4a: Supported
SSE41: Supported
SSE42: Supported
AES: Supported
AVX: Supported
AVX2: Supported
AVX512F: Unsupported
AVX512PF: Unsupported
AVX512ER: Unsupported
AVX512CD: Unsupported
AVX512VNNI: Unsupported
SHA: Supported
CMPXCHG16B: Supported
LAHF/SAHF: Supported
PrefetchW: Unsupported
Operating System Version:
"Arch Linux" (64 bit)
Kernel Name: Linux
Kernel Version: 6.10.3-arch1-2
X Server Vendor: The X.Org Foundation
X Server Release: 12401002
X Window Manager: Hyprland :D
Steam Runtime Version: steam-runtime_0.20240806.97925
Video Card:
Driver: NVIDIA Corporation NVIDIA GeForce GTX 1070 Ti/PCIe/SSE2
Driver Version: 4.6.0 NVIDIA 555.58.02
OpenGL Version: 4.6
Desktop Color Depth: 24 bits per pixel
Monitor Refresh Rate: 59 Hz
VendorID: 0x10de
DeviceID: 0x1b82
Revision Not Detected
Number of Monitors: 3
Number of Logical Video Cards: 1
Primary Display Resolution: 1920 x 1080
Desktop Resolution: 5760 x 1080
Primary Display Size: 20.47" x 12.60" (24.02" diag), 52.0cm x 32.0cm (61.0cm diag)
Primary VRAM: 8192 MB
Sound card:
Audio device: Nvidia GPU 83 HDMI/DP
Memory:
RAM: 32045 Mb
VR Hardware:
VR Headset: None detected
Miscellaneous:
UI Language: English
LANG: en_GB.UTF-8
Total Hard Disk Space Available: 420968 MB
Largest Free Hard Disk Block: 118179 MB
Storage:
Number of SSDs: 1
SSD sizes: 500G
Number of HDDs: 0
Number of removable drives: 0
```
</details>
## 2. Packages
Naomi uses the following packages.
### 2.1. Foreign Packages
These packages come from unofficial repositories, such as the AUR. This list is generated with `yay -Qm`.
<details>
<summary>Expand List</summary>
```txt
1password-cli 2.30.0-1
7kaa-debug 2.15.6-1
aws-cli-v2-bin 2:2.17.27-1
brogue-ce-debug 1.14-1
cbonsai 1.3.1-3
cbonsai-debug 1.3.1-3
cytopia-git-debug r2844.58709a23-1
doas-debug 6.3p6-1
dosbox-x-debug 2024.07.01-1
dreamweb 1.1-1
electron25-bin 25.9.8-2
electron25-bin-debug 25.9.8-2
flyctl 0.2.111-1
flyctl-debug 0.2.111-1
gargoyle 2023.1-2
gargoyle-debug 2023.1-2
gearhead-debug 1.310-1
gearhead2-debug 0.701-1
google-chat-linux 5.29.23_1-4
gwenview-no-purpose 24.05.2-1
gwenview-no-purpose-debug 24.05.2-1
hyperrogue 13.0-1
hyperrogue-debug 13.0-1
infra-arcana-debug 22.1.0-2
insomnium 0.2.3_a-8
libajantv2-debug 1:17.0.1-1
libelectron 1.0.25-1
libelectron-debug 1.0.25-1
lrexlib-pcre5.1 2.9.0-2
lrexlib-pcre5.1-debug 2.9.0-2
lua-yajl 2.0-2
lua-yajl-debug 2.0-2
lua51-lcf 5.1-3
lua51-sql-sqlite 2.3.0-4
lua51-sql-sqlite-debug 2.3.0-4
luazip5.1 1.2.7-1
luazip5.1-debug 1.2.7-1
mongodb-tools-bin 100.10.0-1
mongodb-tools-bin-debug 100.10.0-1
mongosh-bin 2.2.15-1
mongosh-bin-debug 2.2.15-1
mudlet-debug 4.18.3-1
noto-fonts-emoji-flags 20200120-1
obs-studio-liberty 30.2.2-1
obs-studio-liberty-debug 30.2.2-1
openstarruler-git-debug r95.c5e3cbb-1
openxcom-debug 1.0-9
otf-compagnon 1.000-1
play.it-git 2.29.1.r1.g03ba243f-1
proton-mail-bin 1.0.6-1
proton-mail-bin-debug 1.0.6-1
roam 122.0.1.beta001-1
spicetify-cli-debug 2.36.15-1
sulis 1.0.0-1
sulis-debug 1.0.0-1
swaylock-effects-debug 1.7.0.0-4
twitter 1.0.5-1
vscodium-bin 1.92.1.24225-1
vscodium-bin-debug 1.92.1.24225-1
wofi-emoji 1.2-3
yay-debug 12.3.5-1
```
</details>
### 2.2. Explicit Installations
These are all of the packages Naomi has specifically installed. This list is generated with `yay -Qe`.
<details>
<summary>Expand List</summary>
```txt
1password 8.10.40-31
1password-cli 2.30.0-1
act 0.2.65-1
activitywatch-bin 0.13.1-1
alacarte 1:3.52.0-2
alacritty 0.13.2-2
amd-ucode 20240809.59460076-1
appimagelauncher 2.2.0-8
aws-cli-v2-bin 2:2.17.27-1
base 3-2
base-devel 1-1
brave-bin 1:1.68.141-1
cbonsai 1.3.1-3
chaotic-keyring 20230616-1
chaotic-mirrorlist 20240306-1
cheese 44.1-2
cloc 2.02-1
discord 0.0.64-1
dkms 3.0.12-1
docker 1:27.1.1-1
doctl 1.111.0-1
dolphin 24.05.2-1
dosbox-x 2024.07.01-1
dotnet-sdk 8.0.7.sdk107-1
downgrade 11.3.0-1
dreamweb 1.1-1
dunst 1.11.0-1
efibootmgr 18-3
emacs 29.4-1
eza 0.19.0-1
firefox 129.0.1-2
flyctl 0.2.111-1
freetube 0.21.3-1
gameconqueror 0.17-8
gargoyle 2023.1-2
gimp 2.10.38-1
git 2.46.0-1
github-cli 2.54.0-1
google-chat-linux 5.29.23_1-4
grim 1.4.1-2
gst-plugin-pipewire 1:1.2.2-1
gwenview-no-purpose 24.05.2-1
hexchat 2.16.2-2
htop 3.3.0-3
hyfetch 1.4.11-3
hyperrogue 13.0-1
hyprland 0.41.2-3
hyprlock 0.4.1-1
hyprpaper 0.7.0-2
hyprshot 1.3.0-1
icoutils 0.32.3-3
innoextract 1.9-10
insomnium 0.2.3_a-8
iwd 2.19-1
kitty 0.35.2-1
libpulse 17.0-3
libreoffice-fresh 24.2.5-2
linux 6.10.3.arch1-2
linux-firmware 20240703.e94a2a3b-1
linux-headers 6.10.3.arch1-2
lrzip 0.651-3
man-db 2.12.1-1
mesen2-git r3045.10f72135-1
mongodb-tools-bin 100.10.0-1
mongosh-bin 2.2.15-1
nano 8.1-1
network-manager-applet 1.36.0-1
networkmanager 1.48.8-1
nodejs-nativefier 52.0.0-1
notepadnext 0.8-1
noto-fonts 1:24.8.1-1
noto-fonts-cjk 20230817-2
noto-fonts-emoji 1:2.042-1
noto-fonts-emoji-flags 20200120-1
npm-check-updates 16.14.20-1
nvidia-dkms 555.58.02-1
nvm 0.40.0-1
obs-studio-liberty 30.2.2-1
opendoas 6.8.2-3
otf-compagnon 1.000-1
otf-font-awesome 6.6.0-1
p7zip 1:17.05-2
pavucontrol 1:6.1-1
pipewire 1:1.2.2-1
pipewire-alsa 1:1.2.2-1
pipewire-jack 1:1.2.2-1
pipewire-pulse 1:1.2.2-1
pnpm 9.7.0-1
pokemon-colorscripts-git r112.0483c85b-2.1
polkit-gnome 0.105-11
polkit-kde-agent 6.1.4-1
proton-mail-bin 1.0.6-1
python-virtualenv 20.26.2-1
qt5-wayland 5.15.14+kde+r59-1
qt6-wayland 6.7.2-4
roam 122.0.1.beta001-1
sddm 0.21.0-4
slack-desktop 4.39.88-1
slurp 1.5.0-1
smartmontools 7.4-2
spicetify-cli 2.37.1-1
spotify 1:1.2.42.290-1
steam 1.0.0.79-2
sulis 1.0.0-1
swappy 1.5.1-2
swaylock-effects 1.7.0.0-4
tailscale 1.70.0-1
thefuck 3.32-9
trayscale 0.13.1-1
ttf-font-awesome 6.6.0-1
ttf-jetbrains-mono-nerd 3.2.1-2
ttf-joypixels 8.0.0-2
ttf-symbola 14.00-1
ttf-twemoji 15.1.0-1
twitter 1.0.5-1
unrar 1:7.0.9-1
v4l2loopback-dkms 0.13.2-1
vi 1:070224-6
vim 9.1.0672-1
vscodium-bin 1.92.1.24225-1
waybar 0.10.4-2
wev 1.0.0-13
wget 1.24.5-3
wine 9.14-1
wireless_tools 30.pre9-4
wireplumber 0.5.5-1
wlogout 1.2.2-0
wofi 1.4.1-1
wofi-emoji 1.2-3
xdg-desktop-portal-hyprland 1.3.3-2
xdg-utils 1.2.1-1
xorg-server 21.1.13-1
xorg-xhost 1.0.9-2
xorg-xinit 1.4.2-2
yay 12.3.5-1
yay-debug 12.3.5-1
zoom 6.1.6-1
zsh 5.9-5
```
</details>
### 2.3. Pinned Packages
These packages have updates ignored, due to incompatibility issues. This list is generated with `grep "^IgnorePkg" /etc/pacman.conf`.
```
IgnorePkg =
```
### 2.4. All Packages
This is a complete list of all packages on the machine. This list is generated with `yay -Q`.
> [!WARNING]
> This list is mega chonky.
<details>
<summary>Expand List</summary>
```txt
0ad-data a26-2
1password 8.10.40-31
1password-cli 2.30.0-1
7kaa-debug 2.15.6-1
a52dec 0.8.0-2
aalib 1.4rc5-18
abseil-cpp 20240722.0-1
acl 2.3.2-1
act 0.2.65-1
activitywatch-bin 0.13.1-1
adobe-source-code-pro-fonts 2.042u+1.062i+1.026vf-2
adwaita-cursors 46.2-1
adwaita-icon-theme 46.2-1
adwaita-icon-theme-legacy 46.2-1
alacarte 1:3.52.0-2
alacritty 0.13.2-2
alsa-card-profiles 1:1.2.2-1
alsa-lib 1.2.12-1
alsa-plugins 1:1.2.12-3
alsa-topology-conf 1.2.5.1-4
alsa-ucm-conf 1.2.12-1
amd-ucode 20240809.59460076-1
aom 3.9.1-1
appimagelauncher 2.2.0-8
appstream 1.0.3-1
aquamarine 0.3.1-1
archlinux-keyring 20240709-1
argon2 20190702-6
aribb24 1.0.3-4
at-spi2-core 2.52.0-1
atkmm 2.28.4-1
attica 6.4.0-1
attr 2.5.2-1
audit 4.0.2-1
autoconf 2.72-1
automake 1.17-1
avahi 1:0.8+r194+g3f79789-2
aws-cli-v2-bin 2:2.17.27-1
ayatana-ido 0.10.3-1
babl 0.1.108-1
baloo 6.4.0-1
baloo-widgets 24.05.2-1
base 3-2
base-devel 1-1
bash 5.2.032-1
bc 1.07.1-5
binutils 2.43+r4+g7999dae6961-1
bison 3.8.2-6
blas 3.12.0-5
bluez-libs 5.77-1
boost 1.83.0-9
boost-libs 1.83.0-9
box2d 2.4.2-1
brave-bin 1:1.68.141-1
breeze-icons 6.4.0-1
bridge-utils 1.7.1-2
brogue-ce-debug 1.14-1
brotli 1.1.0-2
bubblewrap 0.9.0-1
bzip2 1.0.8-6
c-ares 1.33.0-1
ca-certificates 20240618-1
ca-certificates-mozilla 3.103-1
ca-certificates-utils 20240618-1
cairo 1.18.0-2
cairomm 1.14.5-1
cairomm-1.16 1.18.0-1
cantarell-fonts 1:0.303.1-2
cataclysm-dda 0.G-2
cbonsai 1.3.1-3
cbonsai-debug 1.3.1-3
cdparanoia 10.2-9
cfitsio 1:4.4.1-1
chaotic-keyring 20230616-1
chaotic-mirrorlist 20240306-1
cheese 44.1-2
chromaprint 1.5.1-8
cifs-utils 7.0-4
cjson 1.7.18-1
cloc 2.02-1
clucene 2.3.3.4-15
clutter 1.26.4-2
clutter-gst 3.0.27-4
clutter-gtk 1.8.4-4
cogl 1.22.8-2
containerd 1.7.20-1
convertlit 1.8-12
coreutils 9.5-1
crawl-data 0.31.0-3
cryptsetup 2.7.4-1
curl 8.9.1-2
cytopia-git-debug r2844.58709a23-1
dav1d 1.4.3-1
db5.3 5.3.28-5
dbus 1.14.10-2
dbus-broker 36-4
dbus-broker-units 36-4
dbus-glib 0.112-4
dconf 0.40.0-3
debugedit 5.0-6
default-cursors 2-2
desktop-file-utils 0.27-1
device-mapper 2.03.25-2
diffutils 3.10-1
discord 0.0.64-1
dkms 3.0.12-1
doas-debug 6.3p6-1
docker 1:27.1.1-1
doctl 1.111.0-1
dolphin 24.05.2-1
dos2unix 7.5.2-2
dosbox-x 2024.07.01-1
dosbox-x-debug 2024.07.01-1
dotnet-host 8.0.7.sdk107-1
dotnet-runtime 8.0.7.sdk107-1
dotnet-runtime-6.0 6.0.32.sdk132-1
dotnet-sdk 8.0.7.sdk107-1
dotnet-targeting-pack 8.0.7.sdk107-1
double-conversion 3.3.0-2
downgrade 11.3.0-1
dreamweb 1.1-1
duktape 2.7.0-7
dunst 1.11.0-1
e2fsprogs 1.47.1-4
ebook-tools 0.2.2-8
efibootmgr 18-3
efivar 39-1
egl-wayland 3:1.1.13.1-1
eglexternalplatform 1.1-3
electron25-bin 25.9.8-2
electron25-bin-debug 25.9.8-2
electron29 1:29.4.5-1
electron31 31.3.1-1
ell 0.67-1
emacs 29.4-1
enet 1.3.18-1
exiv2 0.28.3-1
expat 2.6.2-1
eza 0.19.0-1
faac 1.30-5
faad2 2.11.1-1
fakeroot 1.35-1
feh 3.10.3-1
ffmpeg 2:7.0.1-2
ffmpeg4.4 4.4.4-6
fftw 3.3.10-7
file 5.45-1
filesystem 2024.04.07-1
findutils 4.10.0-1
firefox 129.0.1-2
flac 1.4.3-2
flare-engine 1.14-1.3
flex 2.6.4-5
fluidsynth 2.3.6-1
flyctl 0.2.111-1
flyctl-debug 0.2.111-1
fmt 10.2.0-1
fontconfig 2:2.15.0-2
freeglut 3.6.0-1
freetube 0.21.3-1
freetype2 2.13.2-2
frei0r-plugins 2.3.3-2
fribidi 1.0.15-1
frotz-ncurses 2.54-1
fuse-common 3.16.2-1
fuse2 2.9.9-5
fuse3 3.16.2-1
fzf 0.54.3-1
gameconqueror 0.17-8
gargoyle 2023.1-2
gargoyle-debug 2023.1-2
gawk 5.3.0-1
gc 8.2.6-1
gcc 14.2.1+r32+geccf707e5ce-1
gcc-libs 14.2.1+r32+geccf707e5ce-1
gcr-4 4.3.0-1
gd 2.3.3-8
gdbm 1.24-1
gdk-pixbuf2 2.42.12-1
gearhead-debug 1.310-1
gearhead2-debug 0.701-1
gegl 0.4.48-4
geoclue 2.7.1-3
gettext 0.22.5-1
giflib 5.2.2-1
gimp 2.10.38-1
git 2.46.0-1
git-lfs 3.5.1-1
github-cli 2.54.0-1
glew 2.2.0-7
glib-networking 1:2.80.0-3
glib2 2.80.4-1
glibc 2.40+r16+gaa533d58ff-2
glibmm 2.66.7-1
glibmm-2.68 2.80.0-1
gloox 1.0.27-1
glslang 14.2.0-1
glu 9.0.3-2
gmp 6.3.0-2
gnome-desktop 1:44.0-1
gnome-desktop-common 1:44.0-1
gnome-menus 3.36.0-3
gnome-video-effects 1:0.6.0-2
gnu-free-fonts 20120503-8
gnupg 2.4.5-4
gnutls 3.8.6-1
go 2:1.23.0-1
gobject-introspection 1.80.1-3
gobject-introspection-runtime 1.80.1-3
google-chat-linux 5.29.23_1-4
gperftools 2.15-1
gpgme 1.23.2-6
gpm 1.20.7.r38.ge82d1a6-6
graphene 1.10.8-1
graphite 1:1.3.14-4
grep 3.11-1
grim 1.4.1-2
groff 1.23.0-6
gsettings-desktop-schemas 46.1-2
gsettings-system-schemas 46.1-2
gsfonts 20200910-4
gsm 1.0.22-2
gssdp 1.6.3-1
gst-plugin-pipewire 1:1.2.2-1
gst-plugins-bad 1.24.6-1
gst-plugins-bad-libs 1.24.6-1
gst-plugins-base 1.24.6-1
gst-plugins-base-libs 1.24.6-1
gst-plugins-good 1.24.6-1
gstreamer 1.24.6-1
gtest 1.15.2-1
gtk-layer-shell 0.8.2-1
gtk-update-icon-cache 1:4.14.4-2
gtk2 2.24.33-4
gtk3 1:3.24.43-1
gtk4 1:4.14.4-2
gtkmm-4.0 4.14.0-1
gtkmm3 3.24.9-1
guile 3.0.10-1
gulp 4.0.2-5
gupnp 1:1.6.6-1
gupnp-igd 1.6.0-1
gvfs 1.54.2-1
gwenview-no-purpose 24.05.2-1
gwenview-no-purpose-debug 24.05.2-1
gzip 1.13-4
harfbuzz 9.0.0-1
harfbuzz-icu 9.0.0-1
hexchat 2.16.2-2
hicolor-icon-theme 0.18-1
hidapi 0.14.0-3
highway 1.2.0-1
htop 3.3.0-3
http-parser 2.9.4-2
hunspell 1.7.2-2
hwdata 0.385-1
hyfetch 1.4.11-3
hyperrogue 13.0-1
hyperrogue-debug 13.0-1
hyphen 2.8.8-6
hyprcursor 0.1.9-1
hyprland 0.41.2-3
hyprlang 0.5.2-1
hyprlock 0.4.1-1
hyprpaper 0.7.0-2
hyprshot 1.3.0-1
hyprutils 0.2.0-1
hyprwayland-scanner 0.4.0-1
iana-etc 20240612-1
icoutils 0.32.3-3
icu 75.1-1
imagemagick 7.1.1.36-1
imath 3.1.11-2
imlib2 1.12.3-1
infra-arcana-debug 22.1.0-2
innoextract 1.9-10
insomnium 0.2.3_a-8
intltool 0.51.0-6
iproute2 6.10.0-2
iptables 1:1.8.10-2
iputils 20240117-1
iso-codes 4.16.0-1
iwd 2.19-1
jansson 2.14-4
jasper 4.2.4-1
java-environment-common 3-5
java-runtime-common 3-5
jbigkit 2.1-8
jdk21-openjdk 21.0.4.u7-1
jq 1.7.1-2
json-c 0.17-2
json-glib 1.8.0-2
jsoncpp 1.9.5-3
karchive 6.4.0-1
kauth 6.4.0-1
kbd 2.6.4-1
kbookmarks 6.4.0-1
kcmutils 6.4.0-1
kcodecs 6.4.0-1
kcolorpicker 0.3.1-4
kcolorscheme 6.4.0-1
kcompletion 6.4.0-1
kconfig 6.4.0-1
kconfigwidgets 6.4.0-1
kcoreaddons 6.4.0-1
kcrash 6.4.0-1
kdbusaddons 6.4.0-1
kdnssd 6.4.0-1
kdsoap-qt6 2.2.0-1
kdsoap-ws-discovery-client 0.4.0-1
keyutils 1.6.3-3
kfilemetadata 6.4.0-1
kglobalaccel 6.4.0-1
kguiaddons 6.4.0-1
ki18n 6.4.0-1
kiconthemes 6.4.0-1
kidletime 6.4.0-1
kimageannotator 0.7.1-3
kio 6.4.1-1
kio-extras 24.05.2-1
kirigami 6.4.0-2
kitemmodels 6.4.0-1
kitemviews 6.4.0-1
kitty 0.35.2-1
kitty-shell-integration 0.35.2-1
kitty-terminfo 0.35.2-1
kjobwidgets 6.4.0-1
kmod 32-1
knewstuff 6.4.0-1
knotifications 6.4.0-1
kpackage 6.4.0-1
kparts 6.4.0-1
krb5 1.21.3-1
kservice 6.4.0-1
ktextwidgets 6.4.0-1
kuserfeedback 6.4.0-1
kwallet 6.4.0-1
kwidgetsaddons 6.4.1-1
kwindowsystem 6.4.0-1
kxmlgui 6.4.0-1
l-smash 2.14.5-4
lame 3.100-5
lapack 3.12.0-5
lcms2 2.16-1
ldb 2:2.9.1-2
lensfun 1:0.3.4-4
less 1:661-1
lib32-acl 2.3.2-1
lib32-alsa-lib 1.2.12-1
lib32-alsa-plugins 1.2.12-1
lib32-brotli 1.1.0-1
lib32-bzip2 1.0.8-3
lib32-curl 8.9.1-1
lib32-dbus 1.14.10-2
lib32-e2fsprogs 1.47.1-1
lib32-expat 2.6.2-1
lib32-fontconfig 2:2.15.0-1
lib32-freetype2 2.13.2-1
lib32-gcc-libs 14.2.1+r32+geccf707e5ce-1
lib32-gettext 0.22.5-1
lib32-glib2 2.80.4-1
lib32-glibc 2.40+r16+gaa533d58ff-2
lib32-harfbuzz 9.0.0-1
lib32-icu 75.1-1
lib32-keyutils 1.6.3-2
lib32-krb5 1.21.3-1
lib32-libcap 2.70-1
lib32-libdrm 2.4.122-1
lib32-libelf 0.191-1
lib32-libffi 3.4.6-1
lib32-libgcrypt 1.11.0-1
lib32-libglvnd 1.7.0-1
lib32-libgpg-error 1.50-1
lib32-libidn2 2.3.7-1
lib32-libldap 2.6.8-1
lib32-libnghttp2 1.62.1-1
lib32-libnghttp3 1.4.0-1
lib32-libnl 3.10.0-1
lib32-libnsl 2.0.1-1
lib32-libpcap 1.10.4-1
lib32-libpciaccess 0.18.1-1
lib32-libpng 1.6.43-1
lib32-libpsl 0.21.5-1
lib32-libssh2 1.11.0-1
lib32-libtasn1 4.19.0-2
lib32-libtirpc 1.3.5-1
lib32-libunistring 1.2-1
lib32-libunwind 1.8.1-1
lib32-libx11 1.8.10-1
lib32-libxau 1.0.11-1
lib32-libxcb 1.17.0-1
lib32-libxcrypt 4.4.36-2
lib32-libxcrypt-compat 4.4.36-2
lib32-libxcursor 1.2.2-1
lib32-libxdmcp 1.1.5-1
lib32-libxext 1.3.6-1
lib32-libxfixes 6.0.1-1
lib32-libxi 1.8.1-1
lib32-libxkbcommon 1.7.0-2
lib32-libxml2 2.13.3-1
lib32-libxrandr 1.5.4-1
lib32-libxrender 0.9.11-1
lib32-libxshmfence 1.3.2-1
lib32-libxss 1.2.4-1
lib32-libxxf86vm 1.1.5-1
lib32-llvm-libs 18.1.8-1
lib32-lm_sensors 1:3.6.0.r41.g31d1f125-2
lib32-mesa 1:24.1.5-1
lib32-ncurses 6.5-1
lib32-nspr 4.35-3
lib32-nss 3.103-1
lib32-nvidia-utils 555.58.02-1
lib32-openssl 1:3.3.1-1
lib32-p11-kit 0.25.5-1
lib32-pam 1.6.1-1
lib32-pcre2 10.44-1
lib32-sqlite 3.46.0-1
lib32-systemd 256.4-1
lib32-util-linux 2.40.2-1
lib32-vulkan-icd-loader 1.3.279-1
lib32-wayland 1.23.0-1
lib32-xz 5.6.2-1
lib32-zlib 1.3.1-1
lib32-zstd 1.5.6-1
libabw 0.1.3-4
libaccounts-glib 1.27-2
libadwaita 1:1.5.3-1
libajantv2-debug 1:17.0.1-1
libao 1.2.2-6
libappimage 1.0.4.5-6
libappindicator-gtk3 12.10.0.r298-4
libarchive 3.7.4-1
libass 0.17.3-1
libassuan 3.0.0-1
libasyncns 1:0.8+r3+g68cd5af-3
libatasmart 0.19-6
libatomic_ops 7.8.2-1
libavc1394 0.5.4-6
libavif 1.1.1-1
libavtp 0.2.0-3
libayatana-appindicator 0.5.93-1
libayatana-indicator 0.9.4-1
libb2 0.98.1-3
libblockdev 3.1.1-2
libblockdev-crypto 3.1.1-2
libblockdev-fs 3.1.1-2
libblockdev-loop 3.1.1-2
libblockdev-mdraid 3.1.1-2
libblockdev-nvme 3.1.1-2
libblockdev-part 3.1.1-2
libblockdev-swap 3.1.1-2
libbluray 1.3.4-1
libbpf 1.4.3-1
libbs2b 3.1.0-9
libbsd 0.12.2-2
libbytesize 2.8-3
libcaca 0.99.beta20-4
libcamera 0.3.1-2
libcamera-ipa 0.3.1-2
libcanberra 1:0.30+r2+gc0620e4-4
libcap 2.70-1
libcap-ng 0.8.5-2
libcdio 2.1.0-4
libcdio-paranoia 10.2+2.0.2-1
libcdr 0.1.7-8
libcheese 44.1-2
libcloudproviders 0.3.6-1
libcmis 0.6.2-1
libcolord 1.4.7-2
libcups 2:2.4.10-1
libcurl-gnutls 8.9.1-2
libdaemon 0.14-6
libdatrie 0.2.13-4
libdbusmenu-glib 16.04.0.r498-2
libdbusmenu-gtk3 16.04.0.r498-2
libdc1394 2.2.7-1
libdca 0.0.7-2
libde265 1.0.15-2
libdeflate 1.21-1
libdisplay-info 0.2.0-1
libdovi 3.3.1-1
libdrm 2.4.122-1
libdv 1.0.0-11
libdvbpsi 1:1.3.3-3
libdvdnav 6.1.1-2
libdvdread 6.1.3-2
libe-book 0.1.3-16
libebml 1.4.5-1
libedit 20240517_3.1-1
libei 1.3.0-1
libelectron 1.0.25-1
libelectron-debug 1.0.25-1
libelf 0.191-4
libepoxy 1.5.10-3
libepubgen 0.1.1-5
libetonyek 0.1.10-4
libev 4.33-3
libevdev 1.13.2-1
libevent 2.1.12-4
libexif 0.6.24-3
libexttextcat 3.4.7-1
libfdk-aac 2.0.3-1
libffi 3.4.6-1
libfontenc 1.1.8-1
libfreeaptx 0.1.1-2
libfreehand 0.1.2-5
libgcrypt 1.11.0-2
libgdiplus 5.6.1-4
libgexiv2 0.14.3-1
libgirepository 1.80.1-3
libgit2 1:1.8.1-1
libglvnd 1.7.0-1
libgme 0.6.3-5
libgpg-error 1.50-1
libgudev 238-1
libheif 1.18.2-1
libibus 1.5.30-3
libice 1.1.1-3
libidn 1.42-1
libidn2 2.3.7-1
libiec61883 1.2.0-8
libimobiledevice 1.3.0-13
libimobiledevice-glue 1.3.0-1
libinih 58-1
libinput 1.26.1-1
libinstpatch 1.1.6-3
libisl 0.26-2
libixion 0.19.0-2
libjpeg-turbo 3.0.3-1
libjxl 0.10.3-1
libkdcraw 24.05.2-1
libkexiv2 24.05.2-1
libksba 1.6.7-1
liblangtag 0.6.7-1
liblc3 1.1.1-1
libldac 2.0.2.3-2
libldap 2.6.8-1
libliftoff 0.5.0-1
liblqr 0.4.2-4
liblrdf 0.6.1-5
libltc 1.3.2-2
libmad 0.15.1b-10
libmatroska 1.7.1-2
libmd 1.1.0-2
libmfx 23.2.2-3
libmicrodns 0.2.0-2
libmikmod 3.3.11.1-7
libmm-glib 1.22.0-1
libmng 2.0.3-4
libmnl 1.0.5-2
libmodplug 0.8.9.0-6
libmpc 1.3.1-2
libmpcdec 1:0.1+r475-6
libmpdclient 2.22-1
libmpeg2 0.5.1-10
libmspack 1:1.11-1
libmspub 0.1.4-16
libmtp 1.1.21-2
libmwaw 0.3.22-3
libmypaint 1.6.1-2
libmysofa 1.3.2-1
libndp 1.9-1
libnet 2:1.3-1
libnetfilter_conntrack 1.0.9-2
libnewt 0.52.24-2
libnfnetlink 1.0.2-2
libnftnl 1.2.7-1
libnghttp2 1.62.1-1
libnghttp3 1.4.0-1
libngtcp2 1.6.0-1
libnice 0.1.22-1
libnl 3.10.0-1
libnm 1.48.8-1
libnma 1.10.6-3
libnma-common 1.10.6-3
libnoise 1.0.0-7
libnotify 0.8.3-1
libnsl 2.0.1-1
libnumbertext 1.0.11-2
libnvme 1.10-1
libodfgen 0.1.8-3
libogg 1.3.5-2
libomxil-bellagio 0.9.3-5
libopenmpt 0.7.9-1
liborcus 0.19.2-2
libotf 0.9.16-5
libp11-kit 0.25.5-1
libpagemaker 0.0.4-4
libpcap 1.10.4-1
libpciaccess 0.18.1-2
libpgm 5.3.128-3
libpipeline 1.5.7-2
libpipewire 1:1.2.2-1
libplacebo 7.349.0-1
libplist 2.6.0-1
libpng 1.6.43-1
libproxy 0.5.8-1
libpsl 0.21.5-2
libpulse 17.0-3
libqxp 0.0.2-12
libraqm 0.10.1-2
libraw 0.21.2-1
libraw1394 2.1.2-4
libreoffice-fresh 24.2.5-2
librevenge 0.0.5-3
librist 0.2.10-3
librsvg 2:2.58.2-1
librsync 1:2.3.4-2
libsamplerate 0.2.2-3
libsasl 2.1.28-4
libscanmem 0.17-8
libseccomp 2.5.5-3
libsecret 0.21.4-1
libshout 1:2.4.6-3
libsigc++ 2.12.1-1
libsigc++-3.0 3.6.0-1
libslirp 4.8.0-1
libsm 1.2.4-2
libsndfile 1.2.2-2
libsodium 1.0.20-1
libsoup3 3.4.4-1
libsoxr 0.1.3-4
libspeechd 0.11.5-2
libspiro 1:20221101-3
libsrtp 1:2.6.0-1
libssh 0.11.0-1
libssh2 1.11.0-1
libstaroffice 0.0.7-3
libstemmer 2.2.0-2
libsysprof-capture 46.0-4
libtar 1.2.20-7
libtasn1 4.19.0-2
libteam 1.32-2
libthai 0.1.29-3
libtheora 1.1.1-6
libtiff 4.6.0-5
libtirpc 1.3.5-1
libtommath 1.3.0-1
libtool 2.5.1-2
libunibreak 6.1-1
libunistring 1.2-1
libunwind 1.8.1-3
libupnp 1.14.19-3
libusb 1.0.27-1
libusbmuxd 2.1.0-1
libuv 1.48.0-2
libva 2.22.0-1
libvdpau 1.5-3
libverto 0.3.2-5
libvisio 0.1.7-11
libvorbis 1.3.7-3
libvpl 2.12.0-1
libvpx 1.14.1-1
libwacom 2.12.2-1
libwbclient 4.20.4-1
libwebp 1.4.0-1
libwireplumber 0.5.5-1
libwmf 0.2.13-2
libwpd 0.10.3-5
libwps 0.4.14-2
libx11 1.8.10-1
libxau 1.0.11-3
libxaw 1.0.16-1
libxcb 1.17.0-1
libxcomposite 0.4.6-2
libxcrypt 4.4.36-2
libxcrypt-compat 4.4.36-2
libxcursor 1.2.2-1
libxcvt 0.1.2-2
libxdamage 1.1.6-2
libxdmcp 1.1.5-1
libxext 1.3.6-1
libxfixes 6.0.1-2
libxfont2 2.0.7-1
libxft 2.3.8-2
libxi 1.8.1-2
libxinerama 1.1.5-2
libxkbcommon 1.7.0-2
libxkbcommon-x11 1.7.0-2
libxkbfile 1.1.3-1
libxml2 2.13.3-1
libxmlb 0.3.19-1
libxmu 1.2.1-1
libxpm 3.5.17-2
libxrandr 1.5.4-1
libxrender 0.9.11-2
libxshmfence 1.3.2-2
libxslt 1.1.42-1
libxss 1.2.4-2
libxt 1.3.0-2
libxtst 1.2.5-1
libxv 1.0.12-2
libxxf86vm 1.1.5-2
libyaml 0.2.5-3
libyuv r2426+464c51a0-1
libzip 1.10.1-2
libzmf 0.0.2-16
licenses 20240728-1
lilv 0.24.24-2
linux 6.10.3.arch1-2
linux-api-headers 6.10-1
linux-firmware 20240703.e94a2a3b-1
linux-firmware-whence 20240703.e94a2a3b-1
linux-headers 6.10.3.arch1-2
llvm-libs 18.1.8-4
lm_sensors 1:3.6.0.r41.g31d1f125-3
lmdb 0.9.32-1
lpsolve 5.5.2.11-3
lrexlib-pcre5.1 2.9.0-2
lrexlib-pcre5.1-debug 2.9.0-2
lrzip 0.651-3
lsb-release 2.0.r53.a86f885-2
lsof 4.99.3-2
lua 5.4.7-1
lua-yajl 2.0-2
lua-yajl-debug 2.0-2
lua51 5.1.5-12
lua51-filesystem 1.8.0-4
lua51-lcf 5.1-3
lua51-luautf8 0.1.5-3
lua51-sql-sqlite 2.3.0-4
lua51-sql-sqlite-debug 2.3.0-4
luajit 2.1.1720049189-1
luarocks 3.11.1-1
luazip5.1 1.2.7-1
luazip5.1-debug 1.2.7-1
lv2 1.18.10-1
lz4 1:1.10.0-2
lzo 2.10-5
m17n-db 1.8.5-1
m17n-lib 1.8.4-3
m4 1.4.19-3
mailcap 2.1.54-2
make 4.4.1-2
man-db 2.12.1-1
mbedtls 3.6.0-1
mbedtls2 2.28.8-3
md4c 0.5.2-1
mdadm 4.3-2
media-player-info 24-4
mesa 1:24.1.5-1
mesen2-git r3045.10f72135-1
miniupnpc 2.2.8-1
minizip 1:1.3.1-2
mjpegtools 2.2.1-2
mkinitcpio 39.2-2
mkinitcpio-busybox 1.36.1-1
mobile-broadband-provider-info 20240407-1
mongodb-tools-bin 100.10.0-1
mongodb-tools-bin-debug 100.10.0-1
mongosh-bin 2.2.15-1
mongosh-bin-debug 2.2.15-1
mono 6.12.0.206-1
mono-msbuild 16.10.1.xamarinxplat.2021.05.26.14.00-5
mpdecimal 4.0.0-2
mpfr 4.2.1-4
mpg123 1.32.7-1
mtdev 1.1.7-1
mudlet-debug 4.18.3-1
mypaint-brushes1 1.3.1-2
nano 8.1-1
ncurses 6.5-3
neon 0.33.0-1
netstandard-targeting-pack 8.0.7.sdk107-1
nettle 3.10-1
network-manager-applet 1.36.0-1
networkmanager 1.48.8-1
nm-connection-editor 1.36.0-1
node-gyp 10.2.0-1
nodejs 22.6.0-1
nodejs-nativefier 52.0.0-1
nodejs-nopt 7.2.0-2
notepadnext 0.8-1
noto-fonts 1:24.8.1-1
noto-fonts-cjk 20230817-2
noto-fonts-emoji 1:2.042-1
noto-fonts-emoji-flags 20200120-1
npm 10.8.2-1
npm-check-updates 16.14.20-1
npth 1.7-1
nspr 4.35-3
nss 3.103-1
nvidia-dkms 555.58.02-1
nvidia-utils 555.58.02-1
nvm 0.40.0-1
obs-studio-liberty 30.2.2-1
obs-studio-liberty-debug 30.2.2-1
ocl-icd 2.3.2-2
oniguruma 6.9.9-1
openal 1.23.1-2
opencore-amr 0.1.6-2
opendoas 6.8.2-3
openexr 3.2.4-1
openjpeg2 2.5.2-1
openssh 9.8p1-1
openssl 3.3.1-1
openssl-1.1 1.1.1.w-2
openstarruler-git-debug r95.c5e3cbb-1
openxcom-debug 1.0-9
opus 1.5.2-1
opusfile 0.12-4
orc 0.4.39-1
otf-compagnon 1.000-1
otf-font-awesome 6.6.0-1
p11-kit 0.25.5-1
p7zip 1:17.05-2
pacman 6.1.0-3
pacman-contrib 1.10.6-1
pacman-mirrorlist 20240717-1
pahole 1:1.27-2
pam 1.6.1-2
pambase 20230918-1
pango 1:1.54.0-1
pangomm 2.46.4-1
pangomm-2.48 2.54.0-1
parted 3.6-2
patch 2.7.6-10
pavucontrol 1:6.1-1
pciutils 3.13.0-1
pcre 8.45-4
pcre2 10.44-1
pcsclite 2.3.0-1
perl 5.38.2-2
perl-algorithm-diff 1:1.201-5
perl-class-method-modifiers 2.15-3
perl-clone 0.46-3
perl-data-optlist 0.114-3
perl-devel-globaldestruction 0.14-10
perl-encode-locale 1.05-12
perl-error 0.17029-6
perl-file-listing 6.16-3
perl-html-parser 3.82-1
perl-html-tagset 3.24-1
perl-http-cookiejar 0.014-2
perl-http-cookies 6.11-1
perl-http-daemon 6.16-3
perl-http-date 6.06-2
perl-http-message 6.46-1
perl-http-negotiate 6.01-13
perl-import-into 1.002005-10
perl-io-html 1.004-5
perl-libwww 6.77-1
perl-lwp-mediatypes 6.04-5
perl-mailtools 2.21-8
perl-module-runtime 0.016-4
perl-moo 2.005005-3
perl-net-http 6.23-3
perl-parallel-forkmanager 2.02-6
perl-params-util 1.102-5
perl-regexp-common 2024080801-1
perl-role-tiny 2.002004-5
perl-sub-exporter 0.991-1
perl-sub-exporter-progressive 0.001013-10
perl-sub-install 0.929-1
perl-sub-quote 1:2.006008-3
perl-timedate 2.33-6
perl-try-tiny 0.31-4
perl-uri 5.28-1
perl-www-robotrules 6.02-13
perl-xml-parser 2.47-1
phonon-qt6 4.12.0-4
phonon-qt6-vlc 0.12.0-2
physfs 3.2.0-2
pinentry 1.3.1-5
pipewire 1:1.2.2-1
pipewire-alsa 1:1.2.2-1
pipewire-audio 1:1.2.2-1
pipewire-jack 1:1.2.2-1
pipewire-pulse 1:1.2.2-1
pixman 0.43.4-1
pkgconf 2.1.1-1
plasma-activities 6.1.4-1
play.it-git 2.29.1.r1.g03ba243f-1
playerctl 2.4.1-3
pnpm 9.7.0-1
pokemon-colorscripts-git r112.0483c85b-2.1
polkit 125-1
polkit-gnome 0.105-11
polkit-kde-agent 6.1.4-1
polkit-qt6 0.200.0-1
poppler 24.08.0-1
poppler-data 0.4.12-2
poppler-glib 24.08.0-1
poppler-qt6 24.08.0-1
popt 1.19-1
portaudio 1:19.7.0-3
procps-ng 4.0.4-3
proton-mail-bin 1.0.6-1
proton-mail-bin-debug 1.0.6-1
psmisc 23.7-1
pugixml 1.14-1
python 3.12.4-1
python-autocommand 2.2.2-6
python-cairo 1.26.1-1
python-colorama 0.4.6-3
python-decorator 5.1.1-4
python-distlib 0.3.8-2
python-distutils-extra 2.39-13
python-fastjsonschema 2.20.0-1
python-filelock 3.13.3-2
python-gobject 3.48.2-2
python-inflect 7.3.1-1
python-jaraco.context 5.3.0-1
python-jaraco.functools 4.0.2-1
python-jaraco.text 4.0.0-1
python-mako 1.3.5-1
python-markdown 3.6-3
python-markupsafe 2.1.5-2
python-more-itertools 10.3.0-1
python-ordered-set 4.1.0-5
python-packaging 24.1-1
python-platformdirs 4.2.2-1
python-psutil 6.0.0-1
python-pyte 0.8.2-3
python-setuptools 1:69.5.1-1
python-six 1.16.0-9
python-tomli 2.0.1-4
python-trove-classifiers 2024.7.2-1
python-typeguard 4.3.0-1
python-typing_extensions 4.12.2-1
python-validate-pyproject 0.18-1
python-virtualenv 20.26.2-1
python-wcwidth 0.2.13-2
qca-qt6 2.3.9-2
qrcodegencpp-cmake 1:1.8.0-3
qrencode 4.1.1-3
qt5-base 5.15.14+kde+r143-1
qt5-declarative 5.15.14+kde+r28-1
qt5-gamepad 5.15.14-1
qt5-location 5.15.14+kde+r7-1
qt5-multimedia 5.15.14+kde+r2-1
qt5-remoteobjects 5.15.14-1
qt5-svg 5.15.14+kde+r5-1
qt5-tools 5.15.14+kde+r4-2
qt5-translations 5.15.14-1
qt5-wayland 5.15.14+kde+r59-1
qt5-webchannel 5.15.14+kde+r3-1
qt5-webengine 5.15.17-6
qt5-x11extras 5.15.14-1
qt6-5compat 6.7.2-1
qt6-base 6.7.2-1
qt6-declarative 6.7.2-1
qt6-multimedia 6.7.2-1
qt6-multimedia-ffmpeg 6.7.2-1
qt6-shadertools 6.7.2-1
qt6-speech 6.7.2-1
qt6-svg 6.7.2-1
qt6-translations 6.7.2-1
qt6-wayland 6.7.2-4
qtkeychain-qt5 0.14.3-1
raptor 2.0.16-5
rasqal 1:0.9.33-7
rav1e 0.7.1-1
readline 8.2.013-1
redland 1:1.0.17-9
rnnoise 1:0.2-1
roam 122.0.1.beta001-1
rtkit 0.13-3
rtmpdump 1:2.4.r105.6f6bb13-1
rubberband 3.3.0-2
runc 1.1.13-1
sbc 2.0-2
scummvm 2.8.1-1
sdbus-cpp 1.5.0-3
sddm 0.21.0-4
sdl12-compat 1.2.68-2
sdl2 2.30.6-1
sdl2_image 2.8.2-4
sdl2_mixer 2.8.0-1
sdl2_net 1:2.2.0-2
sdl2_ttf 2.22.0-1
sdl_gfx 2.0.27-1
sdl_image 1.2.12-9
sdl_mixer 1.2.12-12
sdl_ttf 2.0.11-7
seatd 0.8.0-2
sed 4.9-3
semver 7.6.3-1
serd 0.32.2-1
shaderc 2024.1-1
shadow 4.16.0-1
shared-mime-info 2.4-1
slack-desktop 4.39.88-1
slang 2.3.3-3
slurp 1.5.0-1
smartmontools 7.4-2
smbclient 4.20.4-1
snappy 1.1.10-1
sndio 1.10.0-1
solid 6.4.0-1
sonnet 6.4.0-1
sord 0.16.16-1
sound-theme-freedesktop 0.8-6
soundtouch 2.3.3-1
spandsp 0.0.6-5
spdlog 1.14.1-1
speex 1.2.1-2
speexdsp 1.2.1-2
spicetify-cli 2.37.1-1
spicetify-cli-debug 2.36.15-1
spirv-tools 2024.2-1
spotify 1:1.2.42.290-1
sqlite 3.46.0-1
squashfuse 0.5.2-1
sratom 0.6.16-1
srt 1.5.3-2
steam 1.0.0.79-2
sudo 1.9.15.p5-2
suitesparse 7.7.0-2
sulis 1.0.0-1
sulis-debug 1.0.0-1
svt-av1 2.1.2-1
svt-hevc 1.5.1-3
swappy 1.5.1-2
swaylock-effects 1.7.0.0-4
swaylock-effects-debug 1.7.0.0-4
syndication 6.4.0-1
syntax-highlighting 6.4.0-1
systemd 256.4-1
systemd-libs 256.4-1
systemd-sysvcompat 256.4-1
taglib 2.0.1-1
tailscale 1.70.0-1
talloc 2.4.2-3
tar 1.35-2
tdb 1.4.12-1
tevent 1:0.16.1-3
texinfo 7.1-2
thefuck 3.32-9
tomlplusplus 3.4.0-1
tpm2-tss 4.0.1-1
tracker3 3.7.3-2
trayscale 0.13.1-1
tree-sitter 0.22.6-1
tslib 1.23-1
ttf-dejavu 2.37+18+g9b5d1b2f-7
ttf-font-awesome 6.6.0-1
ttf-jetbrains-mono-nerd 3.2.1-2
ttf-joypixels 8.0.0-2
ttf-symbola 14.00-1
ttf-twemoji 15.1.0-1
twitter 1.0.5-1
twolame 0.4.0-4
tzdata 2024a-2
udisks2 2.10.1-4
unrar 1:7.0.9-1
unzip 6.0-21
upower 1.90.4-1
usbutils 017-1
util-linux 2.40.2-1
util-linux-libs 2.40.2-1
v4l-utils 1.26.1-1
v4l2loopback-dkms 0.13.2-1
vapoursynth R69-1
vi 1:070224-6
vid.stab 1.1.1-2
vim 9.1.0672-1
vim-runtime 9.1.0672-1
vlc 3.0.21-2
vmaf 3.0.0-1
volume_key 0.3.12-9
vscodium-bin 1.92.1.24225-1
vscodium-bin-debug 1.92.1.24225-1
vulkan-headers 1:1.3.285-1
vulkan-icd-loader 1.3.285-1
vulkan-tools 1.3.269-1
vulkan-validation-layers 1.3.275-1
wavpack 5.7.0-1
waybar 0.10.4-2
wayland 1.23.0-1
wayland-protocols 1.36-1
webrtc-audio-processing-1 1.3-3
wev 1.0.0-13
wget 1.24.5-3
which 2.21-6
wildmidi 0.4.6-1
wine 9.14-1
wireless_tools 30.pre9-4
wireplumber 0.5.5-1
wl-clipboard 1:2.2.1-2
wlogout 1.2.2-0
wlroots0.17 0.17.4-3
wofi 1.4.1-1
wofi-emoji 1.2-3
wpa_supplicant 2:2.11-2
wtype 0.4-2
wxwidgets-common 3.2.5-1
wxwidgets-gtk3 3.2.5-1
x264 3:0.164.r3108.31e19f9-2
x265 3.6-1
xcb-proto 1.17.0-2
xcb-util 0.4.1-2
xcb-util-cursor 0.1.5-1
xcb-util-errors 1.0.1-2
xcb-util-image 0.4.1-3
xcb-util-keysyms 0.4.1-5
xcb-util-renderutil 0.3.10-2
xcb-util-wm 0.4.2-2
xcb-util-xrm 1.3-3
xdg-desktop-portal 1.18.4-1
xdg-desktop-portal-hyprland 1.3.3-2
xdg-user-dirs 0.18-2
xdg-utils 1.2.1-1
xf86-input-libinput 1.4.0-2
xkeyboard-config 2.42-1
xmlsec 1.3.5-1
xorg-fonts-alias-misc 1.0.5-1
xorg-fonts-encodings 1.1.0-1
xorg-fonts-misc 1.0.4-2
xorg-mkfontscale 1.2.3-1
xorg-server 21.1.13-1
xorg-server-common 21.1.13-1
xorg-setxkbmap 1.3.4-2
xorg-xauth 1.1.3-1
xorg-xdpyinfo 1.3.4-2
xorg-xhost 1.0.9-2
xorg-xinit 1.4.2-2
xorg-xinput 1.6.4-2
xorg-xkbcomp 1.4.7-1
xorg-xmodmap 1.0.11-2
xorg-xprop 1.2.7-1
xorg-xrandr 1.5.2-2
xorg-xrdb 1.2.2-2
xorg-xset 1.2.5-2
xorg-xwayland 24.1.2-1
xorgproto 2024.1-2
xvidcore 1.3.7-3
xxhash 0.8.2-1
xz 5.6.2-1
yajl 2.1.0-6
yaml-cpp 0.8.0-2
yarn 1.22.22-2
yay 12.3.5-1
yay-debug 12.3.5-1
zbar 0.23.93-1
zenity 4.0.2-1
zeromq 4.3.5-2
zimg 3.0.5-1
zip 3.0-11
zix 0.4.2-2
zlib 1:1.3.1-2
zoom 6.1.6-1
zsh 5.9-5
zstd 1.5.6-1
zvbi 0.2.42-1
zxing-cpp 2.2.1-1
zziplib 0.13.78-1
```
</details>
## 3. Configuration
Naomi's specific application configurations are noted here for posterity.
### 3.1. `git`
The global gitconfig goes in `~/.gitconfig`.
The most important thing to note is that Naomi signs her commits with her SSH key, not a GPG key.
```ini
[gpg]
format = ssh
[gpg "ssh"]
program = /opt/1Password/op-ssh-sign
[commit]
gpgsign = true
[user]
signingkey = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDFObmWsDIA2Y95uY8PVmepbTkjG2EFp36PTcnHCi/MYlaBlVPT8c0ixLj6XMwGaTWiiw+SaoSds1zf/WFRfkd8KujWWLQg0xE9Nh0oThF07HwoRIvi1YuAa69TmOSaNaT1YjX5uCIp7QNck5AkLckMK6v5Vhb5XPwZktEp96IBCQqdBcV2F6wX6Oro73iqGCoiAcUZRzeA9dzLtNCg77n3hFKrSeNpuXzX/3SiVOx9x2+3vZdyLlCXogQvH29LU8exPaYOor2h+ijPLVRivlO+yyt6s11iArrVhgINRpTEDbHde7GtNzQeLRNdnFyFSwkj1KPVpbfvAWDTbzteCawic0OP5swQ0rFLtjSnQI+K2GqFFu+Nvypz3YX5ozqTBSFudyI5XZgLObIsR/Lug6zEdRnvoKDnHcBqRxnZeHOD5Mq+oHrHSyA8KROLH+XmtFwdtyakw1NnuwLrFM08HOHKFBj66zgU1SSNjUiUkv3lBIhlDIVAWDk7XG5yRJx0GzcNLA4vvIKhS3SVOqZezRVrfB60SglOIPOgxjvWJuY9jCTcN5aKBT46+Hjam3dF754dx3rG103Azvn0/b3Hicf30+LpRNtxi4k+QdD4q/LlRmsrSl00S4wcfaKeza7L8WAAUNmfCqeApJ06U1O+TopJikzT5bT5ObHyDeUgHdB1jw==
name = Naomi Carrigan
email = commits@nhcarrigan.com
[core]
editor = emacs -nw
[push]
autoSetupRemote = true
```
### 3.2. `zsh`
The zsh config goes in `~/.zshrc`.
Naomi uses Oh My ZSH instead of bash.
```bash
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
####################
# Dotfile for Oh My Zsh.
# Installs on top of zsh,
# so install that first.
####################
# SYSTEM
####################
# Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Theme
ZSH_THEME="powerlevel10k/powerlevel10k"
# Plugins
plugins=(git zsh-256color zsh-autosuggestions zsh-syntax-highlighting)
source $ZSH/oh-my-zsh.sh
# User configuration
####################
# Load nvm on arch
source /usr/share/nvm/init-nvm.sh
# Load spicetify
export PATH=$PATH:/home/naomi/.spicetify
##################
# Aliases
#################
# We're lazy. :3
alias zshrc="source ~/.zshrc"
alias hyprconf="emacs -nw ~/.config/hypr/hyprland.conf"
# We hate nano
alias nano="emacs -nw"
alias code="codium ."
# We hate sudo more
alias sudo="doas"
# Listing files
alias ls="eza -ahl --extended --octal-permissions --git -g"
# More details on which thing to run
alias which="type -a"
# Untar
alias untar="tar -xvzf"
# Packages
alias yay-list="yay -Qs"
alias yay-clean="yay -Scc"
alias yay-update="yay -Syu"
alias yay-new="yay -Syuu"
alias yay-install="yay" # Just for consistency.
alias yay-uninstall="yay -R"
# File System
alias .2="cd ../.."
alias .3="cd ../../.."
alias .4="cd ../../../.."
alias .5="cd ../../../../.."
alias delete="rm -rf"
alias cp="cp -i"
alias mkdir="mkdir -p"
# git
alias clone="git clone"
alias comm="git add -A && git commit"
alias commv="git add -A && git commit --no-verify"
alias push="git push"
alias pull="git pull"
alias upmain="git checkout main && git fetch upstream && git merge upstream/main"
alias co="git checkout"
alias cob="git checkout -b"
alias fcc="cd ~/code/freecodecamp"
alias ridm="cd ~/code/rythm"
alias sc="cd ~/code/streamcord"
alias dg="cd ~/code/deepgram"
alias naomi="cd ~/code/naomi"
# Silly
alias tree="cbonsai -S"
alias poke="pokemon-colorscripts --no-title -r"
# Run this on terminal load, because it's pretty.
hyfetch
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# THE FUCK
eval $(thefuck --alias)
# pnpm
export PNPM_HOME="/home/naomi/.local/share/pnpm"
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm end
```
### 3.3. `pacman`
The pacman config goes in `/etc/pacman.conf`.
Naomi's package manager configuration.
```ini
[options]
HoldPkg = pacman glibc
Architecture = auto
CheckSpace
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlist
```
### 3.4. Hexchat
Naomi's IRC config, mostly so she doesn't lose it.
Her channel list goes in `~/.config/hexchat/servlist.conf`.
```shell
N=Libera.Chat
P=<you wish i was putting my password here>
L=6
E=UTF-8 (Unicode)
F=95
D=29
S=irc.libera.chat
J=#nhcarrigan-chat
J=#nhcarrigan
J=##chat
J=##programming
J=#javascript
J=#idlerpg
J=#archlinux
J=#archlinux-offtopic
J=#archlinux-women
J=#wesnoth
J=#wesnoth-offtopic
J=#xonotic
J=#linux
J=#protondb
J=#nethack
J=#cataclysmDDA
J=#crawl
J=##brogue
J=#freedroid
J=#widelands
J=#freeciv
J=#freeorion
J=#pioneer
J=#endeavouros
J=#hexchat
J=#node.js
J=#zsh
J=#codeberg
J=#idlerpg-discuss
J=#idlerpg-ng
```
### 3.5 hyprland
This is Naomi's `hyprland` config, which goes in `~/.config/hypr/hyprland.conf`.
```config
################
### MONITORS ###
################
monitor=HDMI-A-1,1920x1080,0x0,1
monitor=DP-3,1920x1080,1920x0,1
monitor=DP-2,1920x1080,3840x0,1
###################
### MY PROGRAMS ###
###################
$terminal = alacritty
$fileManager = dolphin
$menu = wofi --show=drun
#################
### AUTOSTART ###
#################
# This creates the GUI for apps to ask for sudo perms
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
# Wallpaper
exec-once = hyprpaper
# Task bar
exec-once = waybar
# Dark theming
exec-once = gsettings set org.gnome.desktop.interface gtk-theme "Sweet-Ambar-Blue-Dark-v40"
exec-once = gsettings set org.gnome.desktop.interface color-scheme prefer-dark
# Execute startup script
exec-once = ~/.config/hypr/startup.sh
#############################
### ENVIRONMENT VARIABLES ###
#############################
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSOES,1
env = WLR_RENDERER,gles2
debug {
disable_logs = false
}
#####################
### LOOK AND FEEL ###
#####################
general {
gaps_in = 5
gaps_out = 20
border_size = 2
col.active_border = rgba(00c7a9ee) rgba(00ffd9ee) 45deg
col.inactive_border = rgba(00806cff)
resize_on_border = true
allow_tearing = false
layout = dwindle
}
decoration {
rounding = 10
active_opacity = 1.0
inactive_opacity = 0.5
drop_shadow = true
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
blur {
enabled = true
size = 8
passes = 1
vibrancy = 0.1696
}
}
animations {
enabled = true
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
master {
new_status = master
}
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}
#############
### INPUT ###
#############
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
gestures {
workspace_swipe = false
}
####################
### KEYBINDINGSS ###
####################
$mainMod = SUPER # Sets "Windows" key as main modifier
# Screenshots
bind = ,Print, exec, hyprshot -m region -z --clipboard-only
bind = $mainMod, Q, exec, $terminal
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
bind = $mainMod SHIFT, 1, workspace, 11
bind = $mainMod SHIFT, 2, workspace, 12
bind = $mainMod SHIFT, 3, workspace, 13
bind = $mainMod SHIFT, 4, workspace, 14
bind = $mainMod SHIFT, 5, workspace, 15
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Move windows with arrow keys
bind = $mainMod SHIFT, left, movewindow, l
bind = $mainMod SHIFT, right, movewindow, r
bind = $mainMod SHIFT, down, movewindow, d
bind = $mainMod SHIFT, up, movewindow, u
# Lockscreen
bind = $mainMod, L, exec, swaylock
# Emoji Picker
bind = $mainMod, code:60, exec, wofi-emoji
# Volume
bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +1%
bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -1%
bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
# Media controls
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
##############################
### WINDOWS AND WORKSPACES ###
##############################
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
windowrulev2 = opacity 1 override 1,title:FreeTube
```
#### `startup.sh`
This just boots Naomi's programs.
```sh
#!/bin/bash
# Function to launch app with delay
launch_app() {
$2 &
sleep $1
}
# Workspace 1
hyprctl dispatch workspace 1
launch_app 20 discord
launch_app 5 hexchat
# Workspace 2
hyprctl dispatch workspace 2
launch_app 5 brave
# Workspace 3
hyprctl dispatch workspace 3
launch_app alacritty
```
### 3.6 Waybar
These manage Naomi's waybar instance. These are a modification of [MechaBar](https://github.com/Sejjy/MechaBar).
All of these files go in `~/.config/waybar`.
#### `config.jsonc`
```json
{
"layer": "top",
"position": "top",
"mode": "dock",
"height": 20,
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
"reload_style_on_change": true,
// positions
"modules-left": [
"custom/paddl",
"custom/ws", // window icon
"custom/left1",
"hyprland/workspaces", // workspaces
"custom/right1",
"custom/paddw",
"hyprland/window" // window title
],
"modules-center": [
"custom/paddc",
"custom/left2",
"custom/cpuinfo", // temperature
"custom/left3",
"memory", // memory
"custom/left4",
"cpu", // cpu
"custom/leftin1",
"custom/left5",
"custom/arch", // arch logo
"custom/right2",
"custom/rightin1",
"clock#time", // time
"custom/right3",
"clock#date", // date
"custom/right4",
"custom/wifi", // connection
"custom/right5"
],
"modules-right": [
"custom/media", // media info
"custom/left6",
"pulseaudio", // output device
"custom/left7",
"tray", // brightness
"custom/left8",
"battery", // battery
"custom/leftin2",
"custom/power" // power button
],
// modules
"custom/ws": {
"format": " ",
"tooltip": false,
"on-click": "wofi --show=drun"
},
"hyprland/workspaces": {
"all-outputs": false,
"active-only": false,
"on-click": "activate",
"disable-scroll": true,
"sort-by-number": true
},
"hyprland/window": {
"format": "{}",
"separate-outputs": true,
"rewrite": {
"naomi@technomancer:(.*)": " $1",
"(.*)naomi@technomancer:~": " naomi@technomancer",
"(.*) — Mozilla Firefox": "<span foreground='#f38ba8'>󰈹</span> $1",
"(.*)Mozilla Firefox": "<span foreground='#f38ba8'>󰈹</span> Firefox",
"(.*) - Visual Studio Code": "<span foreground='#89b4fa'>󰨞</span> $1",
"(.*)Visual Studio Code": "<span foreground='#89b4fa'>󰨞</span> Visual Studio Code",
"(.*)Spotify Premium": "<span foreground='#a6e3a1'></span> Spotify Premium",
"Discord": "<span foreground='#89b4fa'></span> Discord",
"GNU Image Manipulation Program": "<span foreground='#a6adc8'></span> GNU Image Manipulation Program",
"OBS(.*)": "<span foreground='#a6adc8'>󰐌</span> OBS Studio",
"VLC media player": "<span foreground='#fab387'>󰕼</span> VLC Media Player",
"ONLYOFFICE Desktop Editors": "<span foreground='#f38ba8'></span> OnlyOffice Desktop",
"qView": " qView",
"(.*).jpg": " $1.jpg",
"(.*).png": " $1.png",
"(.*).svg": " $1.svg",
"/": " File Manager",
"": "<span foreground='#cba6f7'></span> Naomi 󰅂 Technomancer"
},
"min-length": 5,
"max-length": 45
},
"custom/cpuinfo": {
"exec": "~/.config/waybar/scripts/cpuinfo.sh",
"return-type": "json",
"format": "{}",
"tooltip": true,
"interval": 5,
"min-length": 8,
"max-length": 8
},
"memory": {
"states": {"c": 90},
"format": "󰘚 {percentage}%",
"format-c": "󰀪 {percentage}%",
"tooltip": true,
"tooltip-format": "{used:0.1f}GB / {total:0.1f}GB",
"interval": 20,
"min-length": 7,
"max-length": 7
},
"cpu": {
"format": "󰻠 {usage}%",
"tooltip": false,
"interval": 5,
"min-length": 6,
"max-length": 6
},
"custom/arch": {
"format": " ",
"tooltip": false,
"on-click": "alacritty"
},
"clock#time": {
"format": "󱑂 {:%H:%M}",
"tooltip": false,
"min-length": 8,
"max-length": 8
},
"clock#date": {
"format": "󱨴 {:%m-%d}",
"tooltip-format": "<tt>{calendar}</tt>",
"calendar": {
"mode": "month",
"mode-mon-col": 3,
"on-click-right": "mode",
"format": {
"months": "<span color='#f5e0dc'><b>{}</b></span>",
"weekdays": "<span color='#f9e2af'><b>{}</b></span>",
"today": "<span color='#f38ba8'><b>{}</b></span>"
}
},
"actions": {"on-click-right": "mode"},
"min-length": 8,
"max-length": 8
},
"custom/wifi": {
"exec": "~/.config/waybar/scripts/network-status.sh",
"interval": 30,
"format": "󰢾 Internet",
"tooltip": true,
"tooltip-format": "{}",
"on-click": "~/.config/waybar/scripts/network-menu.sh",
},
"custom/media": {
"exec": "/usr/bin/python3 ~/.config/waybar/scripts/mediaplayer.py",
"format": "{}",
"return-type": "json",
"on-click": "playerctl play-pause",
"min-length": 5,
"max-length": 35
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": "婢 {volume}%",
"format-icons": {
"headphone": "󰋋",
"default": ["󰖀", "󰕾"]
},
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"on-right-click": "pavucontrol -t 3",
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +1%",
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -1%",
"scroll-step": 10,
"min-length": 6,
"max-length": 6
},
"backlight": {
"device": "intel_backlight",
"format": "{icon} {percent}%",
"format-icons": ["", "", "", "", "", "", "", "", ""],
"tooltip": false,
"on-scroll-up": "brightnessctl set 5%+",
"on-scroll-down": "brightnessctl set 5%-",
"min-length": 6,
"max-length": 6
},
"battery": {
"states": {
"good": 95,
"warning": 30,
"critical": 20
},
"format": "{icon} {capacity}%",
// "format-icons": ["", "", "", "", ""],
"format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"],
"format-charging": "󱘖 {capacity}%",
"format-plugged": "󱘖 {capacity}%",
"tooltip-format": "{time}",
"interval": 1,
"min-length": 6,
"max-length": 6
},
"custom/power": {
"format": " ",
"tooltip": false,
"on-click": "swaylock",
"on-click-right": "shutdown now",
"interval" : 86400
},
"tray": {
"icon-size": 20,
"spacing": 10,
"show-passive-items": true
},
// padding
"custom/paddl": {
"format": " ",
"tooltip": false
},
"custom/paddw": {
"format": " ",
"tooltip": false
},
"custom/paddc": {
"format": " ",
"tooltip": false
},
"custom/paddr": {
"format": "",
"tooltip": false
},
// LEFT arrows
"custom/left1": {
"format": "",
"tooltip": false
},
"custom/left2": {
"format": "",
"tooltip": false
},
"custom/left3": {
"format": "",
"tooltip": false
},
"custom/left4": {
"format": "",
"tooltip": false
},
"custom/left5": {
"format": "",
"tooltip": false
},
"custom/left6": {
"format": "",
"tooltip": false
},
"custom/left7": {
"format": "",
"tooltip": false
},
"custom/left8": {
"format": "",
"tooltip": false
},
// RIGHT arrows
"custom/right1": {
"format": "",
"tooltip": false
},
"custom/right2": {
"format": "",
"tooltip": false
},
"custom/right3": {
"format": "",
"tooltip": false
},
"custom/right4": {
"format": "",
"tooltip": false
},
"custom/right5": {
"format": "",
"tooltip": false
},
// LEFT inverse
"custom/leftin1": {
"format": "",
"tooltip": false
},
"custom/leftin2": {
"format": "",
"tooltip": false
},
// RIGHT inverse
"custom/rightin1": {
"format": "",
"tooltip": false
}
}
```
#### `style.css`
```css
* {
border: none;
font-family: "JetBrainsMono Nerd Font";
font-weight: bold;
font-size: 10px;
min-height: 11px;
color: @text;
}
@import "theme.css";
window#waybar {
background: @bar-bg;
}
tooltip {
background: @main-bg;
color: @main-fg;
border: solid;
border-radius: 7px;
border-width: 1px;
border-color: @text;
}
/* WORKSPACE BUTTONS */
#workspaces button {
box-shadow: none;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
padding: 0px;
border-radius: 8px;
margin-top: 2px;
margin-bottom: 2px;
margin-left: 0px;
padding-left: 2px;
padding-right: 2px;
margin-right: 0px;
color: @main-fg;
animation: ws_normal 20s ease-in-out 1;
}
#workspaces button.active {
box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 1);
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.6);
background: @wb-act-bg;
color: @wb-act-fg;
margin-left: 2px;
padding-left: 8px;
padding-right: 8px;
margin-right: 2px;
animation: ws_active 20s ease-in-out 1;
transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
}
#workspaces button:hover {
background: @wb-hvr-bg;
color: @wb-hvr-fg;
animation: ws_hover 20s ease-in-out 1;
transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
}
/* SPACING */
#custom-ws,
#workspaces,
#window,
#custom-cpuinfo
#memory,
#cpu,
#clock,
#pulseaudio,
#backlight,
#battery,
#custom-power,
#mpris,
#custom-notifications {
margin-bottom: 0px;
opacity: 1;
padding-left: 4px;
padding-right: 4px;
}
/* COLORS */
@define-color text #00ffd5;
@define-color workspaces #004452;
@define-color cpuinfo #004452;
@define-color memory #006151;
@define-color cpu #008f77;
@define-color arch #00ffd5;
@define-color time #008f77;
@define-color date #006151;
@define-color wifi #004452;
@define-color pulseaudio #004452;
@define-color backlight #006151;
@define-color battery #008f77;
@define-color power #00ffd5;
/* MODULES */
/* WINDOW ICON */
#custom-paddl {
font-size: 11.5pt;
margin-bottom: -2px;
padding-right: 2px;
background: @main-bg;
}
#custom-ws {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @main-bg;
}
#custom-left1 {
font-size: 11.5pt;
color: @workspaces;
background: @main-bg;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 2px;
}
/* WORKSPACES */
#workspaces {
padding: 0;
background: @workspaces;
}
#custom-right1 {
font-size: 11.5pt;
color: @workspaces;
background: @main-bg;
margin-bottom: -2px;
text-shadow: 1px 0px 2px rgba(0, 0, 0, 1);
padding-right: 3px;
}
/* WINDOW TITLE */
#window {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
}
/* TEMPERATURE */
#custom-paddc {
padding-right: 3px;
}
#custom-left2 {
font-size: 11.5pt;
color: @cpuinfo;
background: @main-bg;
margin-bottom: -2px;
border-radius: 10px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 3px;
}
#custom-cpuinfo {
padding-left: 1px;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @cpuinfo;
}
/* MEMORY */
#custom-left3 {
font-size: 11.5pt;
color: @memory;
background: @cpuinfo;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 3px;
}
#memory {
padding-left: 1px;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @memory;
}
/* CPU */
#custom-left4 {
font-size: 11.5pt;
color: @cpu;
background: @memory;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 3px;
}
#cpu {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @cpu;
}
#custom-leftin1 {
font-size: 11.5pt;
color: @cpu;
margin-bottom: -2px;
}
/* ARCH LOGO */
#custom-left5 {
font-size: 11.5pt;
color: @arch;
background: @main-bg;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 0.6);
padding-left: 3px;
}
#custom-arch {
text-shadow: none;
color: black;
font-size: 11pt;
padding-left: 4px;
padding-right: 0px;
background: @arch;
margin-bottom: -2px;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
}
#custom-right2 {
font-size: 11.5pt;
color: @arch;
background: @main-bg;
margin-bottom: -2px;
text-shadow: 1px 0px 2px rgba(0, 0, 0, 1);
padding-right: 3px;
}
/* TIME */
#custom-rightin1 {
font-size: 11.5pt;
color: @time;
margin-bottom: -2px;
}
#clock.time {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @time;
}
#custom-right3 {
font-size: 11.5pt;
color: @time;
background: @date;
margin-bottom: -2px;
text-shadow: 1px 0px 2px rgba(0, 0, 0, 1);
padding-right: 3px;
}
/* DATE */
#clock.date {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @date;
}
#custom-right4 {
font-size: 11.5pt;
color: @date;
background: @wifi;
margin-bottom: -2px;
text-shadow: 1px 0px 2px rgba(0, 0, 0, 1);
padding-right: 3px;
}
/* CONNECTION */
#custom-wifi {
padding-left: 4px;
padding-right: 4px;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @wifi;
}
#custom-right5 {
font-size: 11.5pt;
color: @wifi;
background: @main-bg;
margin-bottom: -2px;
text-shadow: 1px 0px 2px rgba(0, 0, 0, 1);
padding-right: 3px;
}
/* MEDIA INFO */
#custom-media {
background-color: @main-bg;
padding-left: 8px;
padding-right: 8px;
}
/* OUTPUT DEVICE */
#custom-left6 {
font-size: 11.5pt;
color: @pulseaudio;
background: @main-bg;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 3px;
}
#pulseaudio {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @pulseaudio;
}
/* BRIGHTNESS */
#custom-left7 {
font-size: 11.5pt;
color: @backlight;
background: @pulseaudio;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 2px;
}
#backlight {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @backlight;
}
/* TRAY */
#custom-left8 {
font-size: 11.5pt;
color: @battery;
background: @backlight;
margin-bottom: -2px;
text-shadow: -1px 0px 2px rgba(0, 0, 0, 1);
padding-left: 2px;
}
#tray {
text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
background: @backlight;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #eb4d4b;
}
/* POWER BUTTON */
#custom-leftin2 {
font-size: 11.5pt;
color: @battery;
background: @main-bg;
margin-bottom: -2px;
}
#custom-power {
color: @main-bg;
background: @power;
box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 1);
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.6);
border-radius: 20px;
margin-top: 2px;
margin-right: 4px;
margin-bottom: 2px;
padding-left: 10px;
padding-right: 7px;
}
#custom-paddr {
font-size: 11.5pt;
color: @main-bg;
margin-bottom: -2px;
}
```
#### `theme.css`
```css
@define-color bar-bg #00473c;
/* @define-color bar-bg rgba(0, 0, 0, 0); */
@define-color main-bg #00473c;
@define-color main-fg #00ebc7;
@define-color wb-act-bg #00ebc7;
@define-color wb-act-fg #00473c;
/* @define-color wb-act-bg #a6adc8; */
/* @define-color wb-act-fg #313244; */
@define-color wb-hvr-bg #00ebc7;
@define-color wb-hvr-fg #00473c;
/* @define-color wb-hvr-bg #f5c2e7; */
/* @define-color wb-hvr-fg #313244; */
```
#### Scripts
There are a few scripts necessary for waybar to work. These all go in `~/.config/waybar/scripts`:
<details>
<summary><code>cpuinfo.sh</code></summary>
```sh
#!/usr/bin/env sh
# CPU model
model=$(cat /proc/cpuinfo | grep 'model name' | head -n 1 | awk -F ': ' '{print $2}')
# CPU utilization
utilization=$(top -bn1 | awk '/^%Cpu/ {print 100 - $8}')
# Clock speed
freqlist=$(cat /proc/cpuinfo | grep "cpu MHz" | awk '{ print $4 }')
maxfreq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq | sed 's/...$//')
frequency=$(echo $freqlist | tr ' ' '\n' | awk "{ sum+=\$1 } END {printf \"%.0f/$maxfreq MHz\", sum/NR}")
# CPU temp
temp=$(sensors | awk '/Package id 0/ {print $4}' | awk -F '[+.]' '{print $2}')
if [ -z "$temp" ]; then
temp=$(sensors | awk '/Tctl/ {print $2}' | tr -d '+°C')
fi
if [ -z "$temp" ]; then
temp="N/A"
fi
# map icons
set_ico="{\"thermo\":{\"0\":\"󱃃\",\"45\":\"󰔏\",\"65\":\"󱃂\",\"85\":\"󰸁\"},\"util\":{\"0\":\"󰾆\",\"30\":\"󰾅\",\"60\":\"󰓅\",\"90\":\"󰀪\"}}"
eval_ico() {
map_ico=$(echo "${set_ico}" | jq -r --arg aky "$1" --argjson avl "$2" '.[$aky] | keys_unsorted | map(tonumber) | map(select(. <= $avl)) | max')
echo "${set_ico}" | jq -r --arg aky "$1" --arg avl "$map_ico" '.[$aky] | .[$avl]'
}
thermo=$(eval_ico thermo $temp)
speedo=$(eval_ico util $utilization)
# Print cpu info (json)
echo "{\"text\":\"${thermo} ${temp}°C\", \"tooltip\":\"${model}\n${thermo} Temperature: ${temp}°C\n${speedo} Utilization: ${utilization}%\n󰘚 Clock Speed: ${frequency}\"}"
```
</details>
<details>
<summary><code>mediaplayer.py</code></summary>
```py
#!/usr/bin/env python3
import gi
gi.require_version("Playerctl", "2.0")
from gi.repository import Playerctl, GLib
from gi.repository.Playerctl import Player
import argparse
import logging
import sys
import signal
import gi
import json
import os
from typing import List
logger = logging.getLogger(__name__)
def signal_handler(sig, frame):
logger.info("Received signal to stop, exiting")
sys.stdout.write("\n")
sys.stdout.flush()
# loop.quit()
sys.exit(0)
class PlayerManager:
def __init__(self, selected_player=None, excluded_player=[]):
self.manager = Playerctl.PlayerManager()
self.loop = GLib.MainLoop()
self.manager.connect(
"name-appeared", lambda *args: self.on_player_appeared(*args))
self.manager.connect(
"player-vanished", lambda *args: self.on_player_vanished(*args))
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
self.selected_player = selected_player
self.excluded_player = excluded_player.split(',') if excluded_player else []
self.init_players()
def init_players(self):
for player in self.manager.props.player_names:
if player.name in self.excluded_player:
continue
if self.selected_player is not None and self.selected_player != player.name:
logger.debug(f"{player.name} is not the filtered player, skipping it")
continue
self.init_player(player)
def run(self):
logger.info("Starting main loop")
self.loop.run()
def init_player(self, player):
logger.info(f"Initialize new player: {player.name}")
player = Playerctl.Player.new_from_name(player)
player.connect("playback-status",
self.on_playback_status_changed, None)
player.connect("metadata", self.on_metadata_changed, None)
self.manager.manage_player(player)
self.on_metadata_changed(player, player.props.metadata)
def get_players(self) -> List[Player]:
return self.manager.props.players
def write_output(self, text, player):
logger.debug(f"Writing output: {text}")
output = {"text": text,
"class": "custom-" + player.props.player_name,
"alt": player.props.player_name}
sys.stdout.write(json.dumps(output) + "\n")
sys.stdout.flush()
def clear_output(self):
sys.stdout.write("\n")
sys.stdout.flush()
def on_playback_status_changed(self, player, status, _=None):
logger.debug(f"Playback status changed for player {player.props.player_name}: {status}")
self.on_metadata_changed(player, player.props.metadata)
def get_first_playing_player(self):
players = self.get_players()
logger.debug(f"Getting first playing player from {len(players)} players")
if len(players) > 0:
# if any are playing, show the first one that is playing
# reverse order, so that the most recently added ones are preferred
for player in players[::-1]:
if player.props.status == "Playing":
return player
# if none are playing, show the first one
return players[0]
else:
logger.debug("No players found")
return None
def show_most_important_player(self):
logger.debug("Showing most important player")
# show the currently playing player
# or else show the first paused player
# or else show nothing
current_player = self.get_first_playing_player()
if current_player is not None:
self.on_metadata_changed(current_player, current_player.props.metadata)
else:
self.clear_output()
def on_metadata_changed(self, player, metadata, _=None):
logger.debug(f"Metadata changed for player {player.props.player_name}")
player_name = player.props.player_name
artist = player.get_artist()
title = player.get_title()
title = title.replace("&", "&amp;")
track_info = ""
if player_name == "spotify" and "mpris:trackid" in metadata.keys() and ":ad:" in player.props.metadata["mpris:trackid"]:
track_info = "Advertisement"
elif artist is not None and title is not None:
track_info = f"{artist} - {title}"
else:
track_info = title
if track_info:
if player.props.status == "Playing" and player_name == "spotify":
track_info = "󰓇 " + track_info
if player.props.status == "Playing" and player_name == "firefox":
track_info = "󰗃 " + track_info
elif player.props.status != "Playing":
track_info = "󰏦 " + track_info
# only print output if no other player is playing
current_playing = self.get_first_playing_player()
if current_playing is None or current_playing.props.player_name == player.props.player_name:
self.write_output(track_info, player)
else:
logger.debug(f"Other player {current_playing.props.player_name} is playing, skipping")
def on_player_appeared(self, _, player):
logger.info(f"Player has appeared: {player.name}")
if player.name in self.excluded_player:
logger.debug(
"New player appeared, but it's in exclude player list, skipping")
return
if player is not None and (self.selected_player is None or player.name == self.selected_player):
self.init_player(player)
else:
logger.debug(
"New player appeared, but it's not the selected player, skipping")
def on_player_vanished(self, _, player):
logger.info(f"Player {player.props.player_name} has vanished")
self.show_most_important_player()
def parse_arguments():
parser = argparse.ArgumentParser()
# Increase verbosity with every occurrence of -v
parser.add_argument("-v", "--verbose", action="count", default=0)
parser.add_argument("-x", "--exclude", "- Comma-separated list of excluded player")
# Define for which player we"re listening
parser.add_argument("--player")
parser.add_argument("--enable-logging", action="store_true")
return parser.parse_args()
def main():
arguments = parse_arguments()
# Initialize logging
if arguments.enable_logging:
logfile = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "media-player.log")
logging.basicConfig(filename=logfile, level=logging.DEBUG,
format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s")
# Logging is set by default to WARN and higher.
# With every occurrence of -v it's lowered by one
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
logger.info("Creating player manager")
if arguments.player:
logger.info(f"Filtering for player: {arguments.player}")
if arguments.exclude:
logger.info(f"Exclude player {arguments.exclude}")
player = PlayerManager(arguments.player, arguments.exclude)
player.run()
if __name__ == "__main__":
main()
```
</details>
<details>
<summary><code>network-menu.sh</code></summary>
```sh
#!/bin/bash
# Ensure nmcli is installed
if ! command -v nmcli &> /dev/null
then
echo "nmcli could not be found"
exit 1
fi
# Get the list of available wired connections
connections=$(nmcli -f NAME,TYPE connection show | grep ethernet | awk '{print $1}')
# If no connections are found, exit
if [ -z "$connections" ]; then
echo "No wired connections found"
exit 1
fi
# Show connections in a menu using rofi
selected=$(echo "$connections" | wofi -dmenu -i -p "Select Wired Connection")
# If a connection was selected, activate it
if [ -n "$selected" ]; then
nmcli connection up "$selected"
fi
```
</details>
<details>
<summary><code>network-status.sh</code></summary>
```sh
#!/bin/bash
# Get the name of the active Ethernet connection
connection=$(nmcli -t -f NAME,TYPE,STATE connection show --active | awk -F: '/ethernet:activated/ {print $1}')
# If no active Ethernet connection is found, check if any Ethernet interface is connected
if [ -z "$connection" ]; then
interface=$(nmcli -t -f DEVICE,TYPE,STATE device status | awk -F: '/ethernet:connected/ {print $1}')
if [ -n "$interface" ]; then
connection="Connected (Unconfigured)"
else
connection="No Connection"
fi
fi
# Output the connection name or status
echo "${connection}"
```
</details>
### 3.7 Alacritty
This one goes in `~/.config/alacritty/alacritty.toml`.
```toml
# Primary colors
[colors.primary]
background = '#00332b'
foreground = '#00ffd9'
# Colors used for 'custom_cursor_colors'
[colors.cursor]
text = '#00ffd9'
cursor = '#00ffd9'
# Colors 0 through 7
[colors.normal]
black = '#337167'
red = '#a87a9a'
green = '#5da286'
yellow = '#9e9e57'
blue = '#58699d'
magenta = '#9b4b9b'
cyan = '#006151'
white = '#5dc6b6'
# Colors 8 through 15
[colors.bright]
black = '#64d3c1'
red = '#ffb8ea'
green = '#8af0c7'
yellow = '#fdfd86'
blue = '#8aa4f5'
magenta = '#ff7aff'
cyan = '#00ffd5'
white = '#00ffd9'
```
## 4. Code Editor
Naomi uses VSCodium as her current code editor.
### 4.1. Settings
This is Naomi's `settings.json` file.
```json
{
"workbench.colorTheme": "Winter is Coming (Dark Blue)",
"workbench.iconTheme": "vscode-great-icons",
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"javascript.preferences.importModuleSpecifierEnding": "js",
"javascript.updateImportsOnFileMove.enabled": "always",
"typescript.preferences.importModuleSpecifierEnding": "js",
"typescript.preferences.preferTypeOnlyAutoImports": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"typescript.updateImportsOnFileMove.enabled": "always",
"powermode.presets": "exploding-rift",
"powermode.combo.location": "statusbar",
"powermode.combo.counterEnabled": "show",
"powermode.combo.timeout": 60,
"powermode.combo.timerEnabled": "show",
"powermode.explosions.frequency": 1,
"powermode.enabled": true,
"powermode.shake.enabled": false,
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
```
### 4.2. Extensions
This is Naomi's current list of extensions. This is generated with `codium --list-extensions`.
```txt
1password.op-vscode
camilamartinezbedoya.pro-hacker-theme
dbaeumer.vscode-eslint
emmanuelbeziat.vscode-great-icons
esbenp.prettier-vscode
hoovercj.vscode-power-mode
icrawl.discord-vscode
johnpapa.winteriscoming
prisma.prisma
ruby0b.pride-themes
yandeu.five-server
yoavbls.pretty-ts-errors
yzane.markdown-pdf
```