summaryrefslogtreecommitdiff
path: root/files
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-10-17 12:22:00 -0400
committerAndrew Opalach <andrew@akon.city> 2025-10-17 12:32:42 -0400
commit544da1ba50d9cbf51a18ca0abf1db66b3baa7460 (patch)
tree1caa87664ea4937c5f4e6e8dc83c49b3132ddd70 /files
parent85a47287e56ba9100420246531ebea5996cc0486 (diff)
downloaddotfiles-544da1ba50d9cbf51a18ca0abf1db66b3baa7460.tar.gz
dotfiles-544da1ba50d9cbf51a18ca0abf1db66b3baa7460.tar.bz2
dotfiles-544da1ba50d9cbf51a18ca0abf1db66b3baa7460.zip
Gentoo desktop
Diffstat (limited to 'files')
-rw-r--r--files/audio/asoundrc12
-rw-r--r--files/audio/convolver/Focal_Elegia_minimum_phase_44100Hz.wav (renamed from files/convolver/Focal_Elegia_minimum_phase_44100Hz.wav)bin18044 -> 18044 bytes
-rw-r--r--files/audio/convolver/Focal_Elegia_minimum_phase_48000Hz.wav (renamed from files/convolver/Focal_Elegia_minimum_phase_48000Hz.wav)bin19244 -> 19244 bytes
-rw-r--r--files/audio/gentoo-pipewire-launcher.conf3
-rw-r--r--files/audio/pipewire/90-elegia-convolver.conf33
-rw-r--r--files/audio/pipewire/90-x570-taichi-spdif.conf5
-rw-r--r--files/audio/pipewire/92-client-user.conf4
-rw-r--r--files/audio/pipewire/92-pulse-user.conf9
-rw-r--r--files/audio/pipewire/92-user.conf20
-rw-r--r--files/email/muttrc112
-rw-r--r--files/firefox/user-overrides.js3
-rw-r--r--files/gaming/MangoHud.conf31
-rw-r--r--files/gaming/gamemode.ini13
-rwxr-xr-xfiles/gaming/scripts/run_egs.sh5
-rwxr-xr-xfiles/gaming/scripts/run_in_proton.sh85
-rw-r--r--files/gitconfig16
-rw-r--r--files/gtk/Xresources1
-rw-r--r--files/gtk/gtk3_config.ini4
-rw-r--r--files/gtk/gtkrc-2.02
-rw-r--r--files/gtk/sway_gtk10
-rw-r--r--files/kitty/kitty.conf89
-rw-r--r--files/nixpkgs-patches/.gitignore0
-rw-r--r--files/nixpkgs-patches/425312.diff143
-rw-r--r--files/nixpkgs-patches/425843.diff504
-rw-r--r--files/nixpkgs-patches/4c3870b23dded4e75292be48bdb03cd870fb1719.diff21
-rw-r--r--files/nvim/fzf_no_linenum.diff24
-rw-r--r--files/nvim/init.vim368
-rw-r--r--files/nvim/mini_completion_no_title.diff0
-rw-r--r--files/nvim/mini_starter_picture.diff288
-rw-r--r--files/patches/adw-gtk3-non-blue-accent.diff (renamed from files/adw-gtk3-non-blue-accent.diff)0
-rw-r--r--files/patches/gamescope_1826.diff (renamed from files/gamescope_1826.diff)0
-rw-r--r--files/patches/sway_background_covered.diff (renamed from files/sway_background_covered.diff)0
-rw-r--r--files/shell/bashrc69
-rw-r--r--files/shell/profile7
-rw-r--r--files/sway/config108
-rw-r--r--files/sway/window_rules25
-rw-r--r--files/user-dirs.dirs8
-rw-r--r--files/vim/autoload/Juliana.vim (renamed from files/nvim/local/autoload/Juliana.vim)10
-rw-r--r--files/vim/colors/lil_pablo.vim81
-rwxr-xr-xfiles/vim/pack/downloads/create_opt.sh38
-rw-r--r--files/vim/patches/qname_edit.diff178
-rw-r--r--files/vim/patches/vim_fugitive_tab_expand.diff17
-rw-r--r--files/vim/plugin/Hello.vim122
-rw-r--r--files/vim/plugin/qname.1.2.vim298
-rw-r--r--files/vim/vimrc294
-rw-r--r--files/waydroid/waydroid.cfg60
-rw-r--r--files/windows/iso_checksums.txt20
-rw-r--r--files/windows/products.sha232
48 files changed, 2024 insertions, 1348 deletions
diff --git a/files/audio/asoundrc b/files/audio/asoundrc
new file mode 100644
index 0000000..051a420
--- /dev/null
+++ b/files/audio/asoundrc
@@ -0,0 +1,12 @@
+#pcm.!spdif {
+# type hw
+# card 1
+# device 1
+#}
+#
+#pcm.!default {
+# type plug
+# slave {
+# pcm "spdif"
+# }
+#}
diff --git a/files/convolver/Focal_Elegia_minimum_phase_44100Hz.wav b/files/audio/convolver/Focal_Elegia_minimum_phase_44100Hz.wav
index 6620260..6620260 100644
--- a/files/convolver/Focal_Elegia_minimum_phase_44100Hz.wav
+++ b/files/audio/convolver/Focal_Elegia_minimum_phase_44100Hz.wav
Binary files differ
diff --git a/files/convolver/Focal_Elegia_minimum_phase_48000Hz.wav b/files/audio/convolver/Focal_Elegia_minimum_phase_48000Hz.wav
index ea009c2..ea009c2 100644
--- a/files/convolver/Focal_Elegia_minimum_phase_48000Hz.wav
+++ b/files/audio/convolver/Focal_Elegia_minimum_phase_48000Hz.wav
Binary files differ
diff --git a/files/audio/gentoo-pipewire-launcher.conf b/files/audio/gentoo-pipewire-launcher.conf
new file mode 100644
index 0000000..c609208
--- /dev/null
+++ b/files/audio/gentoo-pipewire-launcher.conf
@@ -0,0 +1,3 @@
+GENTOO_PIPEWIRE_LOG="/tmp/pipewire.log"
+GENTOO_PIPEWIRE_PULSE_LOG="/tmp/pipewire-pulse.log"
+GENTOO_WIREPLUMBER_LOG="/tmp/wireplumber.log"
diff --git a/files/audio/pipewire/90-elegia-convolver.conf b/files/audio/pipewire/90-elegia-convolver.conf
new file mode 100644
index 0000000..dd789ee
--- /dev/null
+++ b/files/audio/pipewire/90-elegia-convolver.conf
@@ -0,0 +1,33 @@
+context.modules = [{
+ name = "libpipewire-module-filter-chain"
+ args = {
+ node.description = "Focal Elegia EQ (Convolver)"
+ media.name = "Focal Elegia EQ (Convolver)"
+ filter.graph = {
+ nodes = [{
+ type = "builtin"
+ name = "Convolver EQ"
+ label = "convolver"
+ config = {
+ filename = [
+ "/opt/convolver/Focal_Elegia_minimum_phase_44100Hz.wav"
+ "/opt/convolver/Focal_Elegia_minimum_phase_48000Hz.wav"
+ ]
+ resample_quality = 10
+ }
+ }]
+ }
+ capture.props = {
+ node.name = "eq_input.elegia_convolver_eq"
+ media.class = "Audio/Sink"
+ audio.channels = 2
+ audio.position = [ FL FR ]
+ }
+ playback.props = {
+ node.name = "eq_output.elegia_convolver_eq"
+ node.passive = true
+ audio.channels = 2
+ audio.position = [ FL FR ]
+ }
+ }
+}]
diff --git a/files/audio/pipewire/90-x570-taichi-spdif.conf b/files/audio/pipewire/90-x570-taichi-spdif.conf
new file mode 100644
index 0000000..dabfbea
--- /dev/null
+++ b/files/audio/pipewire/90-x570-taichi-spdif.conf
@@ -0,0 +1,5 @@
+context.properties = {
+ # cat /proc/asound/card1/codec#0
+ # cat /proc/asound/card1/stream0
+ default.clock.allowed-rates = [ 32000 44100 48000 88200 96000 192000 ]
+}
diff --git a/files/audio/pipewire/92-client-user.conf b/files/audio/pipewire/92-client-user.conf
new file mode 100644
index 0000000..c956a7e
--- /dev/null
+++ b/files/audio/pipewire/92-client-user.conf
@@ -0,0 +1,4 @@
+stream.properties = {
+ resample.quality = 10
+ channelmix.normalize = false
+}
diff --git a/files/audio/pipewire/92-pulse-user.conf b/files/audio/pipewire/92-pulse-user.conf
new file mode 100644
index 0000000..96dab58
--- /dev/null
+++ b/files/audio/pipewire/92-pulse-user.conf
@@ -0,0 +1,9 @@
+pulse.properties = {
+ pulse.default.format = S32
+ pulse.default.position = [ FL FR ]
+}
+
+stream.properties = {
+ resample.quality = 10
+ channelmix.normalize = false
+}
diff --git a/files/audio/pipewire/92-user.conf b/files/audio/pipewire/92-user.conf
new file mode 100644
index 0000000..329f9ad
--- /dev/null
+++ b/files/audio/pipewire/92-user.conf
@@ -0,0 +1,20 @@
+context.properties = {
+ default.clock.rate = 48000
+ default.clock.quantum = 1024
+ default.clock.min-quantum = 16
+ default.clock.max-quantum = 4096
+ # https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#setting-buffer-size-quantum
+ # quantum settings above are scaled when rate is different than clock.rate.
+ # -limit and -floor apply to the scaled values.
+ default.clock.quantum-limit = 8192
+ default.clock.quantum-floor = 16
+ default.video.width = 640
+ default.video.height = 480
+ default.video.rate.num = 25
+ default.video.rate.denom = 1
+}
+
+stream.properties = {
+ resample.quality = 10
+ channelmix.normalize = false
+}
diff --git a/files/email/muttrc b/files/email/muttrc
new file mode 100644
index 0000000..2f2efea
--- /dev/null
+++ b/files/email/muttrc
@@ -0,0 +1,112 @@
+set send_charset = "utf-8"
+set assumed_charset = "iso-8859-1"
+
+set sort = reverse-date
+
+set editor = "vi -c 'set syntax=mail ft=mail enc=utf-8'"
+
+set menu_scroll = yes
+
+set simple_search = "~f %s | ~C %s | ~s %s"
+
+set mail_check_stats = yes
+set delete = ask-yes
+
+set rfc2047_parameters = yes
+set sleep_time = 0
+set markers = no
+set wait_key = no
+set reverse_name
+set fast_reply
+set fcc_attach
+set mime_forward = no
+set forward_attachments = yes
+set forward_format = "Fwd: %s"
+set forward_quote
+
+set index_format = "%2C (%Z) %[%D %I:%M %p] %-15.15F %s (%c)"
+
+set sidebar_visible = yes
+set sidebar_short_path = yes
+set sidebar_width = 18
+set sidebar_format = '%B%?F? [%F]?%* %?N?%N/?%S'
+
+auto_view text/html
+auto_view application/pgp-encrypted
+alternative_order text/plain text/enriched text/html
+
+set realname = "Andrew Opalach"
+set from = "andrew@akon.city"
+
+set mail_check = 60
+set imap_keepalive = 300
+
+set imap_user = "andrew@akon.city"
+set imap_pass = "`pass andrew@akon.city`"
+set folder = imaps://mail.akon.city/
+set spoolfile = "=INBOX"
+set record = "=INBOX/Sent"
+set postponed = "=INBOX/Drafts"
+set trash = "=INBOX/Trash"
+mailboxes =INBOX
+mailboxes =INBOX/Sent
+mailboxes =INBOX/Drafts
+mailboxes =INBOX/Trash
+mailboxes =INBOX/Junk
+mailboxes =INBOX/Archive
+
+set smtp_pass = "`pass andrew@akon.city`"
+set smtp_url = smtp://andrew@akon.city@mail.akon.city/
+
+set header_cache = /var/tmp/mutt
+
+bind index i imap-fetch-mail
+bind index,pager g noop
+bind index gg first-entry
+bind index j next-entry
+bind index k previous-entry
+bind index G last-entry
+bind attach <Return> view-mailcap
+bind attach l view-mailcap
+bind editor <space> noop
+bind pager j next-line
+bind pager k previous-line
+bind pager gg top
+bind pager G bottom
+bind pager l view-attachments
+bind index h noop
+bind pager,attach h exit
+bind index,pager \Ck sidebar-prev
+bind index,pager \Cj sidebar-next
+bind index,pager \Co sidebar-open
+bind editor <Tab> complete-query
+bind browser l select-entry
+bind browser gg top-page
+bind browser G bottom-page
+#bind index,pager H "view-raw-message"
+
+# https://superuser.com/a/695154
+macro index,pager \cB ": unset wait_key; set pipe_decode\n|w3m\n: set wait_key; unset pipe_decode\n" "call w3m to extract URLs out of a message"
+
+color normal white black
+color attachment brightyellow black
+color hdrdefault green black
+color indicator black brightgreen
+color markers brightyellow black
+color quoted green black
+color signature blue black
+color status black green
+color tilde blue black
+color tree yellow black
+
+color index green black ~D
+color index magenta black ~T
+
+color header brightyellow black ^From:
+color header brightgreen black ^To:
+color header brightgreen black ^Reply-To:
+color header brightgreen black ^Cc:
+color header brightgreen black ^Subject:
+
+#color body brightyellow black [\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+
+#color body brightgreen black (https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+
diff --git a/files/firefox/user-overrides.js b/files/firefox/user-overrides.js
index 3a73f4f..5535de3 100644
--- a/files/firefox/user-overrides.js
+++ b/files/firefox/user-overrides.js
@@ -93,6 +93,9 @@ user_pref("browser.tabs.drawInTitlebar", true);
// Gnome theme
user_pref("gnomeTheme.normalWidthTabs", true);
+// adw3-gtk
+user_pref("widget.gtk.libadwaita-colors.enabled", false);
+
// Hide bookmarks
user_pref("browser.toolbars.bookmarks.visibility", "never");
diff --git a/files/gaming/MangoHud.conf b/files/gaming/MangoHud.conf
new file mode 100644
index 0000000..1b2a7bd
--- /dev/null
+++ b/files/gaming/MangoHud.conf
@@ -0,0 +1,31 @@
+gamemode
+cpu_temp
+cpu_mhz
+vulkan_driver
+gpu_name
+gpu_power
+gpu_temp
+gpu_junction_temp
+gpu_core_clock
+gpu_voltage
+throttling_status
+vram
+gpu_mem_temp
+gpu_mem_clock
+engine_version
+wine
+winesync
+display_server
+resolution
+present_mode
+table_columns=4
+cellpadding_y=-0.100
+font_size=22
+round_corners
+toggle_preset=
+toggle_hud_position=
+toggle_fps_limit=
+toggle_logging=
+reload_cfg=
+upload_log=
+toggle_hud=Shift_R+F10
diff --git a/files/gaming/gamemode.ini b/files/gaming/gamemode.ini
new file mode 100644
index 0000000..72a72f4
--- /dev/null
+++ b/files/gaming/gamemode.ini
@@ -0,0 +1,13 @@
+[general]
+inhibit_screensaver=0
+#softrealtime=on
+#renice=11
+
+# 'high' is too aggressive for my system.
+#[gpu]
+#apply_gpu_optimisations=accept-responsibility
+#gpu_device=0
+#amd_performance_level=high
+
+[cpu]
+pin_cores=no
diff --git a/files/gaming/scripts/run_egs.sh b/files/gaming/scripts/run_egs.sh
new file mode 100755
index 0000000..88e4864
--- /dev/null
+++ b/files/gaming/scripts/run_egs.sh
@@ -0,0 +1,5 @@
+#! /usr/bin/env sh
+
+#gamescope -W 1920 -H 1080 -w 1920 -h 1080 -r 60 -- env WINEPREFIX=/mnt/hdd/Games/epic_games_store \
+env WINEPREFIX=/mnt/hdd/Games/epic_games_store \
+ umu-run /mnt/hdd/Games/epic_games_store/drive_c/Program\ Files\ \(x86\)/Epic\ Games/Launcher/Portal/Binaries/Win64/EpicGamesLauncher.exe -opengl -SkipBuildPatchPrereq
diff --git a/files/gaming/scripts/run_in_proton.sh b/files/gaming/scripts/run_in_proton.sh
new file mode 100755
index 0000000..6a2cc2a
--- /dev/null
+++ b/files/gaming/scripts/run_in_proton.sh
@@ -0,0 +1,85 @@
+#! /usr/bin/env sh
+# https://github.com/Matoking/protontricks/issues/238
+# https://github.com/cheat-engine/cheat-engine/issues/2789
+#
+# CC_Studio:
+# Rotate -> 5 + 4
+# Move -> 5 + 6
+#
+#EXE="Z:\mnt\hdd\Tools\cheat_engines\Cheat Engine 6.8.1\cheatengine-i386.exe"
+#EXE="Z:\mnt\hdd\Tools\cheat_engines\Cheat Engine 7.5\Cheat Engine.exe"
+#EXE="Z:\mnt\hdd\Tools\cheat_engines\CheatEngine752P.exe"
+#EXE="regedit"
+#EXE="Z:\mnt\hdd\Tools\mhw\CC_Studio/MHW CC Studio.exe"
+#EXE="Z:\mnt\hdd\Tools\mhw\photo_mode\IGCSClient.exe"
+#EXE="Z:\mnt\ssd\SteamLibrary\steamapps\common\Baldurs Gate 3\bin\bg3_dx11.exe"
+#EXE="Z:\mnt\hdd\Tools\baldurs_gate3/modmanager/BG3ModManager.exe"
+#EXE="Z:\home\andrew\dl\windowsdesktop-runtime-7.0.13-win-x64.exe"
+#EXE="Z:\home\andrew\dl\ndp472-kb4054531-web.exe"
+#EXE="Z:\mnt\hdd\Tools\elden_ring\injector\IGCSInjectorUI.exe"
+#EXE="Z:\mnt\hdd\Tools\elden_ring\camera_tools\IGCSClient.exe"
+#EXE="Z:\mnt\hdd\Tools\x360ce\x360ce.exe"
+#EXE="Z:\mnt\hdd\Tools\fluffy_modmanager\Modmanager.exe"
+
+EXE="Z:\mnt\hdd\Tools\cheat_engines\Cheat Engine 7.5.2\Cheat Engine.exe"
+#EXE="Z:\mnt\hdd\Tools\cheat_engines\Cheat Engine 7.5.2\cheatengine-i386.exe"
+
+#EXE="IGCSInjector.exe"
+
+#EXE="Z:\mnt\hdd\Tools\inject.exe"
+#ARG0="MonsterHunterWorld.exe"
+
+#EXE="Z:\mnt\hdd\Tools\injector.exe"
+#ARG0="-n"
+
+#ARG1="eldenring.exe"
+#ARG2="Z:\mnt\hdd\Tools\elden_ring\camera_tools\EldenRingCameraTools.dll"
+
+#ARG1="TombRaider.exe"
+#ARG2="TombRaiderCameraTools.dll"
+
+#ARG1="MonsterHunterWorld"
+#ARG2="Z:\mnt\hdd\Tools\reshade\ReShade64.dll"
+
+#APP_ID=367500 # Dragon's Dogma
+APP_ID=582010 # Monster Hunter World
+#APP_ID=1086940
+#APP_ID=3737539014
+#APP_ID=1245620
+#APP_ID=2054970
+#APP_ID=203160 # Tomb Raider
+#APP_ID=357190 # UMVC3
+BUS_NAME=com.steampowered.App$APP_ID
+#BUS_NAME=com.steampowered.App0
+
+#export WINEARCH=win64
+#export WINEARCH=win32
+export WINE="$HOME/.local/share/Steam/steamapps/common/Proton - Experimental/files/bin/wine"
+#export WINE="/mnt/ssd/SteamLibrary/steamapps/common/Proton 10.0/files/bin/wine"
+
+export PROTON_NO_USERSETTINGS=1
+#export WINEDLLOVERRIDES="*mscoree=n;*fusion=n"
+#export WINEDEBUG=+tid,err+all,fixme-all,-loaddll
+
+#STEAMAPPS=$HOME/.steam/steam/steamapps
+#STEAMAPPS="/mnt/hdd/SteamLibrary/steamapps"
+STEAMAPPS="/mnt/ssd/SteamLibrary/steamapps"
+
+WINEPREFIX=$STEAMAPPS/compatdata/$APP_ID/pfx
+export WINEPREFIX
+
+#steam-run "$WINE" uninstaller
+#steam-run "$WINE" winecfg -v win7
+#steam-run "$WINE" "Z:\home\andrew\.cache\winetricks\dotnet452\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
+#steam-run "$WINE" "Z:\home\andrew\.cache\winetricks\dotnet48\ndp48-x86-x64-allos-enu.exe"
+
+#steam-run winetricks -q dotnet48
+#steam-run "$WINE" control
+
+#steam-run "$WINE" $EXE
+#steam-run $HOME/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/pressure-vessel/bin/steam-runtime-launch-client --list
+
+$HOME/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier/pressure-vessel/bin/steam-runtime-launch-client \
+ --bus-name=$BUS_NAME -- \
+ env STEAM_COMPAT_MOUNTS=/mnt/hdd/SteamLibrary:/mnt/hdd/Tools WINEPREFIX=$WINEPREFIX \
+ "$WINE" "$EXE" $ARG0 $ARG1 $ARG2
diff --git a/files/gitconfig b/files/gitconfig
new file mode 100644
index 0000000..3e31de7
--- /dev/null
+++ b/files/gitconfig
@@ -0,0 +1,16 @@
+[user]
+ email = andrew@akon.city
+ name = Andrew Opalach
+ signingKey = 99659CB58598BDDB
+
+[init]
+ defaultBranch = master
+
+[format]
+ signOff = true
+
+[commit]
+ gpgSign = true
+
+[tag]
+ gpgSign = true
diff --git a/files/gtk/Xresources b/files/gtk/Xresources
new file mode 100644
index 0000000..fbe97bc
--- /dev/null
+++ b/files/gtk/Xresources
@@ -0,0 +1 @@
+Xcursor.theme: Mocu-White-Right
diff --git a/files/gtk/gtk3_config.ini b/files/gtk/gtk3_config.ini
new file mode 100644
index 0000000..f88b4f0
--- /dev/null
+++ b/files/gtk/gtk3_config.ini
@@ -0,0 +1,4 @@
+[Settings]
+gtk-theme-name = adw-gtk3-dark
+gtk-application-prefer-dark-theme = true
+gtk-cursor-theme-name = Mocu-White-Right
diff --git a/files/gtk/gtkrc-2.0 b/files/gtk/gtkrc-2.0
new file mode 100644
index 0000000..9d216a0
--- /dev/null
+++ b/files/gtk/gtkrc-2.0
@@ -0,0 +1,2 @@
+gtk-theme-name = "adw-gtk3-dark"
+gtk-icon-theme-name = "Mocu-White-Right"
diff --git a/files/gtk/sway_gtk b/files/gtk/sway_gtk
new file mode 100644
index 0000000..01c0660
--- /dev/null
+++ b/files/gtk/sway_gtk
@@ -0,0 +1,10 @@
+set $gnome-schema org.gnome.desktop.interface
+exec_always {
+ gsettings set $gnome-schema gtk-theme 'adw-gtk3-dark'
+ gsettings set $gnome-schema color-scheme 'prefer-dark'
+ gsettings set $gnome-schema icon-theme 'Adwaita'
+ gsettings set $gnome-schema cursor-theme 'Mocu-White-Right'
+ gsettings set $gnome-schema font-name 'Sans 10'
+}
+seat seat0 xcursor_theme Mocu-White-Right
+exec_always test -f ~/.Xresources && xrdb -merge ~/.Xresources
diff --git a/files/kitty/kitty.conf b/files/kitty/kitty.conf
new file mode 100644
index 0000000..4728717
--- /dev/null
+++ b/files/kitty/kitty.conf
@@ -0,0 +1,89 @@
+font_size 11.0
+font_family Liberation Mono
+bold_font auto
+italic_font auto
+bold_italic_font auto
+disable_ligatures always
+#modify_font baseline
+#modify_font cell_height
+
+window_padding_width 1
+placement_strategy top-left
+
+shell /bin/bash
+shell_integration enabled
+
+clear_all_shortcuts yes
+map kitty_mod+c copy_to_clipboard
+map kitty_mod+v paste_from_clipboard
+map ctrl+shift+u kitten unicode_input
+map ctrl+shift+f5 load_config_file
+
+update_check_interval 0
+confirm_os_window_close 0
+initial_window_width 720
+initial_window_height 480
+scrollback_lines 3000
+remember_window_size no
+linux_display_server wayland
+allow_remote_control no
+enabled_layouts splits,stack
+paste_actions confirm,confirm-if-large
+
+sync_to_monitor no
+# My understanding is that if repaint_delay equates to a refresh rate
+# of just under my monitor's that VRR can avoid all tearing.
+# ---------------------------------------------------------
+# This probably doesn't work out. According to the man page
+# repaint_delay is ignored if there is pending input.
+# Tearing is still easily observable.
+repaint_delay 7
+input_delay 1
+resize_debounce_time 0.025 0.5
+
+cursor_shape block
+#cursor_blink_interval -1 linear ease-out
+#cursor_stop_blinking_after 20.0
+cursor_trail 3
+cursor_trail_decay 0.075 0.425
+cursor_trail_start_threshold 3
+#cursor #${colo.foreground}
+#cursor none
+#cursor_text_color background
+
+foreground #eeeeee
+background #000000
+color0 #000000
+color1 #d75f00
+color2 #af5f00
+color3 #ffd75f
+color4 #005f5f
+color5 #ff5f87
+color6 #ffaf00
+color7 #eeeeee
+color8 #808080
+color9 #d78700
+color10 #af8700
+color11 #ffff5f
+color12 #00875f
+color13 #ff8787
+color14 #ffd700
+color15 #ffffff
+#selection_foreground #${colo.background}
+#selection_background #${colo.color6}
+#mark1_foreground #${colo.background}
+#mark1_background #${colo.color5}
+#mark2_foreground #${colo.background}
+#mark2_background #${colo.color6}
+#mark3_foreground #${colo.background}
+#mark3_background #${colo.color4}
+#background_opacity ${toString colo.alpha}
+#active_border_color #${colo.color4}
+#bell_border_color #${colo.color1}
+#inactive_border_color #${colo.color3}
+#active_tab_foreground #${colo.background}
+#active_tab_background #${colo.color5}
+#active_tab_font_style bold-italic
+#inactive_tab_foreground #${colo.background}
+#inactive_tab_background #${colo.color4}
+#url_color #${colo.color5}
diff --git a/files/nixpkgs-patches/.gitignore b/files/nixpkgs-patches/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/files/nixpkgs-patches/.gitignore
+++ /dev/null
diff --git a/files/nixpkgs-patches/425312.diff b/files/nixpkgs-patches/425312.diff
deleted file mode 100644
index f895dae..0000000
--- a/files/nixpkgs-patches/425312.diff
+++ /dev/null
@@ -1,143 +0,0 @@
-diff --git a/pkgs/applications/networking/msmtp/msmtpq-remove-binary-check.patch b/pkgs/by-name/ms/msmtp/msmtpq-remove-binary-check.patch
-similarity index 100%
-rename from pkgs/applications/networking/msmtp/msmtpq-remove-binary-check.patch
-rename to pkgs/by-name/ms/msmtp/msmtpq-remove-binary-check.patch
-diff --git a/pkgs/applications/networking/msmtp/msmtpq-systemd-logging.patch b/pkgs/by-name/ms/msmtp/msmtpq-systemd-logging.patch
-similarity index 70%
-rename from pkgs/applications/networking/msmtp/msmtpq-systemd-logging.patch
-rename to pkgs/by-name/ms/msmtp/msmtpq-systemd-logging.patch
-index a9db3e64580827..55f386bb31906a 100644
---- a/pkgs/applications/networking/msmtp/msmtpq-systemd-logging.patch
-+++ b/pkgs/by-name/ms/msmtp/msmtpq-systemd-logging.patch
-@@ -1,17 +1,17 @@
- diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
--index bcb384e..dbaf1b5 100755
-+index 28d0754..3eaac58 100755
- --- a/scripts/msmtpq/msmtpq
- +++ b/scripts/msmtpq/msmtpq
--@@ -92,6 +92,8 @@ if [ ! -v MSMTPQ_LOG ] ; then
-- fi
-+@@ -182,6 +182,8 @@ if [ -n "$MSMTPQ_LOG" ] ; then
-+ unset msmptq_log_dir
- fi
-- [ -d "$(dirname "$MSMTPQ_LOG")" ] || mkdir -p "$(dirname "$MSMTPQ_LOG")"
--+
-+
- +JOURNAL=@journal@
-- ## ======================================================================================
-++
-+ umask 077 # set secure permissions on created directories and files
-
-- ## msmtpq can use the following environment variables :
--@@ -144,6 +146,7 @@ on_exit() { # unlock the queue on exit if the lock was
-+ declare -i CNT # a count of mail(s) currently in the queue
-+@@ -214,6 +216,7 @@ on_exit() { # unlock the queue on exit if the lock was
- ## display msg to user, as well
- ##
- log() {
-@@ -19,7 +19,7 @@ index bcb384e..dbaf1b5 100755
- local ARG RC PFX
- PFX="$('date' +'%Y %d %b %H:%M:%S')"
- # time stamp prefix - "2008 13 Mar 03:59:45 "
--@@ -161,10 +164,19 @@ log() {
-+@@ -233,10 +236,19 @@ log() {
- done
- fi
-
-diff --git a/pkgs/applications/networking/msmtp/default.nix b/pkgs/by-name/ms/msmtp/package.nix
-similarity index 84%
-rename from pkgs/applications/networking/msmtp/default.nix
-rename to pkgs/by-name/ms/msmtp/package.nix
-index 60946106d0ddf1..c801fa83ee9b98 100644
---- a/pkgs/applications/networking/msmtp/default.nix
-+++ b/pkgs/by-name/ms/msmtp/package.nix
-@@ -9,6 +9,7 @@
- bash,
- coreutils,
- gnugrep,
-+ gnused,
- gnutls,
- gsasl,
- libidn2,
-@@ -20,6 +21,8 @@
- withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
- systemd,
- withScripts ? true,
-+ withLibnotify ? true,
-+ libnotify,
- gitUpdater,
- binlore,
- msmtp,
-@@ -28,13 +31,13 @@
- let
- inherit (lib) getBin getExe optionals;
-
-- version = "1.8.26";
-+ version = "1.8.30";
-
- src = fetchFromGitHub {
- owner = "marlam";
- repo = "msmtp";
- rev = "msmtp-${version}";
-- hash = "sha256-MV3fzjjyr7qZw/BbKgsSObX+cxDDivI+0ZlulrPFiWM=";
-+ hash = "sha256-aM2qId08zvT9LbncCQYHsklbvHVtcZJgr91JTjwpQ/0=";
- };
-
- meta = with lib; {
-@@ -112,13 +115,17 @@ let
- msmtpq = {
- scripts = [ "bin/msmtpq" ];
- interpreter = getExe bash;
-- inputs = [
-- binaries
-- coreutils
-- gnugrep
-- netcat-gnu
-- which
-- ] ++ optionals withSystemd [ systemd ];
-+ inputs =
-+ [
-+ binaries
-+ coreutils
-+ gnugrep
-+ gnused
-+ netcat-gnu
-+ which
-+ ]
-+ ++ optionals withSystemd [ systemd ]
-+ ++ optionals withLibnotify [ libnotify ];
- execer =
- [
- "cannot:${getBin binaries}/bin/msmtp"
-@@ -126,9 +133,15 @@ let
- ]
- ++ optionals withSystemd [
- "cannot:${getBin systemd}/bin/systemd-cat"
-+ ]
-+ ++ optionals withLibnotify [
-+ "cannot:${getBin libnotify}/bin/notify-send"
- ];
- fix."$MSMTP" = [ "msmtp" ];
-- fake.external = [ "ping" ] ++ optionals (!withSystemd) [ "systemd-cat" ];
-+ fake.external =
-+ [ "ping" ]
-+ ++ optionals (!withSystemd) [ "systemd-cat" ]
-+ ++ optionals (!withLibnotify) [ "notify-send" ];
- keep.source = [ "~/.msmtpqrc" ];
- };
-
-diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
-index 1f6cde48853370..2d89e07134d294 100644
---- a/pkgs/top-level/all-packages.nix
-+++ b/pkgs/top-level/all-packages.nix
-@@ -13308,10 +13308,6 @@ with pkgs;
-
- taxi-cli = with python3Packages; toPythonApplication taxi;
-
-- msmtp = callPackage ../applications/networking/msmtp {
-- autoreconfHook = buildPackages.autoreconfHook269;
-- };
--
- imapfilter = callPackage ../applications/networking/mailreaders/imapfilter.nix {
- lua = lua5;
- };
diff --git a/files/nixpkgs-patches/425843.diff b/files/nixpkgs-patches/425843.diff
deleted file mode 100644
index ded8544..0000000
--- a/files/nixpkgs-patches/425843.diff
+++ /dev/null
@@ -1,504 +0,0 @@
-diff --git a/pkgs/development/libraries/mesa/common.nix b/pkgs/development/libraries/mesa/common.nix
-index 18f999dd83599c..8242549b63007b 100644
---- a/pkgs/development/libraries/mesa/common.nix
-+++ b/pkgs/development/libraries/mesa/common.nix
-@@ -5,14 +5,14 @@
- # nix build .#legacyPackages.x86_64-darwin.mesa .#legacyPackages.aarch64-darwin.mesa
- rec {
- pname = "mesa";
-- version = "25.1.6";
-+ version = "25.2.0-rc1";
-
- src = fetchFromGitLab {
- domain = "gitlab.freedesktop.org";
- owner = "mesa";
- repo = "mesa";
- rev = "mesa-${version}";
-- hash = "sha256-SHYYezt2ez9awvIATEC6wVMZMuJUsOYXxlugs1Q6q7U=";
-+ hash = "sha256-iVDnJ0MoLQbpEpjfRUy3MV6pjhMTqUMxR4yf9jkuXKw=";
- };
-
- meta = {
-diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix
-index db9ec527358508..ee10017b9d5aa0 100644
---- a/pkgs/development/libraries/mesa/default.nix
-+++ b/pkgs/development/libraries/mesa/default.nix
-@@ -44,62 +44,53 @@
- enablePatentEncumberedCodecs ? true,
- withValgrind ? lib.meta.availableOn stdenv.hostPlatform valgrind-light,
-
-- galliumDrivers ?
-- [
-- "asahi" # Apple AGX, built on non-aarch64 for cross tools
-- "d3d12" # WSL emulated GPU (aka Dozen)
-- "iris" # new Intel (Broadwell+)
-- "llvmpipe" # software renderer
-- "nouveau" # Nvidia
-- "panfrost" # ARM Mali Midgard and up (T/G series), built on non-ARM for cross tools
-- "r300" # very old AMD
-- "r600" # less old AMD
-- "radeonsi" # new AMD (GCN+)
-- "softpipe" # older software renderer
-- "svga" # VMWare virtualized GPU
-- "virgl" # QEMU virtualized GPU (aka VirGL)
-- "zink" # generic OpenGL over Vulkan, experimental
-- ]
-- ++ lib.optionals (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isAarch32) [
-- "etnaviv" # Vivante GPU designs (mostly NXP/Marvell SoCs)
-- "freedreno" # Qualcomm Adreno (all Qualcomm SoCs)
-- "lima" # ARM Mali 4xx
-- "vc4" # Broadcom VC4 (Raspberry Pi 0-3)
-- ]
-- ++ lib.optionals stdenv.hostPlatform.isAarch64 [
-- "tegra" # Nvidia Tegra SoCs
-- "v3d" # Broadcom VC5 (Raspberry Pi 4)
-- ]
-- ++ lib.optionals stdenv.hostPlatform.isx86 [
-- "crocus" # Intel legacy, x86 only
-- "i915" # Intel extra legacy, x86 only
-- ],
-+ # We enable as many drivers as possible here, to build cross tools
-+ # and support emulation use cases (emulated x86_64 on aarch64, etc)
-+ galliumDrivers ? [
-+ "asahi" # Apple AGX
-+ "crocus" # Intel legacy
-+ "d3d12" # WSL emulated GPU (aka Dozen)
-+ "etnaviv" # Vivante GPU designs (mostly NXP/Marvell SoCs)
-+ "freedreno" # Qualcomm Adreno (all Qualcomm SoCs)
-+ "i915" # Intel extra legacy
-+ "iris" # new Intel (Broadwell+)
-+ "lima" # ARM Mali 4xx
-+ "llvmpipe" # software renderer
-+ "nouveau" # Nvidia
-+ "panfrost" # ARM Mali Midgard and up (T/G series)
-+ "r300" # very old AMD
-+ "r600" # less old AMD
-+ "radeonsi" # new AMD (GCN+)
-+ "softpipe" # older software renderer
-+ "svga" # VMWare virtualized GPU
-+ "tegra" # Nvidia Tegra SoCs
-+ "v3d" # Broadcom VC5 (Raspberry Pi 4)
-+ "vc4" # Broadcom VC4 (Raspberry Pi 0-3)
-+ "virgl" # QEMU virtualized GPU (aka VirGL)
-+ "zink" # generic OpenGL over Vulkan, experimental
-+ ],
- vulkanDrivers ?
- [
- "amd" # AMD (aka RADV)
-- "asahi" # Apple AGX, built on non-aarch64 for cross tools
-- "intel" # new Intel (aka ANV)
-- "microsoft-experimental" # WSL virtualized GPU (aka DZN/Dozen)
-- "nouveau" # Nouveau (aka NVK)
-- "swrast" # software renderer (aka Lavapipe)
-- ]
-- ++
-- lib.optionals
-- (stdenv.hostPlatform.isAarch -> lib.versionAtLeast stdenv.hostPlatform.parsed.cpu.version "6")
-- [
-- # QEMU virtualized GPU (aka VirGL)
-- # Requires ATOMIC_INT_LOCK_FREE == 2.
-- "virtio"
-- ]
-- ++ lib.optionals stdenv.hostPlatform.isAarch64 [
-+ "asahi" # Apple AGX
- "broadcom" # Broadcom VC5 (Raspberry Pi 4, aka V3D)
- "freedreno" # Qualcomm Adreno (all Qualcomm SoCs)
-+ # "gfxstream" # Android virtualized GPU, breaks on some targets, doesn't seem useful?
- "imagination-experimental" # PowerVR Rogue (currently N/A)
-+ "intel_hasvk" # Intel Haswell/Broadwell, "legacy" Vulkan driver (https://www.phoronix.com/news/Intel-HasVK-Drop-Dead-Code)
-+ "intel" # new Intel (aka ANV)
-+ "microsoft-experimental" # WSL virtualized GPU (aka DZN/Dozen)
-+ "nouveau" # Nouveau (aka NVK)
- "panfrost" # ARM Mali Midgard and up (T/G series)
-+ "swrast" # software renderer (aka Lavapipe)
- ]
-- ++ lib.optionals stdenv.hostPlatform.isx86 [
-- "intel_hasvk" # Intel Haswell/Broadwell, "legacy" Vulkan driver (https://www.phoronix.com/news/Intel-HasVK-Drop-Dead-Code)
-- ],
-+ ++ lib.optionals
-+ (stdenv.hostPlatform.isAarch -> lib.versionAtLeast stdenv.hostPlatform.parsed.cpu.version "6")
-+ [
-+ # QEMU virtualized GPU (aka VirGL)
-+ # Requires ATOMIC_INT_LOCK_FREE == 2.
-+ "virtio"
-+ ],
- eglPlatforms ? [
- "x11"
- "wayland"
-@@ -117,40 +108,26 @@
- }:
-
- let
-- rustDeps = [
-- {
-- pname = "paste";
-- version = "1.0.14";
-- hash = "sha256-+J1h7New5MEclUBvwDQtTYJCHKKqAEOeQkuKy+g0vEc=";
-- }
-- {
-- pname = "proc-macro2";
-- version = "1.0.86";
-- hash = "sha256-9fYAlWRGVIwPp8OKX7Id84Kjt8OoN2cANJ/D9ZOUUZE=";
-- }
-- {
-- pname = "quote";
-- version = "1.0.33";
-- hash = "sha256-VWRCZJO0/DJbNu0/V9TLaqlwMot65YjInWT9VWg57DY=";
-- }
-- {
-- pname = "syn";
-- version = "2.0.68";
-- hash = "sha256-nGLBbxR0DFBpsXMngXdegTm/o13FBS6QsM7TwxHXbgQ=";
-- }
-- {
-- pname = "unicode-ident";
-- version = "1.0.12";
-- hash = "sha256-KX8NqYYw6+rGsoR9mdZx8eT1HIPEUUyxErdk2H/Rlj8=";
-- }
-- ];
-+ rustDeps = lib.importJSON ./wraps.json;
-+
-+ handleRustDep = dep: ''
-+ (
-+ echo "Preparing Rust dependency wrap ${dep.pname}-${dep.version}..."
-+
-+ wrapDir=subprojects/packagefiles/${dep.pname}
-+ outDir=subprojects/${dep.pname}-${dep.version}
-+
-+ mkdir -p $outDir
-+ tar -C $outDir -xf ${fetchCrate (dep // { unpack = false; })} --strip-components=1
-+ cp $wrapDir/meson.build $outDir
-
-- copyRustDep = dep: ''
-- cp -R --no-preserve=mode,ownership ${fetchCrate dep} subprojects/${dep.pname}-${dep.version}
-- cp -R subprojects/packagefiles/${dep.pname}/* subprojects/${dep.pname}-${dep.version}/
-+ for patch in $wrapDir/*.patch; do
-+ patch -d $outDir -i $(readlink -f $patch) -p1
-+ done
-+ )
- '';
-
-- copyRustDeps = lib.concatStringsSep "\n" (builtins.map copyRustDep rustDeps);
-+ copyRustDeps = lib.concatStringsSep "\n" (builtins.map handleRustDep rustDeps);
-
- needNativeCLC = !stdenv.buildPlatform.canExecute stdenv.hostPlatform;
-
-@@ -227,13 +204,6 @@ stdenv.mkDerivation {
- (lib.mesonEnable "gbm" true)
- (lib.mesonBool "libgbm-external" true)
-
-- (lib.mesonBool "gallium-nine" false) # Direct3D9 in Wine, largely supplanted by DXVK
--
-- # Only used by xf86-video-vmware, which has more features than VMWare's KMS driver,
-- # so we're keeping it for now. Should be removed when that's no longer the case.
-- # See: https://github.com/NixOS/nixpkgs/pull/392492
-- (lib.mesonEnable "gallium-xa" true)
--
- (lib.mesonBool "teflon" true) # TensorFlow frontend
-
- # Enable all freedreno kernel mode drivers. (For example, virtio can be
-@@ -241,9 +211,6 @@ stdenv.mkDerivation {
- # is ignored when freedreno is not being built.
- (lib.mesonOption "freedreno-kmds" "msm,kgsl,virtio,wsl")
-
-- # Enable Intel RT stuff when available
-- (lib.mesonEnable "intel-rt" stdenv.hostPlatform.isx86_64)
--
- # Required for OpenCL
- (lib.mesonOption "clang-libdir" "${lib.getLib llvmPackages.clang-unwrapped}/lib")
-
-@@ -251,15 +218,16 @@ stdenv.mkDerivation {
- (lib.mesonBool "gallium-rusticl" true)
- (lib.mesonOption "gallium-rusticl-enable-drivers" "auto")
-
-- # meson auto_features enables this, but we do not want it
-- (lib.mesonEnable "android-libbacktrace" false)
-- (lib.mesonEnable "microsoft-clc" false) # Only relevant on Windows (OpenCL 1.2 API on top of D3D12)
--
- # Enable more sensors in gallium-hud
- (lib.mesonBool "gallium-extra-hud" true)
-
- # Disable valgrind on targets where it's not available
- (lib.mesonEnable "valgrind" withValgrind)
-+
-+ # meson auto_features enables these, but we do not want them
-+ (lib.mesonEnable "gallium-mediafoundation" false) # Windows only
-+ (lib.mesonEnable "android-libbacktrace" false) # Android only
-+ (lib.mesonEnable "microsoft-clc" false) # Only relevant on Windows (OpenCL 1.2 API on top of D3D12)
- ]
- ++ lib.optionals enablePatentEncumberedCodecs [
- (lib.mesonOption "video-codecs" "all")
-diff --git a/pkgs/development/libraries/mesa/opencl.patch b/pkgs/development/libraries/mesa/opencl.patch
-index 9d40da82f85649..d71f168d83cf12 100644
---- a/pkgs/development/libraries/mesa/opencl.patch
-+++ b/pkgs/development/libraries/mesa/opencl.patch
-@@ -1,23 +1,23 @@
- diff --git a/meson.build b/meson.build
--index c150bff74ff..37fa7f0531b 100644
-+index 393f3ac1b93..fbc90b5645e 100644
- --- a/meson.build
- +++ b/meson.build
--@@ -1850,7 +1850,7 @@ endif
-+@@ -1836,7 +1836,7 @@ endif
-
- dep_clang = null_dep
-- if with_clc or with_gallium_clover
-+ if with_clc
- - llvm_libdir = dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir')
- + llvm_libdir = get_option('clang-libdir')
-
- dep_clang = cpp.find_library('clang-cpp', dirs : llvm_libdir, required : false)
-
--diff --git a/meson_options.txt b/meson_options.txt
--index 82324617884..4bde97a8568 100644
-+diff --git a/meson.options b/meson.options
-+index b1cdb06fcc9..3e8861979ae 100644
- --- a/meson.options
- +++ b/meson.options
--@@ -738,3 +738,10 @@ option(
-- 'none', 'dri2'
-- ],
-+@@ -856,3 +856,10 @@ option(
-+ value : false,
-+ description : 'Build virtgpu_kumquat (only useful with gfxstream currently)'
- )
- +
- +option(
-@@ -26,24 +26,11 @@ index 82324617884..4bde97a8568 100644
- + value : '',
- + description : 'Locations to search for clang libraries.'
- +)
--diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build
--index ab2c83556a8..a59e88e122f 100644
----- a/src/gallium/targets/opencl/meson.build
--+++ b/src/gallium/targets/opencl/meson.build
--@@ -56,7 +56,7 @@ if with_opencl_icd
-- configuration : _config,
-- input : 'mesa.icd.in',
-- output : 'mesa.icd',
--- install : true,
--+ install : false,
-- install_tag : 'runtime',
-- install_dir : join_paths(get_option('sysconfdir'), 'OpenCL', 'vendors'),
-- )
- diff --git a/src/gallium/targets/rusticl/meson.build b/src/gallium/targets/rusticl/meson.build
--index 35833dc7423..41a95927cab 100644
-+index 2b214adbbf5..7f919397ad5 100644
- --- a/src/gallium/targets/rusticl/meson.build
- +++ b/src/gallium/targets/rusticl/meson.build
--@@ -63,7 +63,7 @@ configure_file(
-+@@ -64,7 +64,7 @@ configure_file(
- configuration : _config,
- input : 'rusticl.icd.in',
- output : 'rusticl.icd',
-diff --git a/pkgs/development/libraries/mesa/update-wraps.py b/pkgs/development/libraries/mesa/update-wraps.py
-new file mode 100644
-index 00000000000000..037dfc0397b24b
---- /dev/null
-+++ b/pkgs/development/libraries/mesa/update-wraps.py
-@@ -0,0 +1,50 @@
-+import base64
-+import binascii
-+import configparser
-+import json
-+import pathlib
-+import sys
-+import urllib.parse
-+
-+
-+def to_sri(hash: str):
-+ raw = binascii.unhexlify(hash)
-+ b64 = base64.b64encode(raw).decode()
-+ return f"sha256-{b64}"
-+
-+
-+def main(dir: str):
-+ result = []
-+ for file in (pathlib.Path(dir) / "subprojects").glob("*.wrap"):
-+ name = file.stem
-+ parser = configparser.ConfigParser()
-+ _ = parser.read(file)
-+ sections = parser.sections()
-+ if "wrap-file" not in sections:
-+ continue
-+
-+ url = parser.get("wrap-file", "source_url")
-+ if "crates.io" not in url:
-+ continue
-+
-+ parsed = urllib.parse.urlparse(url)
-+ path = parsed.path.split("/")
-+ assert path[4] == name
-+ version = path[5]
-+
-+ hash = to_sri(parser.get("wrap-file", "source_hash"))
-+
-+ result.append({
-+ "pname": name,
-+ "version": version,
-+ "hash": hash,
-+ })
-+
-+ here = pathlib.Path(__file__).parent
-+ with (here / "wraps.json").open("w") as fd:
-+ json.dump(result, fd, indent=4)
-+ _ = fd.write("\n")
-+
-+
-+if __name__ == '__main__':
-+ main(*sys.argv[1:])
-diff --git a/pkgs/development/libraries/mesa/wraps.json b/pkgs/development/libraries/mesa/wraps.json
-new file mode 100644
-index 00000000000000..5b185c2d56239b
---- /dev/null
-+++ b/pkgs/development/libraries/mesa/wraps.json
-@@ -0,0 +1,137 @@
-+[
-+ {
-+ "pname": "errno",
-+ "version": "0.3.12",
-+ "hash": "sha256-zqFO+TVeO+qwY3A6qdqxWv0l8GZ8NBMQweUnS7HQ2hg="
-+ },
-+ {
-+ "pname": "quote",
-+ "version": "1.0.35",
-+ "hash": "sha256-KR7Jq179k0qvUDpkZsXVJRU10QjudHRyw5d8xazIaO8="
-+ },
-+ {
-+ "pname": "pest",
-+ "version": "2.8.0",
-+ "hash": "sha256-GY23RTHVjHCjYcQiAe/efiWR6XbVGMr3ZipH3Fcg57Y="
-+ },
-+ {
-+ "pname": "equivalent",
-+ "version": "1.0.1",
-+ "hash": "sha256-VEOAfW3/aTc9Qzq571N4rY31DKYpjK8V3m5S4kqvVNU="
-+ },
-+ {
-+ "pname": "syn",
-+ "version": "2.0.87",
-+ "hash": "sha256-JapM40bQOm3NaN2LQBC8t05U5iyQxXPzlMRurpmroy0="
-+ },
-+ {
-+ "pname": "remain",
-+ "version": "0.2.12",
-+ "hash": "sha256-GtXgESMMrSdNBTJGDFq2mCjqR651aBtCqEFmPv/695Q="
-+ },
-+ {
-+ "pname": "unicode-ident",
-+ "version": "1.0.12",
-+ "hash": "sha256-M1S5rD+uH/Z1XLbbU2g622YWNPZ1V5Qt6k+s6+wP7ks="
-+ },
-+ {
-+ "pname": "cfg-if",
-+ "version": "1.0.0",
-+ "hash": "sha256-uvHeQzl2FYi8Bhnjy8ASDuWC67dLU7Tvv3kRe9LaQP0="
-+ },
-+ {
-+ "pname": "bitflags",
-+ "version": "2.9.1",
-+ "hash": "sha256-G45WmF7GLRfpwQAdyJyI7NfcCOR+ul7Hwpx7Xu7N6Wc="
-+ },
-+ {
-+ "pname": "pest_derive",
-+ "version": "2.8.0",
-+ "hash": "sha256-1yXZz9eeh9zMk0Gi7znRtvY1PWjEszwXf+u+GkAsl8U="
-+ },
-+ {
-+ "pname": "rustc-hash",
-+ "version": "2.1.1",
-+ "hash": "sha256-NXcD1BNltLJ8WQ4+2R6rsbZj8HxMCECV5gy+1DYt/w0="
-+ },
-+ {
-+ "pname": "ucd-trie",
-+ "version": "0.1.6",
-+ "hash": "sha256-7WRikv/IGI746k0eDgFQ+xWlwuEq2bj8GRrnqKfzxLk="
-+ },
-+ {
-+ "pname": "indexmap",
-+ "version": "2.2.6",
-+ "hash": "sha256-Fo+3Fd2kchXjYJEsCWZJ0j1Yvzkqxi9zkZ6DF0XkDyY="
-+ },
-+ {
-+ "pname": "paste",
-+ "version": "1.0.14",
-+ "hash": "sha256-3jFFrwgCTeqfqZFPOBoXuPxgNN+wDzqEAT9/9D8p7Uw="
-+ },
-+ {
-+ "pname": "hashbrown",
-+ "version": "0.14.1",
-+ "hash": "sha256-ff2mKhL1Xa6uUBX4GwuuoUU5HLRSD4bCSPxhXXJkDRI="
-+ },
-+ {
-+ "pname": "libc",
-+ "version": "0.2.168",
-+ "hash": "sha256-Wq6ymB4GBsoR15cY+LsBFk8dbtdQgBgtOr8Bfm0kS20="
-+ },
-+ {
-+ "pname": "thiserror-impl",
-+ "version": "2.0.11",
-+ "hash": "sha256-Jq/BuuqKmJM37rUrbnKgOXgM5Fw+38ycW50RL+6xc8I="
-+ },
-+ {
-+ "pname": "once_cell",
-+ "version": "1.8.0",
-+ "hash": "sha256-aS/LY7ZLF1gCngqW7mPgSc6MWUhYfy9yCN8EYl5fa1Y="
-+ },
-+ {
-+ "pname": "rustix",
-+ "version": "1.0.7",
-+ "hash": "sha256-xx6D1q/n/2SJDsa3HWppu4phCreM42SzNSh2u0yAEmY="
-+ },
-+ {
-+ "pname": "pest_generator",
-+ "version": "2.8.0",
-+ "hash": "sha256-230Bcmvoq2arMvnfRnrosRSJBmhbvnXILR5l1/Wz+EE="
-+ },
-+ {
-+ "pname": "thiserror",
-+ "version": "2.0.11",
-+ "hash": "sha256-1FLyhLc+bXbdNnWKDIaEsdW+MfkridB/1YIhdXMiBvw="
-+ },
-+ {
-+ "pname": "proc-macro2",
-+ "version": "1.0.86",
-+ "hash": "sha256-XnGejfZl3w0cj7/SOAFXRHNhUdREXsCDa45iiq4QO3c="
-+ },
-+ {
-+ "pname": "zerocopy",
-+ "version": "0.8.13",
-+ "hash": "sha256-Z5FKtFHzv9Lmnl6dLvOFhITnB01j8gT9Fm7DkbVN4h0="
-+ },
-+ {
-+ "pname": "roxmltree",
-+ "version": "0.20.0",
-+ "hash": "sha256-bCC2eTtcL6ZVOyUBVLeNbQ2zfnJwCuNfrZOHpG9IfJc="
-+ },
-+ {
-+ "pname": "zerocopy-derive",
-+ "version": "0.8.13",
-+ "hash": "sha256-eYjXOkMDyiid8DMWvEkOk0rM83Gva8dFOTzzwsXE8l0="
-+ },
-+ {
-+ "pname": "pest_meta",
-+ "version": "2.8.0",
-+ "hash": "sha256-f5+DJHBJSQbR/KUyn4q1eRzGC+sjDHSBXf9UHL0rXKA="
-+ },
-+ {
-+ "pname": "log",
-+ "version": "0.4.27",
-+ "hash": "sha256-E9wt81HjICeDof4NRDdfcpX/tASSZ7DzAYNG3BIqHZQ="
-+ }
-+]
-diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix
-index 49f4838a058bda..6e14ad71a2b48c 100644
---- a/pkgs/servers/x11/xorg/overrides.nix
-+++ b/pkgs/servers/x11/xorg/overrides.nix
-@@ -829,7 +829,6 @@ self: super:
- });
-
- xf86videovmware = super.xf86videovmware.overrideAttrs (attrs: {
-- buildInputs = attrs.buildInputs ++ [ mesa ];
- env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error=address" ]; # gcc12
- meta = attrs.meta // {
- platforms = [
diff --git a/files/nixpkgs-patches/4c3870b23dded4e75292be48bdb03cd870fb1719.diff b/files/nixpkgs-patches/4c3870b23dded4e75292be48bdb03cd870fb1719.diff
deleted file mode 100644
index 950ee0e..0000000
--- a/files/nixpkgs-patches/4c3870b23dded4e75292be48bdb03cd870fb1719.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/pkgs/development/libraries/mesa/common.nix b/pkgs/development/libraries/mesa/common.nix
-index d6377d6de7dabd..18f999dd83599c 100644
---- a/pkgs/development/libraries/mesa/common.nix
-+++ b/pkgs/development/libraries/mesa/common.nix
-@@ -5,14 +5,14 @@
- # nix build .#legacyPackages.x86_64-darwin.mesa .#legacyPackages.aarch64-darwin.mesa
- rec {
- pname = "mesa";
-- version = "25.1.5";
-+ version = "25.1.6";
-
- src = fetchFromGitLab {
- domain = "gitlab.freedesktop.org";
- owner = "mesa";
- repo = "mesa";
- rev = "mesa-${version}";
-- hash = "sha256-AZAd1/wiz8d0lXpim9obp6/K7ySP12rGFe8jZrc9Gl0=";
-+ hash = "sha256-SHYYezt2ez9awvIATEC6wVMZMuJUsOYXxlugs1Q6q7U=";
- };
-
- meta = {
diff --git a/files/nvim/fzf_no_linenum.diff b/files/nvim/fzf_no_linenum.diff
deleted file mode 100644
index bed26be..0000000
--- a/files/nvim/fzf_no_linenum.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim
-index 67945c3..ccfe729 100755
---- a/autoload/fzf/vim.vim
-+++ b/autoload/fzf/vim.vim
-@@ -789,7 +789,7 @@ endfunction
-
- function! fzf#vim#_format_buffer(b)
- let name = bufname(a:b)
-- let line = exists('*getbufinfo') ? getbufinfo(a:b)[0]['lnum'] : 0
-+ "let line = exists('*getbufinfo') ? getbufinfo(a:b)[0]['lnum'] : 0
- let fullname = empty(name) ? '' : fnamemodify(name, ":p:~:.")
- let dispname = empty(name) ? '[No Name]' : name
- let flag = a:b == bufnr('') ? s:blue('%', 'Conditional') :
-@@ -797,8 +797,8 @@ function! fzf#vim#_format_buffer(b)
- let modified = getbufvar(a:b, '&modified') ? s:red(' [+]', 'Exception') : ''
- let readonly = getbufvar(a:b, '&modifiable') ? '' : s:green(' [RO]', 'Constant')
- let extra = join(filter([modified, readonly], '!empty(v:val)'), '')
-- let target = empty(name) ? '' : (line == 0 ? fullname : fullname.':'.line)
-- return s:rstrip(printf("%s\t%d\t[%s] %s\t%s\t%s", target, line, s:yellow(a:b, 'Number'), flag, dispname, extra))
-+ let target = empty(name) ? '' : (fullname)
-+ return s:rstrip(printf("%s\t[%s] %s\t%s\t%s", target, s:yellow(a:b, 'Number'), flag, dispname, extra))
- endfunction
-
- function! s:sort_buffers(...)
diff --git a/files/nvim/init.vim b/files/nvim/init.vim
deleted file mode 100644
index 780f9d5..0000000
--- a/files/nvim/init.vim
+++ /dev/null
@@ -1,368 +0,0 @@
-" Basic settings.
-set number
-set noshowmode
-set signcolumn=yes
-set updatetime=250
-set scrolloff=5
-
-" Change directory based on current file.
-if !empty($NIX_SHELL)
- " Attempt to conflict less with plugins.
- autocmd BufEnter * if gitbranch#name() != '' | silent! lcd %:p:h
-else
- set autochdir
-endif
-
-" inotify compat?
-set backupcopy=yes
-
-" Old defaults (I think).
-set splitright
-set splitbelow
-
-" Syntax and indent from filetype.
-set nocompatible
-filetype plugin indent on
-syntax on
-
-" Check for SHIFT_JIS.
-set fileencodings=ucs-bom,utf-8,sjis,default,latin1
-
-" 4 spaces autoindent.
-set tabstop=4
-set shiftwidth=4
-set expandtab
-set autoindent
-
-" C syntax preference.
-let g:c_syntax_for_h=1
-let g:c_no_curly_error=1
-let g:c_function_pointers=1
-set cinoptions=:0,=4,l1,g2,h2,(4,u4,+4,m1,j1,J1
-set cindent
-
-" Set different format for mail and text files.
-set nowrap nolinebreak nolist formatoptions=l textwidth=0
-autocmd FileType mail,text setlocal wrap formatoptions=l textwidth=0
-
-" Ex tab complete that makes sense to me.
-set wildmode=longest,list,full
-set wildmenu
-
-" Allow distinguishing <C-i> from <Tab> in bindings.
-let &t_TI = '\<Esc>[>4;2m'
-let &t_TE = '\<Esc>[>4;m'
-" Treat shift + backspace as normal backspace.
-tnoremap <S-BS> <BS>
-
-" System clipboard on linux.
-set clipboard+=unnamedplus
-
-" Session options.
-set ssop=skiprtp,blank,buffers,folds,winsize,terminal
-set vop-=curdir
-if isdirectory(expand('~/c'))
- let view_dir = expand('~/c/sessions/views')
- if !isdirectory(view_dir)
- call mkdir(view_dir, 'p', 0755)
- endif
- let &viewdir=view_dir
-
- " Staggered backups.
- let backup_dir = '/mnt/store/backup/vim'
- if !isdirectory(backup_dir)
- let backup_dir = expand('~/c/sessions/backup//')
- if !isdirectory(backup_dir)
- call mkdir(backup_dir, 'p', 0755)
- endif
- endif
- let &backupdir=backup_dir
- set backup
-
- " Swap file directory.
- let swap_dir = expand('~/c/sessions/swaps//')
- if !isdirectory(swap_dir)
- call mkdir(swap_dir, 'p', 0755)
- endif
- let &directory=swap_dir
-
- if has('persistent_undo')
- let undo_dir = expand('~/c/sessions/undo')
- if !isdirectory(undo_dir)
- call mkdir(undo_dir, 'p', 0755)
- endif
- let &undodir=undo_dir
- set undofile
- endif
-endif
-
-" Colorscheme.
-set termguicolors
-colo wal-gui
-
-" Cursor blink.
-"set guicursor=a:blinkon1
-
-" Highlight whitespace.
-au BufEnter * match ExtraWhitespace /\s\+$/
-au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
-au InsertLeave * match ExtraWhitespace /\s\+$/
-
-" Fzf format.
-let g:fzf_colors = {
- \'fg': ['fg', 'Normal'],
- \'bg': ['bg', 'Normal'],
- \'hl': ['fg', 'Type'],
- \'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
- \'bg+': ['bg', 'CursorLine', 'CursorColumn'],
- \'hl+': ['fg', 'Type'],
- \'info': ['fg', 'PreProc'],
- \'border': ['fg', 'Operator'],
- \'prompt': ['fg', 'Identifier'],
- \'pointer': ['fg', 'Type'],
- \'marker': ['fg', 'Keyword'],
- \'spinner': ['fg', 'String'],
- \'header': ['fg', 'Type']
-\}
-let g:fzf_preview_window = ['right,55%']
-" This is redundant but I want to keep FZF_DEFAULT_OPTS here.
-let $FZF_DEFAULT_OPTS = '--preview-window=border-sharp'
-let g:fzf_layout = {
- \'window': { 'width': 0.75, 'height': 0.60, 'rounded': 0 },
-\}
-
-function! StatuslineMode() abort
- if mode() == nr2char(22)
- return mode()
- else
- return '-'.mode()
- endif
-endfunction
-
-function! StatuslineGit()
- let l:branchname = gitbranch#name()
- return strlen(l:branchname) > 0 ? ' '.l:branchname.' ' : ' '
-endfunction
-
-function! StatuslineLsp() abort
- return luaeval('get_lsp_name()')
-endfunction
-
-" Custom statusline.
-function! Statusline() abort
- let focused = g:statusline_winid == win_getid(winnr())
- let status = focused ? '%#StatusLine#' : '%#StatusLineNC#'
- let status .= '%{StatuslineGit()}'
- let status .= ' %f'
- let status .= ' vim@%{hostname()}'
- let status .= '%='
- let status .= ' %y'
- let status .= '%{StatuslineLsp()}'
- let status .= ' %{&fileencoding}'
- let status .= '[%{&fileformat}]'
- let status .= '%3p%%'
- let status .= ' %3l:%-3c'
- return status
-endfunction
-set statusline=%!Statusline()
-
-" Make shift + nav keys no-ops.
-nmap H <nop>
-nmap J <nop>
-nmap K <nop>
-nmap L <nop>
-" Normal mode tab no-op.
-nmap <Tab> <nop>
-" ctrl + c no-op.
-nmap <C-c> <nop>
-" Disable F1 for help.
-nmap <F1> <nop>
-" Disable q: for histroy.
-nmap q: <nop>
-" Simplify split movement.
-nmap <silent> <C-h> :wincmd h<CR>
-nmap <silent> <C-j> :wincmd j<CR>
-nmap <silent> <C-k> :wincmd k<CR>
-nmap <silent> <C-l> :wincmd l<CR>
-nmap <silent> <C-o> :vsplit<CR>
-" Make ctrl + '.' and ',' map to previous buffer.
-nmap <C-,> <C-^>
-nmap <C-.> <C-^>
-" Swap ctrl + f and b.
-"nnoremap <C-b> <C-f>
-"nnoremap <C-f> <C-b>
-" Toggle colorcolumn.
-nmap <silent> C :execute 'set colorcolumn=' . (&colorcolumn == '' ? '101' : '')<CR>
-" Personally intuitive pop-up menu binds.
-inoremap <expr> <CR> pumvisible() ? '<C-y><CR>' : '<CR>'
-inoremap <expr> <Up> pumvisible() ? '<C-p>' : '<Up>'
-inoremap <expr> <Down> pumvisible() ? '<C-n>' : '<Down>'
-" Lsp Binds.
-nmap <C-d> <C-]>
-" Fzf binds.
-nmap <silent> \ :Buffers<CR>
-nmap <silent> <C-i> :GGrep<CR>
-nmap <silent> <C-\> :GFiles<CR>
-" Only Neogit bind, handle all further operations from this menu.
-nmap <silent> Y :Neogit<CR>
-nmap <silent> L :lua neogit_log_current()<CR>
-" Undotree.
-nmap <silent> U :UndotreeToggle<CR>
-" Toggle hex color highlighting.
-nnoremap <silent> # :CccHighlighterToggle<CR>
-
-command Tabify set noexpandtab | %retab! | set expandtab
-command Untabify set expandtab | %retab!
-
-" https://stackoverflow.com/a/37040415
-function! SyntaxGroup()
- let l:s = synID(line('.'), col('.'), 1)
- echo synIDattr(l:s, 'name') . ' -> ' . synIDattr(synIDtrans(l:s), 'name')
-endfun
-
-" https://vi.stackexchange.com/a/456
-function! TrimWhitespace()
- let l:save = winsaveview()
- keeppatterns %s/\s\+$//e
- call winrestview(l:save)
-endfun
-
-" https://github.com/junegunn/fzf.vim?tab=readme-ov-file#example-git-grep-wrapper
-command! -bang -nargs=* GGrep
- \ call fzf#vim#grep(
- \ 'git grep --line-number -- '.fzf#shellescape(<q-args>),
- \ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0)
-
-" https://vim.fandom.com/wiki/Replace_a_builtin_command_using_cabbrev
-function! CommandCabbr(abbreviation, expansion)
- execute 'cabbr ' . a:abbreviation . ' <C-R>=getcmdpos() == 1 && getcmdtype() == ":" ? "' . a:expansion . '" : "' . a:abbreviation . '"<CR>'
-endfunction
-command! -nargs=+ CommandCabbr call CommandCabbr(<f-args>)
-CommandCabbr no nohlsearch
-
-call Juliana#Init() " Custom insert mode tab behavior inherited from Emacs.
-inoremap <silent><Tab> <C-R>=Juliana#CompleteTab('START')<CR>
- \<C-R>=Juliana#CompleteTab('TAB')<CR>
- \<C-R>=Juliana#CompleteTab('ALIGN')<CR>
- \<C-R>=Juliana#CompleteTab('NEXT')<CR>
-inoremap <silent><S-Tab> <C-R>=Juliana#CompleteSTab('PREV')<CR>
-
-lua << EOF
-function get_lsp_name()
- local active_clients = vim.lsp.get_clients({bufnr = vim.api.nvim_get_current_buf()})
- if next(active_clients) == nil then
- return ''
- else
- str = '<'
- for _, v in pairs(active_clients) do
- str = str .. v.name .. '+'
- end
- return str:sub(1, -2) .. '>'
- end
-end
-
-buf_is_big = function(bufnr)
- local max_filesize = 100 * 1024 -- 100KB
- local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(bufnr))
- if ok and stats and stats.size > max_filesize then
- return true
- else
- return false
- end
-end
-
--- LSP configs.
-if os.getenv('NIX_SHELL') ~= nil then
- vim.diagnostic.config({ virtual_text = true })
- vim.lsp.config('clangd', {
- cmd = {
- 'clangd',
- '-j=4',
- '--log=error',
- '--malloc-trim',
- '--background-index',
- '--clang-tidy',
- '--completion-style=bundled',
- '--pch-storage=memory',
- '--header-insertion=never',
- '--header-insertion-decorators=0',
- '--query-driver=gcc'
- },
- capabilities = {
- textDocument = {
- semanticHighlightingCapabilities = {
- semanticHighlighting = true
- },
- completion = {
- completionItem = {
- snippetSupport = false
- }
- }
- }
- },
- })
- vim.lsp.enable({'clangd', 'ruff', 'ty'})
- -- https://github.com/neovim/nvim-lspconfig/issues/2626#issuecomment-2117022664
- -- https://github.com/neovim/nvim-lspconfig/issues/2508
- vim.api.nvim_create_autocmd('BufReadPre', {
- callback = function(t)
- if buf_is_big(t.buf) then
- vim.o.eventignore = 'FileType'
- vim.schedule(function()
- vim.o.eventignore = ''
- print('Dropped FileType events because the buffer is too big')
- end)
- end
- end
- })
- require('inc_rename').setup({})
- vim.keymap.set('n', '<C-n>', function()
- return ':IncRename ' .. vim.fn.expand('<cword>')
- end, { expr = true })
-end
-
--- Set sessions folder and autowrite.
-if vim.fn.isdirectory(vim.fn.expand('~/c')) then
- require('mini.sessions').setup({
- autoread = false,
- autowrite = true,
- directory = '~/c/sessions'
- })
-end
-
--- Completion.
-require('mini.completion').setup({
- window = {
- info = { border = 'none' },
- signature = { border = 'none' }
- }
-})
-
--- Don't use tabs in Neogit.
-require('neogit').setup({
- disable_hint = true,
- kind = 'vsplit',
- commit_editor = { kind = 'split' },
- commit_select_view = { kind = 'vsplit' },
- commit_view = { kind = 'vsplit' },
- log_view = { kind = 'split' },
- reflog_view = { kind = 'split' },
- preview_buffer = { kind = 'split' },
- popup = { kind = 'split' },
- refs_view = { kind = 'split' },
- -- Allow basic movement in Neogit without mapping conflicts.
- mappings = {
- popup = { ['l'] = false, ['L'] = 'LogPopup', ['d'] = false },
- status = { ['$'] = false, ['#'] = 'CommandHistory' }
- },
- integrations = {}
-})
-
--- Doesn't work consistently.
-function neogit_log_current()
- require("neogit").action("log", "log_current", { "--", vim.fn.expand("%:p") })()
-end
-
--- Preview colors in #<hex> format.
-require('ccc').setup({ highlighter = { auto_enable = false, lsp = true } })
-EOF
diff --git a/files/nvim/mini_completion_no_title.diff b/files/nvim/mini_completion_no_title.diff
deleted file mode 100644
index e69de29..0000000
--- a/files/nvim/mini_completion_no_title.diff
+++ /dev/null
diff --git a/files/nvim/mini_starter_picture.diff b/files/nvim/mini_starter_picture.diff
deleted file mode 100644
index 2efc2a1..0000000
--- a/files/nvim/mini_starter_picture.diff
+++ /dev/null
@@ -1,288 +0,0 @@
-diff --git a/lua/mini/starter.lua b/lua/mini/starter.lua
-index 66d46a52..9b7e4397 100644
---- a/lua/mini/starter.lua
-+++ b/lua/mini/starter.lua
-@@ -138,7 +138,7 @@
- --- local timer = vim.loop.new_timer()
- --- local n_seconds = 0
- --- timer:start(0, 1000, vim.schedule_wrap(function()
----- if vim.bo.filetype ~= 'ministarter' then
-+--- if vim.bo.filetype ~= 'dashboard' then
- --- timer:stop()
- --- return
- --- end
-@@ -239,6 +239,9 @@ MiniStarter.config = {
- -- If `nil` (default), default items will be used (see |mini.starter|).
- items = nil,
-
-+ -- Empty lines at the top of the content.
-+ top_padding = 0,
-+
- -- Header to be displayed before items. Converted to single string via
- -- `tostring` (use `\n` to display several lines). If function, it is
- -- evaluated first. If `nil` (default), polite greeting will be used.
-@@ -249,6 +252,12 @@ MiniStarter.config = {
- -- evaluated first. If `nil` (default), default usage help will be shown.
- footer = nil,
-
-+ -- Amount of empty lines between items and the footer.
-+ footer_offset = 1,
-+
-+ -- Picture to show to the side of the content.
-+ picture = nil,
-+
- -- Array of functions to be applied consecutively to initial content.
- -- Each function should take and return content for Starter buffer (see
- -- |mini.starter| and |MiniStarter.get_content()| for more details).
-@@ -373,7 +382,7 @@ MiniStarter.refresh = function(buf_id)
- data.footer = H.normalize_header_footer(config.footer or H.default_footer)
-
- -- Evaluate content
-- local content = H.make_initial_content(data.header, items, data.footer)
-+ local content = H.make_initial_content(data.header, items, data.footer, config)
- local hooks = config.content_hooks or H.default_content_hooks
- for _, f in ipairs(hooks) do
- content = f(content, buf_id)
-@@ -400,6 +409,16 @@ MiniStarter.refresh = function(buf_id)
-
- -- Apply current query (clear command line afterwards)
- H.make_query(buf_id)
-+
-+ -- The picture drawn here used to get cleared at some point
-+ -- that _usually_ came before any scheduled timers fired.
-+ -- That seems to not happen anymore (nvim-0.11.1, kitty 0.42.1).
-+ H.draw_picture(config, false)
-+ --local timer = vim.loop.new_timer()
-+ --timer:start(0, 0, vim.schedule_wrap(function()
-+ -- timer:stop()
-+ -- H.draw_picture(config, false)
-+ --end))
- end
-
- --- Close Starter buffer
-@@ -729,18 +748,45 @@ MiniStarter.gen_hook.aligning = function(horizontal, vertical)
- local win_id = vim.fn.bufwinid(buf_id)
- if win_id < 0 then return end
-
-+ local config = H.get_config()
-+
- local line_strings = MiniStarter.content_to_lines(content)
-
-+ H.win_width = vim.api.nvim_win_get_width(win_id)
-+ H.win_height = vim.api.nvim_win_get_height(win_id)
-+
- -- Align horizontally
- -- Don't use `string.len()` to account for multibyte characters
- local lines_width = vim.tbl_map(function(l) return vim.fn.strdisplaywidth(l) end, line_strings)
-- local min_right_space = vim.api.nvim_win_get_width(win_id) - math.max(unpack(lines_width))
-+ -- Ignore the max line width
-+ local min_right_space = H.win_width -- - math.max(unpack(lines_width))
- local left_pad = math.max(math.floor(horiz_coef * min_right_space), 0)
-
- -- Align vertically
-- local bottom_space = vim.api.nvim_win_get_height(win_id) - #line_strings
-+ local bottom_space = H.win_height - #line_strings
- local top_pad = math.max(math.floor(vert_coef * bottom_space), 0)
-
-+ -- Position picture
-+ if config.picture ~= nil then
-+ if config.picture.width == nil then config.picture.width = 25 end
-+ if config.picture.position ~= 'right' then config.picture.position = 'left' end
-+ if config.picture.padding == nil then config.picture.padding = {} end
-+ if config.picture.padding.left == nil then config.picture.padding.left = 0 end
-+ if config.picture.padding.top == nil then config.picture.padding.top = 0 end
-+ if config.picture.padding.text == nil then config.picture.padding.text = 0 end
-+
-+ local picture_left_pad = (config.picture.width / 2.0) - config.picture.padding.left
-+
-+ left_pad = left_pad + config.picture.padding.text
-+ if config.picture.position == 'left' then
-+ H.picture_x = left_pad - picture_left_pad
-+ else
-+ H.picture_x = left_pad + picture_left_pad
-+ end
-+ if H.picture_x < 0.0 then H.picture_x = 0.0 end
-+ H.picture_y = top_pad + config.picture.padding.top + config.top_padding
-+ end
-+
- return MiniStarter.gen_hook.padding(left_pad, top_pad)(content)
- end
- end
-@@ -1003,7 +1049,7 @@ H.default_footer = [[
- Type query to filter items
- <BS> deletes latest character from query
- <Esc> resets current query
--<Down/Up>, <C-n/p>, <M-j/k> move current item
-+<C-j/k> move current item
- <CR> executes action of current item
- <C-c> closes this buffer]]
-
-@@ -1044,8 +1090,54 @@ end
-
- H.apply_config = function(config) MiniStarter.config = config end
-
-+H.is_file_readable = function(path)
-+ return vim.fn.filereadable(vim.fn.expand(path)) ~= 0
-+end
-+
-+H.draw_picture = function(config, clear)
-+ if config ~= nil then
-+ if config.picture == nil or config.picture.path == nil or not H.is_file_readable(config.picture.path) then return end
-+ else
-+ -- No picture, so nothing to clear
-+ if H.picture_x == nil or H.picture_y == nil then return end
-+ end
-+ local cmd = ''
-+ if clear and not config.picture.kitty then
-+ cmd = ('for i in $(seq %d %d); do tput cup $i 0 && tput el; done'):format(0, H.win_height - 1)
-+ else
-+ cmd = ('chafa %s --align left,top -s %dx%d 2>&1'):format(config.picture.path, config.picture.width, (H.win_height - 2) - H.picture_y)
-+ end
-+ -- Resizing will not clear on non-kitty mode
-+ local output = ''
-+ if config.picture.kitty then
-+ output = output .. '\027_Ga=d\027\\'
-+ end
-+ if not clear or not config.picture.kitty then
-+ local handle = io.popen(cmd)
-+ output = output .. handle:read('*a')
-+ -- `rc` doesn't work when run from inside vim (last tested in neovim-0.9)
-+ local rc = {handle:close()}
-+ end
-+ local tty, err = io.open('/proc/self/fd/0', 'wb')
-+ if tty then
-+ tty:write('\x1b[s')
-+ if not clear then
-+ tty:write(('\x1b[%d;%dH'):format(H.picture_y, H.picture_x))
-+ elseif not config.picture.kitty then
-+ tty:write('\x1b[48;5;0m')
-+ end
-+ tty:write(output)
-+ if not clear then
-+ tty:write('\x1b[u')
-+ end
-+ tty:close()
-+ else
-+ H.echo('Error opening tty: ' .. err)
-+ end
-+end
-+
- H.create_autocommands = function(config)
-- local gr = vim.api.nvim_create_augroup('MiniStarter', {})
-+ H.augroup = vim.api.nvim_create_augroup('MiniStarter', {})
-
- if config.autoopen then
- local on_vimenter = function()
-@@ -1057,7 +1149,7 @@ H.create_autocommands = function(config)
- vim.cmd('noautocmd lua MiniStarter.open()')
- end
-
-- local au_opts = { group = gr, nested = true, once = true, callback = on_vimenter, desc = 'Open on VimEnter' }
-+ local au_opts = { group = H.augroup, nested = true, once = true, callback = on_vimenter, desc = 'Open on VimEnter' }
- vim.api.nvim_create_autocmd('VimEnter', au_opts)
- end
-
-@@ -1103,9 +1195,11 @@ H.normalize_header_footer = function(x)
- end
-
- -- Work with buffer content ---------------------------------------------------
--H.make_initial_content = function(header, items, footer)
-+H.make_initial_content = function(header, items, footer, config)
- local content = {}
-
-+ H.content_add_empty_lines(content, config.top_padding)
-+
- -- Add header lines
- for _, l in ipairs(header) do
- H.content_add_line(content, { H.content_unit(l, 'header', 'MiniStarterHeader') })
-@@ -1116,7 +1210,7 @@ H.make_initial_content = function(header, items, footer)
- H.content_add_items(content, items)
-
- -- Add footer lines
-- H.content_add_empty_lines(content, #footer > 0 and 1 or 0)
-+ H.content_add_empty_lines(content, #footer > 0 and config.footer_offset or 0)
- for _, l in ipairs(footer) do
- H.content_add_line(content, { H.content_unit(l, 'footer', 'MiniStarterFooter') })
- end
-@@ -1319,11 +1413,23 @@ H.make_buffer_autocmd = function(buf_id)
- au('VimResized', function() MiniStarter.refresh(buf_id) end, 'Refresh')
- au('CursorMoved', function() H.position_cursor_on_current_item(buf_id) end, 'Position cursor')
-
-+ local config = H.get_config()
-+
- local cache_showtabline = vim.o.showtabline
- au('BufLeave', function()
- if vim.o.cmdheight > 0 then vim.cmd("echo ''") end
- if vim.o.showtabline == 1 then vim.o.showtabline = cache_showtabline end
-+ H.draw_picture(config, true)
- end, 'On BufLeave')
-+
-+ au('BufEnter', function()
-+ H.draw_picture(config, false)
-+ --local timer = vim.loop.new_timer()
-+ --timer:start(0, 0, vim.schedule_wrap(function()
-+ -- timer:stop()
-+ -- H.draw_picture(config, false)
-+ --end))
-+ end, 'On BufEnter')
- end
-
- H.apply_buffer_options = function(buf_id)
-@@ -1336,7 +1442,7 @@ H.apply_buffer_options = function(buf_id)
- vim.api.nvim_feedkeys('\28\14', 'nx', false)
-
- -- Having `noautocmd` is crucial for performance: ~9ms without it, ~1.6ms with it
-- vim.cmd('noautocmd silent! set filetype=ministarter')
-+ vim.cmd('noautocmd silent! set filetype=dashboard')
-
- local options = {
- -- Taken from 'vim-startify'
-@@ -1383,12 +1489,8 @@ H.apply_buffer_mappings = function(buf_id)
-
- buf_keymap('<CR>', 'MiniStarter.eval_current_item()')
-
-- buf_keymap('<Up>', [[MiniStarter.update_current_item('prev')]])
-- buf_keymap('<C-p>', [[MiniStarter.update_current_item('prev')]])
-- buf_keymap('<M-k>', [[MiniStarter.update_current_item('prev')]])
-- buf_keymap('<Down>', [[MiniStarter.update_current_item('next')]])
-- buf_keymap('<C-n>', [[MiniStarter.update_current_item('next')]])
-- buf_keymap('<M-j>', [[MiniStarter.update_current_item('next')]])
-+ buf_keymap('<C-k>', [[MiniStarter.update_current_item('prev')]])
-+ buf_keymap('<C-j>', [[MiniStarter.update_current_item('next')]])
-
- -- Make all special symbols to update query
- for _, key in ipairs(vim.split(H.get_config().query_updaters, '')) do
-@@ -1464,21 +1566,21 @@ H.is_something_shown = function()
- end
-
- -- Utilities ------------------------------------------------------------------
--H.error = function(msg) error('(mini.starter) ' .. msg, 0) end
-+H.error = function(msg) error('' .. msg, 0) end
-
- H.check_type = function(name, val, ref, allow_nil)
- if type(val) == ref or (ref == 'callable' and vim.is_callable(val)) or (allow_nil and val == nil) then return end
- H.error(string.format('`%s` should be %s, not %s', name, ref, type(val)))
- end
-
--H.set_buf_name = function(buf_id, name) vim.api.nvim_buf_set_name(buf_id, 'ministarter://' .. buf_id .. '/' .. name) end
-+H.set_buf_name = function(buf_id, name) vim.api.nvim_buf_set_name(buf_id, '*dashboard*') end
-
- H.echo = function(msg, is_important)
- if H.get_config().silent then return end
-
- -- Construct message chunks
- msg = type(msg) == 'string' and { { msg } } or msg
-- table.insert(msg, 1, { '(mini.starter) ', 'WarningMsg' })
-+ table.insert(msg, 1, { '', 'Warning' })
-
- -- Avoid hit-enter-prompt
- local max_width = vim.o.columns * math.max(vim.o.cmdheight - 1, 0) + vim.v.echospace
-@@ -1527,7 +1629,7 @@ H.eval_fun_or_string = function(x, string_as_cmd)
- if type(x) == 'function' then return x() end
- if type(x) == 'string' then
- if string_as_cmd then
-- vim.cmd(x)
-+ pcall(function() vim.cmd(x) end)
- else
- return x
- end
diff --git a/files/adw-gtk3-non-blue-accent.diff b/files/patches/adw-gtk3-non-blue-accent.diff
index 90ab11c..90ab11c 100644
--- a/files/adw-gtk3-non-blue-accent.diff
+++ b/files/patches/adw-gtk3-non-blue-accent.diff
diff --git a/files/gamescope_1826.diff b/files/patches/gamescope_1826.diff
index 69c85e8..69c85e8 100644
--- a/files/gamescope_1826.diff
+++ b/files/patches/gamescope_1826.diff
diff --git a/files/sway_background_covered.diff b/files/patches/sway_background_covered.diff
index 3ba8ef4..3ba8ef4 100644
--- a/files/sway_background_covered.diff
+++ b/files/patches/sway_background_covered.diff
diff --git a/files/shell/bashrc b/files/shell/bashrc
new file mode 100644
index 0000000..443501d
--- /dev/null
+++ b/files/shell/bashrc
@@ -0,0 +1,69 @@
+source ~/.profile
+
+gpgconf --launch gpg-agent
+
+if [ -v $NIX_SHELL ]; then
+ complete -cf doas
+else
+ complete -F _root_command doas
+fi
+
+export HISTCONTROL=erasedups
+export HISTFILE=$HOME/.bash_history
+export HISTFILESIZE=100000
+export HISTSIZE=1000
+
+bind 'set completion-query-items 0'
+bind 'set show-all-if-ambiguous on'
+bind 'set show-all-if-unmodified on'
+bind 'set menu-complete-display-prefix on'
+bind '"\t": menu-complete'
+bind '"\e[Z": menu-complete-backward'
+# Clear screen and set return code to 0.
+# Caveat: The text 'clear' will flash in the command line as
+# if it was pasted and sent extremely fast.
+bind '"\C-l":"\C-a\C-kclear\n"'
+
+alias ls='ls --ignore=lost+found --color=auto'
+alias cp='rsync -av'
+alias gdb='gdb -q'
+alias top='htop'
+alias pgrep='pgrep -f'
+alias python='python -q'
+alias bc='bc -l'
+alias make='make -j6'
+alias diff='diff -u'
+alias mail='mutt'
+alias iroha='ssh andrew@iroha'
+alias moyo='ssh andrew@moyo'
+alias station='ssh moyo -t "ssh 192.168.122.89"'
+alias rod='ssh -p 1738 rod'
+alias bmrg='ssh boomerang'
+alias cmv-add='$HOME/c/camu/scripts/cmv_add.sh'
+alias cmv-pause='cmv-add PAUSE'
+alias cmv-next='cmv-add NEXT'
+alias cmv-prev='cmv-add PREV'
+alias cmv-shuffle='cmv-add SHUFFLE'
+alias cmv-sort='cmv-add SORT'
+alias cmv-reverse='cmv-add REVERSE'
+alias cmv-clear='cmv-add CLEAR'
+
+RESET="\001\017\002"
+NORMAL="\001\033[0m\002"
+GREEN="\001\033[0;32m\002"
+RED="\001\033[0;31m\002"
+IROHA="\001\033[38;5;214m\002"
+export HOSTCOLOR=$IROHA
+exit_code_guy()
+{
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ printf "(・_・) >$RED"
+ else
+ printf "(″ロ゛) >$RED *$retcode"
+ fi
+}
+export PS1="$RESET$GREEN\u@$HOSTCOLOR\H$GREEN:\w\$(exit_code_guy)$NORMAL "
+
+# Nix-specific.
+LOCALE_ARCHIVE=$HOME/.nix-profile/lib/locale/locale-archive
diff --git a/files/shell/profile b/files/shell/profile
new file mode 100644
index 0000000..fc677a7
--- /dev/null
+++ b/files/shell/profile
@@ -0,0 +1,7 @@
+export PATH="$PATH:$HOME/.local/bin"
+#export GPG_TTY=$(tty)
+unset SSH_AGENT_PID
+if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
+ export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
+fi
+export MAIN_MONITOR=DP-1
diff --git a/files/sway/config b/files/sway/config
new file mode 100644
index 0000000..3ec0052
--- /dev/null
+++ b/files/sway/config
@@ -0,0 +1,108 @@
+set $mod1 Mod1
+set $mod4 Mod4
+
+set $left h
+set $down j
+set $up k
+set $right l
+
+set $term kitty -1
+set $menu dmenu-path | bemenu-colored | xargs swaymsg exec --
+
+font pango:monospace 10
+
+default_border normal 1
+titlebar_border_thickness 1
+titlebar_padding 4 3
+
+floating_modifier $mod1 normal
+
+bindsym $mod1+Shift+q kill
+bindsym $mod1+Return exec $term
+bindsym $mod1+d exec $menu
+bindsym $mod1+Shift+c reload
+
+bindsym $mod1+Shift+e exec swaynag -t warning -m 'Do you really want to exit?' -B 'Yes' 'swaymsg exit'
+
+bindsym $mod1+$left focus left
+bindsym $mod1+$down focus down
+bindsym $mod1+$up focus up
+bindsym $mod1+$right focus right
+
+bindsym $mod1+Shift+$left move left
+bindsym $mod1+Shift+$down move down
+bindsym $mod1+Shift+$up move up
+bindsym $mod1+Shift+$right move right
+
+workspace 1 output DP-1
+workspace 2 output DP-1
+workspace 3 output DP-1
+workspace 4 output DP-1
+workspace 5 output DP-2
+workspace 6 output DP-2
+workspace 7 output DP-2
+workspace 8 output DP-2
+workspace 9 output HDMI-A-1
+
+bindsym $mod1+1 workspace number 1
+bindsym $mod1+2 workspace number 2
+bindsym $mod1+3 workspace number 3
+bindsym $mod1+4 workspace number 4
+bindsym $mod4+1 workspace number 5
+bindsym $mod4+2 workspace number 6
+bindsym $mod4+3 workspace number 7
+bindsym $mod4+4 workspace number 8
+bindsym $mod4+5 workspace number 9
+
+bindsym $mod1+Shift+1 move container to workspace number 1
+bindsym $mod1+Shift+2 move container to workspace number 2
+bindsym $mod1+Shift+3 move container to workspace number 3
+bindsym $mod1+Shift+4 move container to workspace number 4
+bindsym $mod4+Shift+1 move container to workspace number 5
+bindsym $mod4+Shift+2 move container to workspace number 6
+bindsym $mod4+Shift+3 move container to workspace number 7
+bindsym $mod4+Shift+4 move container to workspace number 8
+bindsym $mod4+Shift+5 move container to workspace number 9
+
+bindsym $mod1+b splith
+bindsym $mod1+v splitv
+
+bindsym $mod1+f fullscreen
+bindsym $mod1+space floating toggle
+
+bindsym $mod1+r mode "resize"
+mode "resize" {
+ bindsym $left resize shrink width 1px
+ bindsym $down resize grow height 1px
+ bindsym $up resize shrink height 1px
+ bindsym $right resize grow width 1px
+ bindsym Escape mode "default"
+}
+
+bindsym $mod1+Shift+s exec screenshot
+bindsym Print exec screenshot main
+bindsym Shift+Print exec screenshot full
+bindsym $mod1+q exec screenshot qrcode
+bindsym $mod1+c exec screenshot color
+
+bindsym button4 nop
+bindsym button5 nop
+
+xwayland force
+
+include config.d/*
+
+# class border bground text indicator child_border
+client.focused $c1_light $c1 $fg $c1 $c1
+client.focused_inactive $c1 $c2 $fg $c1 $c1
+client.unfocused $c2 $c2 $fg $bg $bg
+client.urgent $urgent $urgent $fg $urgent $urgent
+client.placeholder $bg $bg $fg $bg $bg
+client.background $bg
+
+exec dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
+exec_always swaymsg 'seat * hide_cursor 4000'
+exec swayidle -w \
+ timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"'
+exec mako
+exec gentoo-pipewire-launcher restart
diff --git a/files/sway/window_rules b/files/sway/window_rules
new file mode 100644
index 0000000..f6ee9ee
--- /dev/null
+++ b/files/sway/window_rules
@@ -0,0 +1,25 @@
+for_window [shell="xwayland"] title_format "(Xwayland) %title"
+for_window [app_id=kitty] allow_tearing yes
+for_window [app_id=gamescope] inhibit_idle fullscreen, allow_tearing yes, floating enable
+for_window [app_id=cmv] inhibit_idle fullscreen, floating enable
+for_window [class=cmv] floating enable
+for_window [class=cmv.exe] floating enable
+for_window [app_id=mauri] floating enable
+for_window [app_id=imv] floating enable
+for_window [app_id=Waydroid] floating enable
+for_window [title=Parsec] inhibit_idle fullscreen
+for_window [class=streaming_client] inhibit_idle fullscreen
+for_window [class=steam_app_.*] inhibit_idle fullscreen, allow_tearing yes
+for_window [app_id=gamescope] inhibit_idle fullscreen, allow_tearing yes, floating enable
+for_window [class=.gamescope-wrapped] inhibit_idle fullscreen, allow_tearing yes
+for_window [app_id=osu!] inhibit_idle fullscreen, allow_tearing yes
+for_window [app_id=cs2] inhibit_idle fullscreen, allow_tearing yes
+for_window [class=Minecraft*] inhibit_idle fullscreen, allow_tearing yes
+for_window [title=Overwatch] inhibit_idle fullscreen, allow_tearing yes
+for_window [class=Ryujinx] inhibit_idle fullscreen
+for_window [app_id=org.yuzu_emu.yuzu] inhibit_idle fullscreen
+for_window [app_id=info.cemu.Cemu] inhibit_idle fullscreen
+for_window [class=dolphin-emu] inhibit_idle fullscreen
+# Ishiiruka-Dolphin
+for_window [class=AppRun] inhibit_idle fullscreen
+for_window [class=SuperMeatBoy] inhibit_idle fullscreen
diff --git a/files/user-dirs.dirs b/files/user-dirs.dirs
new file mode 100644
index 0000000..018d12a
--- /dev/null
+++ b/files/user-dirs.dirs
@@ -0,0 +1,8 @@
+XDG_DESKTOP_DIR="$HOME/tmp"
+XDG_DOCUMENTS_DIR="$HOME/docs"
+XDG_DOWNLOAD_DIR="$HOME/dl"
+XDG_MUSIC_DIR="$HOME/tmp"
+XDG_PICTURES_DIR="$HOME/pics"
+XDG_PUBLICSHARE_DIR="$HOME/tmp"
+XDG_TEMPLATES_DIR="$HOME/tmp"
+XDG_VIDEOS_DIR="$HOME/dl/mp4"
diff --git a/files/nvim/local/autoload/Juliana.vim b/files/vim/autoload/Juliana.vim
index 1b684b9..4dd86db 100644
--- a/files/nvim/local/autoload/Juliana.vim
+++ b/files/vim/autoload/Juliana.vim
@@ -44,3 +44,13 @@ function! Juliana#CompleteSTab(type)
endif
endif
endfunction
+
+function! Juliana#CompleteNTab(type)
+ if a:type == "FOLD"
+ if foldlevel(line(".")) " Toggle fold if on fold.
+ return "za"
+ else
+ return "\<Tab>"
+ endif
+ endif
+endfunction
diff --git a/files/vim/colors/lil_pablo.vim b/files/vim/colors/lil_pablo.vim
new file mode 100644
index 0000000..1ab6d2a
--- /dev/null
+++ b/files/vim/colors/lil_pablo.vim
@@ -0,0 +1,81 @@
+" Name: lil_pablo
+" Author: Ron Aaron <ron@ronware.org>
+" Maintainer: Original maintainerRon Aaron <ron@ronware.org>
+" Website: https://github.com/vim/colorschemes
+" License: Same as Vim
+" Last Change: 2025 Aug 5
+
+set background=dark
+
+hi clear
+let g:colors_name = 'lil_pablo'
+
+" :%s/cterm\(bg\|fg\)=\([0-9]*\|NONE\|fg\)\ /cterm\1=\2\ gui\1=##\2##\ /g
+
+hi Normal ctermfg=15 guifg=#ffffff ctermbg=0 guibg=#000000 cterm=NONE
+hi Comment ctermfg=8 guifg=#808080 ctermbg=NONE guibg=NONE cterm=NONE
+hi Constant ctermfg=9 guifg=#d78700 ctermbg=NONE guibg=NONE cterm=NONE
+hi Identifier ctermfg=6 guifg=#ffaf00 ctermbg=NONE guibg=NONE cterm=NONE
+hi Statement ctermfg=3 guifg=#ffd75f ctermbg=NONE guibg=NONE cterm=bold
+hi PreProc ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=NONE
+hi Type ctermfg=6 guifg=#ffaf00 ctermbg=NONE guibg=NONE cterm=NONE
+hi Special ctermfg=14 guifg=#ffd700 ctermbg=NONE guibg=NONE cterm=NONE
+hi Underlined ctermfg=2 guifg=#af5f00 ctermbg=NONE guibg=NONE cterm=underline
+hi Ignore ctermfg=0 guifg=#000000 ctermbg=0 guibg=#000000 cterm=NONE
+hi Error ctermfg=15 guifg=#ffffff ctermbg=9 guibg=#d78700 cterm=NONE
+hi Todo ctermfg=0 guifg=#000000 ctermbg=3 guibg=#ffd75f cterm=NONE
+hi Conceal ctermfg=8 guifg=#808080 ctermbg=NONE guibg=NONE cterm=NONE
+hi Cursor ctermfg=0 guifg=#000000 ctermbg=15 guibg=#ffffff cterm=NONE
+hi lCursor ctermfg=0 guifg=#000000 ctermbg=15 guibg=#ffffff cterm=NONE
+hi CursorIM ctermfg=NONE guifg=NONE ctermbg=fg guibg=#eeeeee cterm=NONE
+hi Title ctermfg=13 guifg=#ff8787 ctermbg=NONE guibg=NONE cterm=bold
+hi Directory ctermfg=2 guifg=#af5f00 ctermbg=NONE guibg=NONE cterm=NONE
+hi Search ctermfg=0 guifg=#000000 ctermbg=3 guibg=#ffd75f cterm=NONE
+hi IncSearch ctermfg=15 guifg=#ffffff ctermbg=NONE guibg=NONE cterm=reverse
+hi NonText ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=bold
+hi EndOfBuffer ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=bold
+hi ErrorMsg ctermfg=15 guifg=#ffffff ctermbg=1 guibg=#d75f00 cterm=NONE
+hi WarningMsg ctermfg=9 guifg=#d78700 ctermbg=NONE guibg=NONE cterm=NONE
+hi SignColumn ctermfg=14 guifg=#ffd700 ctermbg=0 guibg=#000000 cterm=NONE
+hi ColorColumn ctermfg=15 guifg=#ffffff ctermbg=8 guibg=#808080 cterm=NONE
+hi FoldColumn ctermfg=NONE guifg=NONE ctermbg=NONE guibg=NONE cterm=NONE
+hi Folded ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=NONE
+hi CursorColumn ctermfg=NONE guifg=NONE ctermbg=NONE guibg=NONE cterm=underline
+hi CursorLine ctermfg=NONE guifg=NONE ctermbg=NONE guibg=NONE cterm=underline
+hi CursorLineNr ctermfg=11 guifg=#ffff5f ctermbg=NONE guibg=NONE cterm=underline
+hi Visual ctermfg=4 guifg=#005f5f ctermbg=7 guibg=#eeeeee cterm=NONE
+hi VisualNOS ctermfg=NONE guifg=NONE ctermbg=0 guibg=#000000 cterm=underline
+hi LineNr ctermfg=8 guifg=#808080 ctermbg=NONE guibg=NONE cterm=NONE
+hi! link LineNrAbove LineNr
+hi! link LineNrBelow LineNr
+hi MatchParen ctermfg=NONE guifg=NONE ctermbg=6 guibg=#ffaf00 cterm=NONE
+hi ModeMsg ctermfg=NONE guifg=NONE ctermbg=NONE guibg=NONE cterm=bold
+hi MoreMsg ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=bold
+hi Question ctermfg=10 guifg=#af8700 ctermbg=NONE guibg=NONE cterm=bold
+hi SpecialKey ctermfg=14 guifg=#ffd700 ctermbg=NONE guibg=NONE cterm=NONE
+hi WildMenu ctermfg=0 guifg=#000000 ctermbg=11 guibg=#ffff5f cterm=NONE
+hi QuickFixLine ctermfg=0 guifg=#000000 ctermbg=6 guibg=#ffaf00 cterm=NONE
+hi SpellBad ctermfg=9 guifg=#d78700 ctermbg=NONE guibg=NONE cterm=underline
+hi SpellCap ctermfg=12 guifg=#00875f ctermbg=NONE guibg=NONE cterm=underline
+hi SpellLocal ctermfg=13 guifg=#ff8787 ctermbg=NONE guibg=NONE cterm=underline
+hi SpellRare ctermfg=11 guifg=#ffff5f ctermbg=NONE guibg=NONE cterm=underline
+hi StatusLine ctermfg=11 guifg=#ffff5f ctermbg=4 guibg=#005f5f cterm=NONE
+hi StatusLineNC ctermfg=0 guifg=#000000 ctermbg=15 guibg=#ffffff cterm=NONE
+hi VertSplit ctermfg=15 guifg=#ffffff ctermbg=15 guibg=#ffffff cterm=NONE
+hi TabLine ctermfg=15 guifg=#ffffff ctermbg=8 guibg=#808080 cterm=NONE
+hi TabLineFill ctermfg=NONE guifg=NONE ctermbg=0 guibg=#000000 cterm=reverse
+hi TabLineSel ctermfg=15 guifg=#ffffff ctermbg=0 guibg=#000000 cterm=bold
+hi ToolbarLine ctermfg=NONE guifg=NONE ctermbg=0 guibg=#000000 cterm=NONE
+hi ToolbarButton ctermfg=0 guifg=#000000 ctermbg=7 guibg=#eeeeee cterm=bold
+hi PmenuMatch ctermfg=fg guifg=#eeeeee ctermbg=8 guibg=#808080 cterm=bold
+hi PmenuMatchSel ctermfg=0 guifg=#000000 ctermbg=7 guibg=#eeeeee cterm=bold
+hi Pmenu ctermfg=fg guifg=#eeeeee ctermbg=8 guibg=#808080 cterm=NONE
+hi PmenuSbar ctermfg=NONE guifg=NONE ctermbg=NONE guibg=NONE cterm=NONE
+hi PmenuSel ctermfg=0 guifg=#000000 ctermbg=7 guibg=#eeeeee cterm=NONE
+hi PmenuThumb ctermfg=NONE guifg=NONE ctermbg=15 guibg=#ffffff cterm=NONE
+hi DiffAdd ctermfg=15 guifg=#ffffff ctermbg=2 guibg=#af5f00 cterm=NONE
+hi DiffChange ctermfg=15 guifg=#ffffff ctermbg=12 guibg=#00875f cterm=NONE
+hi DiffText ctermfg=0 guifg=#000000 ctermbg=7 guibg=#eeeeee cterm=NONE
+hi DiffDelete ctermfg=15 guifg=#ffffff ctermbg=13 guibg=#ff8787 cterm=NONE
+
+" vim: et ts=8 sw=2 sts=2
diff --git a/files/vim/pack/downloads/create_opt.sh b/files/vim/pack/downloads/create_opt.sh
new file mode 100755
index 0000000..0029440
--- /dev/null
+++ b/files/vim/pack/downloads/create_opt.sh
@@ -0,0 +1,38 @@
+#! /usr/bin/env sh
+
+if [ ! -d "./opt" ]; then
+ echo "'opt' dir not found, create it here and re-run $0"
+ exit 1
+fi
+
+git clone --depth=1 https://github.com/tpope/vim-fugitive.git opt/vim-fugitive
+cd opt/vim-fugitive
+rm .git/hooks/*
+git apply ../../../../patches/vim_fugitive_tab_expand.diff
+cd ../..
+
+git clone --depth=1 https://github.com/itchyny/vim-gitbranch.git opt/vim-gitbranch
+cd opt/vim-gitbranch
+rm .git/hooks/*
+cd ../..
+
+git clone --depth=1 https://github.com/matcatc/vim-asciidoc-folding.git opt/vim-asciidoc-folding
+cd opt/vim-asciidoc-folding
+rm .git/hooks/*
+cd ../..
+
+git clone --depth=1 https://github.com/chrisbra/Colorizer.git opt/Colorizer
+cd opt/Colorizer
+rm .git/hooks/*
+cd ../..
+
+#git clone --depth=1 https://github.com/yegappan/lsp.git opt/lsp
+#cd opt/lsp
+#rm .git/hooks/*
+#cd ../..
+
+vim -u NONE -c "helptags opt/vim-fugitive/doc" -c q
+vim -u NONE -c "helptags opt/vim-gitbranch/doc" -c q
+vim -u NONE -c "helptags opt/vim-asciidoc-folding/doc" -c q
+vim -u NONE -c "helptags opt/Colorizer/doc" -c q
+#vim -u NONE -c "helptags opt/lsp/doc" -c q
diff --git a/files/vim/patches/qname_edit.diff b/files/vim/patches/qname_edit.diff
new file mode 100644
index 0000000..4ca65ff
--- /dev/null
+++ b/files/vim/patches/qname_edit.diff
@@ -0,0 +1,178 @@
+Post- dos2unix, Tabify, and Trim.
+--- a/qname.1.2.vim 2025-08-03 20:12:24.629096223 -0400
++++ b/qname.1.2.vim 2025-08-13 22:10:15.352953531 -0400
+@@ -7,7 +7,25 @@
+ " License: Vim License
+ " =============================================================================
+
++" https://www.vim.org/scripts/script.php?script_id=2317
++"
+ " Change Log
++" EDIT:
++" 2025-06-24:
++" Remove redraw on update
++" Don't wrap around in the list
++" ls! -> ls
++" <Tab> -> <C-j/k>
++" Take out built-in hotkey
++" 2025-08-05:
++" Use path relative to current dir
++" Match against file path
++" 2025-08-13:
++" Sort buffers by most recently used
++" Add bind to "flatten" the list
++" Replace fmatch() with built-in matchfuzzy() (speedup)
++" Fix logic to not include buffers with modifiable off
++"
+ " 1.2 2013-01-03
+ " ADD: <Tab> and <S-Tab> moves selection like <Up> and <Down>
+ " ADD: Use <silent> mapping to keep cmdline clear
+@@ -30,12 +48,6 @@
+ finish
+ endif
+
+-if !exists("g:qname_hotkey") || g:qname_hotkey == ""
+- let g:qname_hotkey = "<F3>"
+-endif
+-exe "nmap" g:qname_hotkey ":cal QNameInit(1)<cr>:~"
+-let s:qname_hotkey = eval('"\'.g:qname_hotkey.'"')
+-
+ if exists("g:qname_loaded") && g:qname_loaded
+ finish
+ endif
+@@ -70,16 +82,19 @@
+ call s:swb(str2nr(matchstr(s:s[_sel], '<\zs\d\+\ze>')))
+ endif
+ call QNameInit(0)
+- elseif _key ==# "\<Up>" || _key ==# "\<S-Tab>"
++ elseif _key ==# "\<Up>" || _key ==# "\<C-k>"
+ call s:colPrinter.vert(-1)
+- elseif _key ==# "\<Down>" || _key ==# "\<Tab>"
++ elseif _key ==# "\<Down>" || _key ==# "\<C-j>"
+ call s:colPrinter.vert(1)
+ elseif _key ==# "\<Left>"
+ call s:colPrinter.horz(-1)
+ elseif _key ==# "\<Right>"
+ call s:colPrinter.horz(1)
+- elseif _key ==# s:qname_hotkey
+- call QNameInit(0)
++ elseif _key ==# "\<C-f>"
++ let s:flat = 1 - s:flat
++ let prev_sel = s:colPrinter.sel
++ call s:build()
++ let s:colPrinter.sel = prev_sel
+ else
+ call s:build()
+ endif
+@@ -88,7 +103,6 @@
+ cal QNameInit(0)
+ finally
+ " clean up screen after dismissing search window
+- redraw!
+ call inputrestore()
+ endtry
+ endfunc
+@@ -99,6 +113,7 @@
+ let s:cmdh = &cmdheight
+ if a:start != -1
+ let s:inp = ""
++ let s:flat = 0
+ endif
+ call s:baselist()
+ call s:build()
+@@ -112,16 +127,27 @@
+ function! s:build()
+ let s:s = []
+ let s:n = []
++ let s:sp = []
++ let s:np = []
+ let s:blen = 0
+ let _cmp = tolower(tr(s:inp, '\', '/'))
+ for _line in s:ls
+- let _name = matchstr(_line, '^.\{-}\ze \+<')
+- if s:fmatch(tolower(_name), _cmp)
++ " Match everthing before |<xx>| Match everthing after space.
++ let _match = matchlist(_line, '^.\{-}\ze \+<.*> \+\(.*\)')
++ let _name = _match[0]
++ let _path = _match[1]
++ if strlen(_cmp) == 0 || s:fmatch(tolower(_name), _cmp)
+ cal add(s:s, _line)
+ cal add(s:n, _name)
++ elseif s:fmatch(tolower(_path), _cmp)
++ cal add(s:sp, _line)
++ cal add(s:np, _name)
+ endif
+ endfor
+- if len(s:n) > s:colPrinter.trow
++ " Put filename matches before path matches.
++ let s:n = s:n + s:np
++ let s:s = s:s + s:sp
++ if !s:flat && len(s:n) > s:colPrinter.trow
+ cal s:colPrinter.put(s:n)
+ else
+ cal s:colPrinter.put(s:s)
+@@ -137,37 +163,28 @@
+ endfunc
+
+ function! s:fmatch(src,pat)
+- let _si = strlen(a:src)-1
+- let _pi = strlen(a:pat)-1
+- while _si>=0 && _pi>=0
+- if a:src[_si] == a:pat[_pi]
+- let _pi -= 1
+- endif
+- let _si -= 1
+- endwhile
+- return _pi < 0
++ return len(matchfuzzy([a:src], a:pat)) > 0
+ endfunc
+
+ function! s:baselist()
+ let s:ls = []
+- redir => l:bufs | silent ls! | redir END
++ redir => l:bufs | silent ls t | redir END
+ for _line in split(l:bufs, "\n")
+- if _line[3]!='u' || _line[6]!='-'
++ if _line[6] != '-'
+ let _bno = matchstr(_line, '^ *\zs\d*')+0
+ let _fname = substitute(expand("#"._bno.":p"), '\', '/', 'g')
+ if _fname == ""
+ let _fname = "|".matchstr(_line, '"\[\zs[^\]]*')."|"
+ endif
+ let _name = fnamemodify(_fname,":t")
+- cal add(s:ls, _name." <"._bno."> ".fnamemodify(_fname,":h"))
++ cal add(s:ls, _name." <"._bno."> ".fnamemodify(_fname,":."))
+ endif
+ endfor
+ let _align = max(map(copy(s:ls),'stridx(v:val,">")'))
+ call map(s:ls, 'substitute(v:val, " <", repeat(" ",_align-stridx(v:val,">"))." <", "")')
+- cal sort(s:ls, 1)
+ endfunc
+
+-let s:colPrinter = {"trow": 4}
++let s:colPrinter = {"trow": 5}
+ function! s:colPrinter.put(its) dict
+ let _cols = []
+ let _trow = self.trow
+@@ -224,11 +241,7 @@
+ function! s:colPrinter.vert(mv) dict
+ let _t = self.sel + a:mv
+ let _len = self.len
+- if _t < 0 && _len > 0
+- let self.sel = _len-1
+- elseif _t >= _len
+- let self.sel = 0
+- else
++ if _t >= 0 && _t < _len
+ let self.sel = _t
+ endif
+ endfunc
+@@ -244,7 +257,7 @@
+ let _t = _sel/_trow
+ let _cpos = self.cpos
+ let _lcol = self.lcol
+- let _tcol = &columns
++ let _tcol = s:flat ? 1 : &columns
+ if _cpos[_lcol]+_tcol < _cpos[_t+1]
+ let _rcol = _t
+ let _pos = _cpos[_t+1]-_tcol-2
diff --git a/files/vim/patches/vim_fugitive_tab_expand.diff b/files/vim/patches/vim_fugitive_tab_expand.diff
new file mode 100644
index 0000000..aa7b0ef
--- /dev/null
+++ b/files/vim/patches/vim_fugitive_tab_expand.diff
@@ -0,0 +1,17 @@
+diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim
+index 7f2f602..fa178c4 100644
+--- a/autoload/fugitive.vim
++++ b/autoload/fugitive.vim
+@@ -2696,10 +2696,10 @@ function! s:MapStatus() abort
+ call s:Map('n', 'C', ":echoerr 'fugitive: C has been removed in favor of cc'<CR>", '<silent><unique>')
+ call s:Map('n', 'a', ":echoerr 'fugitive: a has been removed in favor of s'<CR>", '<silent><unique>')
+ call s:Map('n', 'i', ":<C-U>execute <SID>NextExpandedHunk(v:count1)<CR>", '<silent>')
+- call s:Map('n', "=", ":<C-U>execute <SID>StageInline('toggle',line('.'),v:count)<CR>", '<silent>')
++ call s:Map('n', "<Tab>", ":<C-U>execute <SID>StageInline('toggle',line('.'),v:count)<CR>", '<silent>')
+ call s:Map('n', "<", ":<C-U>execute <SID>StageInline('hide', line('.'),v:count)<CR>", '<silent>')
+ call s:Map('n', ">", ":<C-U>execute <SID>StageInline('show', line('.'),v:count)<CR>", '<silent>')
+- call s:Map('x', "=", ":<C-U>execute <SID>StageInline('toggle',line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
++ call s:Map('x', "<Tab>", ":<C-U>execute <SID>StageInline('toggle',line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
+ call s:Map('x', "<", ":<C-U>execute <SID>StageInline('hide', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
+ call s:Map('x', ">", ":<C-U>execute <SID>StageInline('show', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
+ call s:Map('n', 'D', ":echoerr 'fugitive: D has been removed in favor of dd'<CR>", '<silent><unique>')
diff --git a/files/vim/plugin/Hello.vim b/files/vim/plugin/Hello.vim
new file mode 100644
index 0000000..224200e
--- /dev/null
+++ b/files/vim/plugin/Hello.vim
@@ -0,0 +1,122 @@
+" https://github.com/arp242/startscreen.vim/blob/master/plugin/startscreen.vim
+
+scriptencoding utf-8
+if exists('g:Hello_Loaded') | finish | endif
+let g:Hello_Loaded = 1
+let s:save_cpo = &cpo
+set cpo&vim
+
+fun! Hello#start()
+ " Don't run if:
+ " - there are commandline arguments;
+ " - the buffer isn't empty (e.g. cmd | vi -);
+ " - we're not invoked as vim or gvim;
+ " - we're starting in insert mode.
+ if argc() || line2byte('$') != -1 || v:progname !~? '^[-gmnq]\=vim\=x\=\%[\.exe]$' || &insertmode
+ return
+ endif
+
+ " Start a new buffer...
+ enew
+
+ " ...set it's name...
+ keepalt file [Hello]
+
+ " ...and set some options for it.
+ setlocal
+ \ bufhidden=wipe
+ \ buftype=nofile
+ \ nobuflisted
+ \ nocursorcolumn
+ \ nocursorline
+ \ nolist
+ \ nonumber
+ \ noswapfile
+ \ norelativenumber
+
+ " Now we can just write to the buffer whatever you want.
+
+ let pole = [' .', ' (` `)', ' `\./`', ' __|`|__', '/ |_| \', '|_______|', '\_______/', ' | |', ' | |', ' | |', ' `.| |.`', ' /| |\', ' / | | \', ' | |', ' .`| |`.', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |', ' | |']
+ for i in reverse(range(0, len(pole) - 1))
+ call append('0', ' '.pole[i])
+ endfor
+ :1
+ redraw!
+
+ "call writefile([output], '/proc/self/fd/0', 'b')
+
+ " No modifications to this buffer.
+ setlocal nomodifiable nomodified
+
+ " When we go to insert mode start a new buffer, and start insert.
+ nnoremap <buffer><silent> e :enew<CR>
+ nnoremap <buffer><silent> i :enew <bar> startinsert<CR>
+ nnoremap <buffer><silent> p :enew<CR>p
+endfun
+
+augroup Hello
+ autocmd!
+ autocmd VimEnter * call Hello#start()
+augroup end
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+"
+"
+"
+"
+"
+"
+"
+"
+" Sketch
+"
+"
+"
+"
+"
+"
+"
+"
+"
+"
+"
+" https://www.asciiart.eu/buildings-and-places/fences
+" .
+" (` `)
+" `\./`
+" __|`|__
+" / |_| \
+" |_______|
+" \_______/
+" | |
+" | |
+" | |
+" `.| |.`
+" /| |\
+" / | | \
+" | |
+" .`| |`.
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+" | |
+"
+"
+"
+"
+"
+"
+"
diff --git a/files/vim/plugin/qname.1.2.vim b/files/vim/plugin/qname.1.2.vim
new file mode 100644
index 0000000..73b7dec
--- /dev/null
+++ b/files/vim/plugin/qname.1.2.vim
@@ -0,0 +1,298 @@
+" =============================================================================
+" QuickName: The most convenient way navigating opened buffers,
+" incremental search by name
+" Last Change: 2013-01-03
+" Maintainer: Pal Nart <palnart@gmail.com>
+" Version: 1.2
+" License: Vim License
+" =============================================================================
+
+" https://www.vim.org/scripts/script.php?script_id=2317
+"
+" Change Log
+" EDIT:
+" 2025-06-24:
+" Remove redraw on update
+" Don't wrap around in the list
+" ls! -> ls
+" <Tab> -> <C-j/k>
+" Take out built-in hotkey
+" 2025-08-05:
+" Use path relative to current dir
+" Match against file path
+" 2025-08-13:
+" Sort buffers by most recently used
+" Add bind to "flatten" the list
+" Replace fmatch() with built-in matchfuzzy() (speedup)
+" Fix logic to not include buffers with modifiable off
+"
+" 1.2 2013-01-03
+" ADD: <Tab> and <S-Tab> moves selection like <Up> and <Down>
+" ADD: Use <silent> mapping to keep cmdline clear
+" FIX: Catch interrupt (<C-C> or <Esc> keypress) and restore cmd line
+" FIX: Use case-sensitive string comparisons to afford immunity from value
+" of 'ignorecase'
+" FIX: Do not clobber contents of @y register
+"
+" 1.1 2009-07-19
+" ADD: Key Shift+Enter open buffer in a new horizontally split window. Thanks
+" to contribution by Salman Halim
+" ADD: Key Ctrl+U reset input line and show all buffers
+" FIX: If a buffer is already associated with a window, navigate to that
+" window instead of opening in current window
+"
+" 1.0 2008-07-30
+" Initial upload
+
+if v:version < 700
+ finish
+endif
+
+if exists("g:qname_loaded") && g:qname_loaded
+ finish
+endif
+let g:qname_loaded = 1
+
+function! QNameRun()
+ try
+ call s:colPrinter.print()
+ echo "\rMatch" len(s:n)."/".len(s:ls) "names:" s:inp
+ call inputsave()
+ let _key = getchar()
+ if !type(_key)
+ let _key = nr2char(_key)
+ endif
+
+ " use case-sensitive equality operator, otherwise <BS> looks like
+ " <S-Tab> if 'ignorecase' is set
+ if _key ==# "\<BS>"
+ let s:inp = s:inp[:-2]
+ elseif _key ==# "\<C-U>"
+ let s:inp = ""
+ elseif strlen(_key) == 1 && char2nr(_key) > 31
+ let s:inp = s:inp._key
+ endif
+
+ if _key ==# "\<ESC>" || _key ==# "\<CR>" || _key ==# "\<S-CR>"
+ let _sel = s:colPrinter.sel
+ if _key != "\<ESC>" && _sel < len(s:n) && _sel >= 0
+ if _key ==# "\<S-CR>"
+ :split
+ endif
+ call s:swb(str2nr(matchstr(s:s[_sel], '<\zs\d\+\ze>')))
+ endif
+ call QNameInit(0)
+ elseif _key ==# "\<Up>" || _key ==# "\<C-k>"
+ call s:colPrinter.vert(-1)
+ elseif _key ==# "\<Down>" || _key ==# "\<C-j>"
+ call s:colPrinter.vert(1)
+ elseif _key ==# "\<Left>"
+ call s:colPrinter.horz(-1)
+ elseif _key ==# "\<Right>"
+ call s:colPrinter.horz(1)
+ elseif _key ==# "\<C-f>"
+ let s:flat = 1 - s:flat
+ let prev_sel = s:colPrinter.sel
+ call s:build()
+ let s:colPrinter.sel = prev_sel
+ else
+ call s:build()
+ endif
+ catch /^Vim:.*$/
+ " restore cmdheight if search is interrupted
+ cal QNameInit(0)
+ finally
+ " clean up screen after dismissing search window
+ call inputrestore()
+ endtry
+endfunc
+
+function! QNameInit(start)
+ if a:start
+ cmap <silent> ~ cal QNameRun()<CR>:~
+ let s:cmdh = &cmdheight
+ if a:start != -1
+ let s:inp = ""
+ let s:flat = 0
+ endif
+ call s:baselist()
+ call s:build()
+ exe "set cmdheight=".(s:colPrinter.trow+1)
+ else
+ cmap <silent> ~ exe "cunmap \x7E"<CR>
+ exe "set cmdheight=".s:cmdh
+ endif
+endfunc
+
+function! s:build()
+ let s:s = []
+ let s:n = []
+ let s:sp = []
+ let s:np = []
+ let s:blen = 0
+ let _cmp = tolower(tr(s:inp, '\', '/'))
+ for _line in s:ls
+ " Match everthing before |<xx>| Match everthing after space.
+ let _match = matchlist(_line, '^.\{-}\ze \+<.*> \+\(.*\)')
+ let _name = _match[0]
+ let _path = _match[1]
+ if strlen(_cmp) == 0 || s:fmatch(tolower(_name), _cmp)
+ cal add(s:s, _line)
+ cal add(s:n, _name)
+ elseif s:fmatch(tolower(_path), _cmp)
+ cal add(s:sp, _line)
+ cal add(s:np, _name)
+ endif
+ endfor
+ " Put filename matches before path matches.
+ let s:n = s:n + s:np
+ let s:s = s:s + s:sp
+ if !s:flat && len(s:n) > s:colPrinter.trow
+ cal s:colPrinter.put(s:n)
+ else
+ cal s:colPrinter.put(s:s)
+ endif
+endfunc
+
+function! s:swb(bno)
+ if bufwinnr(a:bno) == -1
+ exe "hid b" a:bno
+ else
+ exe bufwinnr(a:bno) . "winc w"
+ endif
+endfunc
+
+function! s:fmatch(src,pat)
+ return len(matchfuzzy([a:src], a:pat)) > 0
+endfunc
+
+function! s:baselist()
+ let s:ls = []
+ redir => l:bufs | silent ls t | redir END
+ for _line in split(l:bufs, "\n")
+ if _line[6] != '-'
+ let _bno = matchstr(_line, '^ *\zs\d*')+0
+ let _fname = substitute(expand("#"._bno.":p"), '\', '/', 'g')
+ if _fname == ""
+ let _fname = "|".matchstr(_line, '"\[\zs[^\]]*')."|"
+ endif
+ let _name = fnamemodify(_fname,":t")
+ cal add(s:ls, _name." <"._bno."> ".fnamemodify(_fname,":."))
+ endif
+ endfor
+ let _align = max(map(copy(s:ls),'stridx(v:val,">")'))
+ call map(s:ls, 'substitute(v:val, " <", repeat(" ",_align-stridx(v:val,">"))." <", "")')
+endfunc
+
+let s:colPrinter = {"trow": 5}
+function! s:colPrinter.put(its) dict
+ let _cols = []
+ let _trow = self.trow
+
+ let _its = copy(a:its)
+ let _len = len(_its)
+ let _i = 0
+ while _i < _len
+ if _i+_trow <= _len
+ cal add(_cols, remove(_its,0,_trow-1))
+ else
+ cal add(_cols, _its)
+ endif
+ let _i += _trow
+ endwhile
+
+ let _cpos = [0]
+ let _cw = []
+ let _t = 0
+ for _li in _cols
+ let _w = max(map(copy(_li),'strlen(v:val)'))+4
+ let _t += _w
+ cal add(_cpos,_t)
+ cal add(_cw,_w)
+ endfor
+
+ let _rows = []
+ for _i in range(_trow)
+ let _row = []
+ for _j in range(len(_cols))
+ if _j*_trow+_i < _len
+ cal add(_row,_cols[_j][_i])
+ endif
+ endfor
+ cal add(_rows, _row)
+ endfor
+
+ let self.cols = _cols
+ let self.cw = _cw
+ let self.rows = _rows
+ let self.cpos = _cpos
+ let self.len = _len
+ let self.lcol = 0
+ let self.sel = 0
+endfunc
+
+function! s:colPrinter.horz(mv) dict
+ let _t = self.sel + a:mv*self.trow
+ if _t >= 0 && _t < self.len
+ let self.sel = _t
+ endif
+endfunc
+
+function! s:colPrinter.vert(mv) dict
+ let _t = self.sel + a:mv
+ let _len = self.len
+ if _t >= 0 && _t < _len
+ let self.sel = _t
+ endif
+endfunc
+
+function! s:colPrinter.print() dict
+ let _len = self.len
+ let _trow = self.trow
+ if !_len
+ echo " [...NO MATCH...]" repeat("\n",_trow)
+ return
+ endif
+ let _sel = self.sel
+ let _t = _sel/_trow
+ let _cpos = self.cpos
+ let _lcol = self.lcol
+ let _tcol = s:flat ? 1 : &columns
+ if _cpos[_lcol]+_tcol < _cpos[_t+1]
+ let _rcol = _t
+ let _pos = _cpos[_t+1]-_tcol-2
+ while _cpos[_lcol] < _pos
+ let _lcol += 1
+ endwhile
+ let _lcol -= _lcol > _t
+ else
+ if _t < _lcol
+ let _lcol = _t
+ endif
+ let _rcol = len(_cpos)-1
+ let _pos = _cpos[_lcol]+_tcol+2
+ while _cpos[_rcol] > _pos
+ let _rcol -= 1
+ endwhile
+ let _rcol -= _rcol > _lcol
+ endif
+ let _cw = self.cw
+ let _pos = _cpos[_lcol]+_tcol
+ let self.lcol = _lcol
+ for _i in range(_trow)
+ let _row = self.rows[_i]
+ for _j in range(_lcol,_rcol)
+ if _j*_trow+_i < _len
+ let _txt = " " . _row[_j]
+ let _txt .= repeat(" ", _cw[_j] - strlen(_txt))
+ let _txt = _txt[:_pos-_cpos[_j]-2]
+ if _j*_trow + _i == _sel
+ echoh Search|echon _txt|echoh None
+ else
+ echon _txt
+ endif
+ endif
+ endfor
+ echon "\n"
+ endfor
+endfunc
diff --git a/files/vim/vimrc b/files/vim/vimrc
new file mode 100644
index 0000000..41e30fb
--- /dev/null
+++ b/files/vim/vimrc
@@ -0,0 +1,294 @@
+" @TODO: Map 'd' to delete no yank
+
+" Basic settings.
+set nocompatible
+set number
+" showmode too often puts the cursor on the bottom line, this can make
+" kitty's cursor_trail way too jumpy.
+set noshowmode
+"set signcolumn=yes
+set updatetime=250
+set scrolloff=5
+"set lazyredraw
+" Don't ask to save changes when switching buffers.
+set hidden
+" Use the last buffer instead of the right-most when opening from quickfix.
+set switchbuf=uselast
+" Show match count.
+set shortmess-=S
+" Old split defaults (I think).
+set splitright
+set splitbelow
+" Stop buffers from jumping when opening buffer selection.
+set splitkeep=screen
+
+set termguicolors
+colo lil_pablo
+
+" Syntax and indent from filetype.
+filetype plugin indent on
+syntax on
+" Search farther and longer to correctly highlight.
+"au BufEnter * :syntax sync minlines=10
+set redrawtime=3000
+set maxmempattern=5000
+
+" Highlight unwanted whitespace.
+au BufEnter * match Error /\s\+$/
+au InsertEnter * match Error /\s\+\%#\@<!$/
+au InsertLeave * match Error /\s\+$/
+
+" Check for SHIFT_JIS.
+set fileencodings=ucs-bom,utf-8,sjis,default,latin1
+
+" 4 spaces autoindent.
+set tabstop=4
+set shiftwidth=4
+set expandtab
+set autoindent
+
+" C syntax preference.
+let g:c_syntax_for_h=1
+let g:c_no_curly_error=1
+let g:c_function_pointers=1
+set cinoptions=:0,=4,l1,g2,h2,(4,u4,+4,m1,j1,J1
+set cindent
+
+" Set different format for mail and text files.
+set nowrap nolinebreak nolist formatoptions=l textwidth=0
+au FileType mail,text setlocal wrap formatoptions=l textwidth=0
+
+" Ex tab complete that makes sense to me.
+set wildmode=longest,list,full
+set wildmenu
+
+" Set titlebar.
+set title
+au BufEnter * let &titlestring=expand("%:t")
+
+" https://github.com/csdvrx/CuteVim/blob/main/.vimrc
+
+" Allow distinguishing <C-i> from <Tab> in bindings.
+" If using vim rather than neovim, this will disable the ability
+" to map <C-h/j/k/l>. Apparently due to vim's lack of "CSI u"
+" support, according to some issue reports.
+" https://github.com/vim/vim/issues/10244
+"let &t_TI = "\<Esc>[>4;2m"
+"let &t_TE = "\<Esc>[>4;m"
+" Treat shift + backspace as normal backspace.
+"noremap <S-BS> <BS>
+
+" System clipboard on linux.
+set clipboard=unnamedplus
+
+" Session options.
+set ssop=curdir,skiprtp,blank,buffers,folds,winsize,terminal
+set vop-=curdir
+
+" Move ~/.viminfo.
+set viminfo+=n~/.vim/viminfo
+
+" Session auto save.
+" https://vim.fandom.com/wiki/Go_away_and_come_back
+function! SaveSession()
+ if v:this_session != ""
+ echo "Saving."
+ exe "mksession! " . v:this_session
+ else
+ echo "No Session."
+ endif
+endfunction
+au VimLeave * :call SaveSession()
+
+if isdirectory(expand("~/c"))
+ " Swap file directory.
+ let swap_dir = expand("~/c/sessions/swaps//")
+ if !isdirectory(swap_dir)
+ call mkdir(swap_dir, "p", 0755)
+ endif
+ let &directory=swap_dir
+
+ if has("persistent_undo")
+ let undo_dir = expand("~/c/sessions/undo//")
+ if !isdirectory(undo_dir)
+ call mkdir(undo_dir, "p", 0755)
+ endif
+ let &undodir=undo_dir
+ set undofile
+ endif
+
+ " Staggered backups.
+ let backup_dir = "/mnt/store/backup/vim"
+ if !isdirectory(backup_dir)
+ let backup_dir = expand("~/c/sessions/backup//")
+ if !isdirectory(backup_dir)
+ call mkdir(backup_dir, "p", 0755)
+ endif
+ endif
+ let &backupdir=backup_dir
+ set backup
+endif
+
+set autocomplete
+set complete=.^5,w^5,b^5,u^5
+set completeopt=popup
+
+" Plugins.
+let g:fugitive_no_maps = 1
+set diffopt+=vertical
+packadd vim-fugitive
+packadd vim-gitbranch
+packadd vim-asciidoc-folding
+packadd Colorizer
+"if !empty($NIX_SHELL)
+"packadd lsp
+"call LspAddServer([#{
+"\ name: 'clangd',
+"\ filetype: ['c', 'cpp'],
+"\ path: 'clangd',
+"\ args: ['--background-index']
+"\}])
+"endif
+
+" Custom statusline.
+function! StatuslineGit()
+ let l:branchname = gitbranch#name()
+ return strlen(l:branchname) > 0 ? " ".l:branchname." " : " "
+endfunction
+
+function! Statusline() abort
+ let focused = g:statusline_winid == win_getid(winnr())
+ let status = focused ? "%#StatusLine#" : "%#StatusLineNC#"
+ let status .= "%{StatuslineGit()}"
+ let status .= " %{expand('%:~:.')}" " Explicitly expand to relative file, %f was flaky.
+ let status .= " vim@%{hostname()}"
+ let status .= "%="
+ let status .= " %y"
+ let status .= " %{&fileencoding}"
+ let status .= "[%{&fileformat}]"
+ let status .= "%3p%%"
+ let status .= " %3l:%-3c"
+ return status
+endfunction
+set laststatus=2 " Always show statusline.
+set statusline=%!Statusline()
+
+" Make shift + nav keys no-ops.
+nnoremap <S-h> <nop>
+nnoremap <S-j> <nop>
+nnoremap <S-k> <nop>
+nnoremap <S-l> <nop>
+" Normal mode tab no-op.
+nmap <Tab> <nop>
+" ctrl + c no-op.
+nnoremap <C-c> <nop>
+" Disable F1 for help.
+nmap <F1> <nop>
+" Disable q: for histroy.
+nmap q: <nop>
+" Simplify split movement.
+nnoremap <silent> <C-h> :wincmd h<CR>
+nnoremap <silent> <C-j> :wincmd j<CR>
+nnoremap <silent> <C-k> :wincmd k<CR>
+nnoremap <silent> <C-l> :wincmd l<CR>
+" Make ctrl + "." and "," map to previous buffer.
+nmap <C-,> <C-^>
+nmap <C-.> <C-^>
+" Personally intuitive pop-up menu binds.
+inoremap <expr> <CR> pumvisible() ? "<C-y><CR>" : "<CR>"
+inoremap <expr> <Up> pumvisible() ? "<C-p>" : "<Up>"
+inoremap <expr> <Down> pumvisible() ? "<C-n>" : "<Down>"
+" Ctags
+nnoremap <C-d> <C-]>
+" Toggle colorcolumn.
+nmap <silent> C :exe "set colorcolumn=" . (&colorcolumn == "" ? "101" : "")<CR>
+" Toggle css color highlighting.
+noremap <silent> # :ColorToggle<CR>
+" Buffer select.
+nmap <silent> \ :call QNameInit(1)<CR>:~
+" Git summary.
+nmap <silent> Y :vertical G<CR>
+
+" Relative :e, :vs, and :s.
+fun OpenBasedOnRelativeArgument(A, CMD)
+ " https://stackoverflow.com/a/14348204
+ let arg = a:A
+ if arg != ""
+ let arg = (arg[0] == "/" ? arg : resolve(fnamemodify(expand("%:h")."/".arg, ":p")))
+ endif
+ if a:CMD == "EDIT"
+ exe "edit" arg
+ elseif a:CMD == "VERTICAL_SPLIT"
+ exe "vsplit" arg
+ elseif a:CMD == "SPLIT"
+ exe "split" arg
+ endif
+endfun
+command -nargs=* -complete=customlist,RelativeFileComplete E :call OpenBasedOnRelativeArgument("<args>", "EDIT")
+command -nargs=* -complete=customlist,RelativeFileComplete VS :call OpenBasedOnRelativeArgument("<args>", "VERTICAL_SPLIT")
+command -nargs=* -complete=customlist,RelativeFileComplete S :call OpenBasedOnRelativeArgument("<args>", "SPLIT")
+fun RelativeFileComplete(A,L,P)
+ let argpath = fnamemodify(a:A, ":h")
+ if argpath[0] == "~" || argpath[0] == "/"
+ let curpath = ""
+ else
+ let curpath = expand("%:h")."/"
+ endif
+ let argfile = fnamemodify(a:A, ":t")
+ let files = globpath(curpath.argpath, argfile."*", 0, 1)
+ for i in range(0, len(files) - 1)
+ if isdirectory(files[i])
+ let files[i] = files[i]."/"
+ endif
+ if len(curpath) > 0
+ let files[i] = substitute(files[i], curpath, "", "")
+ let files[i] = substitute(files[i], "^./", "", "")
+ endif
+ endfor
+ return files
+endfun
+" https://stackoverflow.com/a/20564623
+cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == "e" ? "E" : "e"
+cnoreabbrev <expr> vs getcmdtype() == ":" && getcmdline() == "vs" ? "VS" : "vs"
+cnoreabbrev <expr> s getcmdtype() == ":" && getcmdline() == "s" ? "S" : "s"
+
+" :no -> :nohlsearch instead of :noremap.
+cnoreabbrev <expr> no getcmdtype() == ":" && getcmdline() == "no" ? "nohlsearch" : "no"
+
+call Juliana#Init() " Custom insert mode tab behavior inherited from Emacs.
+inoremap <silent> <Tab> <C-R>=Juliana#CompleteTab("START")<CR>
+ \<C-R>=Juliana#CompleteTab("TAB")<CR>
+ \<C-R>=Juliana#CompleteTab("ALIGN")<CR>
+ \<C-R>=Juliana#CompleteTab("NEXT")<CR>
+inoremap <silent> <S-Tab> <C-R>=Juliana#CompleteSTab("PREV")<CR>
+nnoremap <silent> <expr> <Tab> Juliana#CompleteNTab("FOLD")
+
+command Tabify set noexpandtab | %retab! | set expandtab
+command Untabify set expandtab | %retab!
+
+command Hex :%!xxd
+command Unhex :%!xxd -r
+
+" https://stackoverflow.com/a/27721306
+"command -nargs=+ Ggr execute 'Ggrep! -q' <q-args>
+command -nargs=+ Ggr execute "silent Ggrep!" <q-args> | botright cwindow | redraw!
+" I had this mapped to <C-i> for the longest time. Sadly with OG vim
+" (not neovim) the fix for mapping <Tab> and <C-i> seperately doesn't work.
+" Changing this bind as the only concession to be compatible with vim
+" seems well worth it.
+nnoremap <C-o> :Ggr
+
+"" https://stackoverflow.com/a/37040415
+function! SyntaxGroup()
+ let l:s = synID(line("."), col("."), 1)
+ echo synIDattr(l:s, "name") . " -> " . synIDattr(synIDtrans(l:s), "name")
+endfun
+command Syn :call SyntaxGroup()
+
+" https://vi.stackexchange.com/a/456
+function! TrimWhitespace()
+ let l:save = winsaveview()
+ keeppatterns %s/\s\+$//e
+ call winrestview(l:save)
+endfun
+command Trim :call TrimWhitespace()
diff --git a/files/waydroid/waydroid.cfg b/files/waydroid/waydroid.cfg
new file mode 100644
index 0000000..ef6ddc6
--- /dev/null
+++ b/files/waydroid/waydroid.cfg
@@ -0,0 +1,60 @@
+[waydroid]
+arch = x86_64
+vendor_type = MAINLINE
+system_datetime = 1754733814
+vendor_datetime = 1754691693
+suspend_action = freeze
+mount_overlays = True
+auto_adb = True
+images_path = /var/lib/waydroid/images
+binder = binder
+vndbinder = vndbinder
+hwbinder = hwbinder
+system_ota = https://ota.waydro.id/system/lineage/waydroid_x86_64/GAPPS.json
+vendor_ota = https://ota.waydro.id/vendor/waydroid_x86_64/MAINLINE.json
+binder_protocol = aidl3
+service_manager_protocol = aidl3
+
+[properties]
+ro.product.brand = google
+ro.product.manufacturer = Google
+ro.product.device = komodo
+ro.product.model = Pixel 9 Pro XL
+ro.product.name = komodo
+ro.system.build.fingerprint = google/komodo/komodo:16/BP2A.250705.008/13578956:user/release-keys
+ro.build.fingerprint = google/komodo/komodo:16/BP2A.250705.008/13578956:user/release-keys
+ro.vendor.build.fingerprint = google/komodo/komodo:16/BP2A.250705.008/13578956:user/release-keys
+ro.bootimage.build.fingerprint = google/komodo/komodo:16/BP2A.250705.008/13578956:user/release-keys
+ro.system.build.description = komodo-user 16 BP2A.250705.008 13578956 release-keys
+ro.system.build.product = komodo
+ro.system.build.flavor = komodo-user
+ro.build.display.id = google/komodo/komodo:16/BP2A.250705.008/13578956:user/release-keys
+ro.build.tags = release-keys
+ro.build.description = komodo-user 16 BP2A.250705.008 13578956 release-keys
+ro.vendor.build.id = BP2A.250705.008
+ro.vendor.build.tags = release-keys
+ro.vendor.build.type = user
+ro.odm.build.tags = release-keys
+ro.boot.verifiedbootstate = green
+ro.boot.flash.locked = 1
+ro.kernel.qemu = 0
+ro.secure = 1
+ro.adb.secure = 1
+ro.debuggable = 0
+ro.build.selinux = 1
+ro.secureboot.enable = 1
+ro.boot.selinux = enforcing
+persist.sys.usb.config = none
+persist.service.adb.enable = 0
+settings.secure.android_id = 5adea3426167354a
+settings.secure.gsf_id = 127237629
+persist.graphics.vulkan.disable = false
+persist.vulkan.enabled = 1
+ro.product.cpu.abilist = x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
+ro.product.cpu.abilist32 = x86,armeabi-v7a,armeabi
+ro.product.cpu.abilist64 = x86_64,arm64-v8a
+ro.dalvik.vm.native.bridge = libhoudini.so
+ro.enable.native.bridge.exec = 1
+ro.dalvik.vm.isa.arm = x86
+ro.dalvik.vm.isa.arm64 = x86_64
+
diff --git a/files/windows/iso_checksums.txt b/files/windows/iso_checksums.txt
new file mode 100644
index 0000000..dbb32b6
--- /dev/null
+++ b/files/windows/iso_checksums.txt
@@ -0,0 +1,20 @@
+https://archive.org/details/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428
+en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso
+md5: f424a52153e6e5ed4c0d44235cf545d5
+sha1: 1c735b38931bf57fb14ebd9a9ba253ceb443d459
+sha256: 62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46
+sha512: 4cbecbdce1091e79445678595a1d9606651f2a81b1853d36877319102f4e9c2d6cc0ad3b8247b5ebd305571a39c2608d41459d8d782afc1b76a10d195de10a88
+
+== Research
+https://pastebin.com/ufJkDPwe
+https://gist.github.com/ivanagui2/6b8be4d8d2e618f8341937f67f243532
+https://forums.mydigitallife.net/threads/hashes-for-old-windows-sha-1-or-md5.26899/
+https://forums.mydigitallife.net/threads/windows-98-se-hash.9222/page-4
+
+https://awuctl.github.io/mvs/
+
+https://archive.org/details/windows-98-se-retail-english
+https://archive.org/details/ENWIN2000PROSP4
+https://archive.org/details/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332_202006
+
+// vim: set syntax=asciidoc:
diff --git a/files/windows/products.sha b/files/windows/products.sha
new file mode 100644
index 0000000..2c93019
--- /dev/null
+++ b/files/windows/products.sha
@@ -0,0 +1,232 @@
+# Windows XP Media Center 2005 Update Rollup 2 [265]
+be923dbf4887facc2ad8a42baa1749cd8b95e779 *de_winxp_mce_2005_update2.iso
+59bd8c23730b78167a23d913c2c8818b891278bf *en_winxp_mce_2005_update2.iso
+d20626ac9fe6aec2248209894ab72040ff29ce61 *fr_winxp_mce_2005_update2.iso
+0f6e63312b604ccbb9eff3917336ceb2a64a50c0 *it_winxp_mce_2005_update2.iso
+2674552c5987ff6ddb7fd21e2b0895cd6d0257ae *jp_winxp_mce_2005_update2.iso
+7df06eb37a222c40e65ffbe1587c204369375a5a *ko_winxp_mce_2005_update2.iso
+b7c99ef5fdcc632f82a914bedd4c29fdf85d1d6a *nl_winxp_mce_2005_update2.iso
+1c52ff0c7a672f6beb2b043ea5269945c15507f9 *sc_winxp_mce_2005_update2.iso
+
+# Windows 7 Ultimate with Service Pack 1 [1241]
+25565487abef877ebc6688c20a65e1c670b1f92d *ar_windows_7_ultimate_with_sp1_x64_dvd_u_677345.iso
+302dfd114e2bf89ee69efb3b6ce9c982f84c9f91 *ar_windows_7_ultimate_with_sp1_x86_dvd_u_677448.iso
+f408a16822a0445b68db294707a06cbe874704ec *bg_windows_7_ultimate_with_sp1_x64_dvd_u_677363.iso
+94885a1482db7fcc00eed5460ec32b75b4db0a86 *bg_windows_7_ultimate_with_sp1_x86_dvd_u_677450.iso
+2ce0b2db34d76ed3f697ce148cb7594432405e23 *cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso
+b92119f5b732ece1c0850eda30134536e18ccce7 *cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso
+ccf08ed048978ff7f902b76a19288d3b6f7fa901 *cs_windows_7_ultimate_with_sp1_x64_dvd_u_677376.iso
+7b9488356ad3ac0444c421326d6c69fa96abb2f1 *cs_windows_7_ultimate_with_sp1_x86_dvd_u_677452.iso
+324c85b0d952ec267b2ddb5a9760ede1497e775c *da_windows_7_ultimate_with_sp1_x64_dvd_u_677294.iso
+8b0a1d5a5de47f5d508807db5893b97b1a4e78b4 *da_windows_7_ultimate_with_sp1_x86_dvd_u_677454.iso
+0388de83934b51f44447e1435ca0ff5eb99d20b6 *de_windows_7_ultimate_with_sp1_x64_dvd_u_677306.iso
+4de8a4198529b60d57e17e377efabb42b7b4f3a9 *de_windows_7_ultimate_with_sp1_x86_dvd_u_677456.iso
+88fa98c86c9b919501f71bbbc559c8565d808832 *el_windows_7_ultimate_with_sp1_x64_dvd_u_677318.iso
+3f08ce8a74e0cccaee7f946dcf250dc0712c2b1b *el_windows_7_ultimate_with_sp1_x86_dvd_u_677458.iso
+36ae90defbad9d9539e649b193ae573b77a71c83 *en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso
+65fce0f445d9bf7e78e43f17e441e08c63722657 *en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso
+af4b835557b5f15b574a3a643eecaf922fc1236c *es_windows_7_ultimate_with_sp1_x64_dvd_u_677350.iso
+5c1d3e8cfdc70dc44dc5ac1cb89cacc3c515b1e8 *es_windows_7_ultimate_with_sp1_x86_dvd_u_677462.iso
+a276277be05b62154965e9be2c80665cab91e213 *et_windows_7_ultimate_with_sp1_x64_dvd_u_677368.iso
+a8b00577f1370b7411e821e4a1f65aaf7fb2b15c *et_windows_7_ultimate_with_sp1_x86_dvd_u_677464.iso
+23c57b632d12e5de40543334be3dc56cdc4f9fd9 *fi_windows_7_ultimate_with_sp1_x64_dvd_u_677378.iso
+593ab48ed74d7fb3ac85168ed488af2743934ee9 *fi_windows_7_ultimate_with_sp1_x86_dvd_u_677466.iso
+5370bb44f497e1b19114c7cf70f5cdef9f3a2582 *fr_windows_7_ultimate_with_sp1_x64_dvd_u_677299.iso
+6a4d873e82698f7bf157c67a69c2db9bce6c769e *fr_windows_7_ultimate_with_sp1_x86_dvd_u_677434.iso
+e0f821d1d24504747f725950aa6ff5db706d3767 *he_windows_7_ultimate_with_sp1_x64_dvd_u_677312.iso
+548e0937927193cc6e336e41c429cf401c4ef9e3 *he_windows_7_ultimate_with_sp1_x86_dvd_u_677436.iso
+7dc2db86f2c2304f4f71bc651da49add77076dc6 *hk_windows_7_ultimate_with_sp1_x64_dvd_u_677411.iso
+66cd3d00631df7ede1d94331a49b842e1c2d37ef *hk_windows_7_ultimate_with_sp1_x86_dvd_u_677487.iso
+f725ea9bc7f63c504ef88abf40958fe7111d8e10 *hr_windows_7_ultimate_with_sp1_x64_dvd_u_677324.iso
+2809bcef53fcf04fe410c16f5dd6be33c29cf1c9 *hr_windows_7_ultimate_with_sp1_x86_dvd_u_677438.iso
+28249fc2426245c4bb43649091614ccfb294d2ed *hu_windows_7_ultimate_with_sp1_x64_dvd_u_677338.iso
+bb1e5b2055511861196cbb4526d04b15a7e3ebe6 *hu_windows_7_ultimate_with_sp1_x86_dvd_u_677441.iso
+9af84e5a557c30f9d0c10bdc5fed339a7159f830 *it_windows_7_ultimate_with_sp1_x64_dvd_u_677356.iso
+3378d4bfdbab850407ab6047b68fa9cbb2275b75 *it_windows_7_ultimate_with_sp1_x86_dvd_u_677443.iso
+643f7d12ff4b412e40c35bbb17b5bc11379e8c73 *ja_windows_7_ultimate_with_sp1_x64_dvd_u_677372.iso
+19e0b9f78165731fc862eacca7f1801d6eca7980 *ja_windows_7_ultimate_with_sp1_x86_dvd_u_677445.iso
+7bbf0f48937f4fcbbca63dce2cf2945cec1d6bc5 *lt_windows_7_ultimate_with_sp1_x64_dvd_u_677379.iso
+a49b13daeaf462b05756e0d6d45aa29da0bd142c *lt_windows_7_ultimate_with_sp1_x86_dvd_u_677447.iso
+436af00fcf6e026ba7ef9861b74d67643269c2e5 *lv_windows_7_ultimate_with_sp1_x64_dvd_u_677302.iso
+32d05111a894cf4dcaab8ad4359cd4e1f6b54799 *lv_windows_7_ultimate_with_sp1_x86_dvd_u_677449.iso
+8ea95845447abcc0a7bccee6df5142779e19fa58 *nl_windows_7_ultimate_with_sp1_x64_dvd_u_677325.iso
+730e312b1a27deaed174841d9d4b562e3d81fcd7 *nl_windows_7_ultimate_with_sp1_x86_dvd_u_677453.iso
+6f487f2a523c3de8e2d9c9d113b42c56ae7a10dc *no_windows_7_ultimate_with_sp1_x64_dvd_u_677314.iso
+2add96c938e93c40fdab7154748befed18ab35e5 *no_windows_7_ultimate_with_sp1_x86_dvd_u_677451.iso
+c6620ae85d42fca40c202b68c0e7124bc0eda7c2 *pl_windows_7_ultimate_with_sp1_x64_dvd_u_677341.iso
+38dc423de68dd73fae600096ab82a1c5b63fa0ca *pl_windows_7_ultimate_with_sp1_x86_dvd_u_677455.iso
+03686f4e838102220aa9925c3f2c067a6c7dc46e *pp_windows_7_ultimate_with_sp1_x64_dvd_u_677373.iso
+8bd12c1a0925d77b3ef8c0dbf966f5b0b22a8a9e *pp_windows_7_ultimate_with_sp1_x86_dvd_u_677459.iso
+2a015945685da102c2601af463b474a343985ef7 *pt_windows_7_ultimate_with_sp1_x64_dvd_u_677358.iso
+95c625d1c6a80cd8f4a188bc8547a436a108efce *pt_windows_7_ultimate_with_sp1_x86_dvd_u_677457.iso
+3d52a0b34af2f8151a40aedcb967d0e088f51c94 *ro_windows_7_ultimate_with_sp1_x64_dvd_u_677380.iso
+142ce0e9af47753629a1060ed377472587f54fe7 *ro_windows_7_ultimate_with_sp1_x86_dvd_u_677461.iso
+106caf0695318ad0d82e441a54be8460bf099b09 *ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso
+d224888cfa62847faa3505630a206bdcd10a9930 *ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463.iso
+d096a8aa881d90e65be9a57d49c23dfb16ac01b1 *sk_windows_7_ultimate_with_sp1_x64_dvd_u_677393.iso
+5234ecee1bbe1b60b91a75795388ca73ea300337 *sk_windows_7_ultimate_with_sp1_x86_dvd_u_677465.iso
+b9e29e1905335a7109234f339b860109e954e172 *sl_windows_7_ultimate_with_sp1_x64_dvd_u_677396.iso
+eb1a70a198e97c5d3fce1efb8fe684ad9b6af873 *sl_windows_7_ultimate_with_sp1_x86_dvd_u_677467.iso
+a11551e1306b90208c5f703b1c229843c5fa0daf *sr_windows_7_ultimate_with_sp1_x64_dvd_u_677398.iso
+4a343bdab5298b3467eacf571bf91aa8c2eae04c *sr_windows_7_ultimate_with_sp1_x86_dvd_u_677468.iso
+839c4132d5169cfa2cfca76f1e71d92f5cfc6117 *sv_windows_7_ultimate_with_sp1_x64_dvd_u_677400.iso
+cd875f8f0f72d8e6a2c9c617461990a67faeddbd *sv_windows_7_ultimate_with_sp1_x86_dvd_u_677482.iso
+6e409e5174bbf83e62a5dfe91b952d11c8a078a3 *th_windows_7_ultimate_with_sp1_x64_dvd_u_677402.iso
+aa9b3c5ddf2196cdaf002bb5dc2a1459dadfb041 *th_windows_7_ultimate_with_sp1_x86_dvd_u_677483.iso
+86a6b3b55e7fc2cec798806a80263ca59b77a992 *tr_windows_7_ultimate_with_sp1_x64_dvd_u_677404.iso
+c352f8b7071a7893edecacc02af1421f1cb6bf32 *tr_windows_7_ultimate_with_sp1_x86_dvd_u_677484.iso
+c580ad0ffcb4c08e4f8c1b1ed8ce22675977bc05 *tw_windows_7_ultimate_with_sp1_x64_dvd_u_677414.iso
+c281631b915aa24b93c37f6d5d586aa7b51211d8 *tw_windows_7_ultimate_with_sp1_x86_dvd_u_677488.iso
+9fe311e57d626901e4a6205e345ebaa5ff9c2c5f *uk_windows_7_ultimate_with_sp1_x64_dvd_u_677406.iso
+15c8de9014c9ec511878fb9bd4704a54d81a4d4f *uk_windows_7_ultimate_with_sp1_x86_dvd_u_677485.iso
+
+# Windows Vista with Service Pack 2 [1257]
+b284c32290d619d6dc3afee60f462b25c55f436a *ar_windows_vista_with_sp2_x64_dvd_x15-36318.iso
+caaa08290a55a17df9c15bd82960fbcbb179aea3 *ar_windows_vista_with_sp2_x86_dvd_x15-36282.iso
+563261102ce9c012ba2b8dc44816c4bc726b057f *bg_windows_vista_with_sp2_x64_dvd_x15-36321.iso
+f4af9b66b6b16a2e3253ec0302c4783783a68080 *bg_windows_vista_with_sp2_x86_dvd_x15-36284.iso
+a1689c254fb3bd67807ee493ee7d4896bca39887 *cn_windows_vista_with_sp2_x64_dvd_x15-36322.iso
+da7f7bdc841ddffabff7ddab6b1158873bf1246d *cn_windows_vista_with_sp2_x86_dvd_x15-36285.iso
+d686d03e6e2985b87fb92b8f901f7253a28da7dc *cs_windows_vista_with_sp2_x64_dvd_x15-36327.iso
+877237900943650852773fa8005c205775df81ec *cs_windows_vista_with_sp2_x86_dvd_x15-36289.iso
+ceca9de5065828822720b3df0207076a0cb9574d *da_windows_vista_with_sp2_x64_dvd_x15-36329.iso
+40a85490fb24f29b21c085af9a7f83586be460b8 *da_windows_vista_with_sp2_x86_dvd_x15-36290.iso
+d3c6e5d3d01a13576af15533ec40f74abbddce9b *de_windows_vista_sp2_x64_dvd_342287.iso
+bfb0973b0c2cfbb37e65d9e670910f080493c7c1 *de_windows_vista_sp2_x86_dvd_342286.iso
+1136b9202aae3d5ba5d4d6d2714eaf3445e9ab55 *el_windows_vista_with_sp2_x64_dvd_x15-36343.iso
+de27f554306fce123be27d6d3f543a757a361ae9 *el_windows_vista_with_sp2_x86_dvd_x15-36297.iso
+aaee3c04533899f9f8c4ae0c4250ef5fafbe29a3 *en_windows_vista_sp2_x64_dvd_342267.iso
+25ad9a776503e6a583bec07879dbcc5dfd20cd6e *en_windows_vista_with_sp2_x86_dvd_342266.iso
+bb03bb83e82338c43296884b11588fdf987593a1 *es_windows_vista_sp2_x64_dvd_342309.iso
+1c6f6b5041a7556bb8e3aa636d856aa206b99d3c *es_windows_vista_sp2_x86_dvd_342308.iso
+e318595e9dae52966bdce60ba3e55356efaedbf8 *et_windows_vista_with_sp2_x64_dvd_x15-36335.iso
+b598f56fd0b8394766db8fc4e2857afcc9a5b1b3 *et_windows_vista_with_sp2_x86_dvd_x15-36293.iso
+8c4b4878333a4ec1decff67eaf360b2fcbc95b82 *fi_windows_vista_with_sp2_x64_dvd_x15-36337.iso
+8f5e5807e208c70d0150362f995b50c5c915fd6e *fi_windows_vista_with_sp2_x86_dvd_x15-36294.iso
+b8d697f8e9a21d25c5ef04ae80982d4f22673a6a *fr_windows_vista_sp2_x64_dvd_342277.iso
+c5a0a891f15082b45e987fd583900591babd118c *fr_windows_vista_sp2_x86_dvd_342276.iso
+92d9b4c4acaeab4006bec38aad73ef4bf70fdac5 *he_windows_vista_with_sp2_x64_dvd_x15-36344.iso
+6fe8c70fa8aa9f4b849312ccd8125ec55665818f *he_windows_vista_with_sp2_x86_dvd_x15-36298.iso
+be2b4e2be0d75182210e8084909483f177f5af03 *hk_windows_vista_with_sp2_x64_dvd_x15-36324.iso
+c88aa86345083f482410ec7ed9e15de2c174ce4f *hk_windows_vista_with_sp2_x86_dvd_x15-36287.iso
+35abf8d7ff2a01b77a64f808f0296c2946748d82 *hr_windows_vista_with_sp2_x64_dvd_x15-36325.iso
+f0e298cd7f4e3804bea1f51bb911168f3e259c84 *hr_windows_vista_with_sp2_x86_dvd_x15-36288.iso
+50e67aca9489f0ac34406d87d910d341dc38e226 *hu_windows_vista_with_sp2_x64_dvd_x15-36346.iso
+57ff0ec21f1fd2df43c28174119f426cac697454 *hu_windows_vista_with_sp2_x86_dvd_x15-36299.iso
+137fc1d51dd0f025e9e489e22d5cf8cc9cb0d8bf *it_windows_vista_with_sp2_x64_dvd_x15-36348.iso
+25601d6333ef9966adf6c100ebc0d453a08823bb *it_windows_vista_with_sp2_x86_dvd_x15-36300.iso
+a221c018638a5c0cf008b1feb57418178ae64815 *ja_windows_vista_sp2_x64_dvd_342298.iso
+2561ca265260d98b687f6b896eabe89234a9cb27 *ja_windows_vista_sp2_x86_dvd_342296.iso
+4664ddee58a9cb8a1fc7dd31d9c484cc176b8569 *lt_windows_vista_with_sp2_x64_dvd_x15-36355.iso
+51eea18c696004630817de7d094bc55e441852b9 *lt_windows_vista_with_sp2_x86_dvd_x15-36304.iso
+2602317b7e6a0da5b7b3b333f35d646ef703d9e3 *lv_windows_vista_with_sp2_x64_dvd_x15-36353.iso
+bccf6135beb6932844f8366bcbfec49f59de042e *lv_windows_vista_with_sp2_x86_dvd_x15-36303.iso
+959882845cfc5978e301266b47aa1430c5284d40 *nl_windows_vista_with_sp2_x64_dvd_x15-36331.iso
+d0e07434493f063a7d6a13a67be36cb923598114 *nl_windows_vista_with_sp2_x86_dvd_x15-36291.iso
+03e4b8dd2e69f62dd28cae7b37f79e3c722ddccb *no_windows_vista_with_sp2_x64_dvd_x15-36357.iso
+3e6c07b6baccc2b69dadf652184465b291040d1e *no_windows_vista_with_sp2_x86_dvd_x15-36305.iso
+15aa9ee504f937b3c32780f791e7af13729b9c17 *pl_windows_vista_with_sp2_x64_dvd_x15-36359.iso
+3d086afce629b24463145409a182d3c9c9a75737 *pl_windows_vista_with_sp2_x86_dvd_x15-36306.iso
+aea8a1cfbfc74be53833d22ee17ac044bca28c4b *pp_windows_vista_with_sp2_x64_dvd_x15-36361.iso
+af873f67d68a1d426a7a7fd23a480be749e2614c *pp_windows_vista_with_sp2_x86_dvd_x15-36307.iso
+4d61447f037e5ef925be200a8919604411f638b8 *pt_windows_vista_with_sp2_x64_dvd_x15-36319.iso
+597eeac876033ba1df279acfa310f2e4fd56e7df *pt_windows_vista_with_sp2_x86_dvd_x15-36283.iso
+5f75fb171bdb5c4a59540767ba0fd2163360d74e *ro_windows_vista_with_sp2_x64_dvd_x15-36363.iso
+da86c65d91b6b4dd110e99e0bc61466040b54788 *ro_windows_vista_with_sp2_x86_dvd_x15-36308.iso
+8b7ec16e567f3f2c113e8a229bbcd1215b97b4b8 *ru_windows_vista_with_sp2_x64_dvd_x15-36364.iso
+5f80659031cfbfb702e1670a3698eee698fe0261 *ru_windows_vista_with_sp2_x86_dvd_x15-36309.iso
+6bb704df605799b72222073802298eafc8fa0062 *sk_windows_vista_with_sp2_x64_dvd_x15-36367.iso
+a3bd712c92736fe450d68407c59560416985ab68 *sk_windows_vista_with_sp2_x86_dvd_x15-36311.iso
+fbb021df12783cc7ee40d7cfc0e2ad8f675e550b *sl_windows_vista_with_sp2_x64_dvd_x15-36369.iso
+f3c9eab2193f9a73eeb56890c6b429b67d3bdf26 *sl_windows_vista_with_sp2_x86_dvd_x15-36312.iso
+fee952fded3a3e403fc2fdd320babaf7c2f741f1 *sr_windows_vista_with_sp2_x64_dvd_x15-36365.iso
+f05eb36aa6a6f58b1617290c9ca153a736e6c216 *sr_windows_vista_with_sp2_x86_dvd_x15-36310.iso
+40b5dec573ae3aba12b2137ede23e0175ef061f6 *sv_windows_vista_with_sp2_x64_dvd_x15-36373.iso
+64767dfe48be253be4c414eca9204ecc06310074 *sv_windows_vista_with_sp2_x86_dvd_x15-36314.iso
+18be06d3183012e908997d4ef21d23ee040de796 *th_windows_vista_with_sp2_x64_dvd_x15-36374.iso
+a114b8e05a97fed56eac63f38939c61a36dbfbbe *th_windows_vista_with_sp2_x86_dvd_x15-36315.iso
+6ce6f528763a326e0da4b2d19c7687f4a008f64e *tr_windows_vista_with_sp2_x64_dvd_x15-36375.iso
+74354142af15cb154ebbf76379e5b30f6fffb6e0 *tr_windows_vista_with_sp2_x86_dvd_x15-36316.iso
+3888577027c9fe93aea0b6663937f364ed8147d4 *tw_windows_vista_with_sp2_x64_dvd_x15-36323.iso
+bc116de2effd4daea5a331c6f2e209ab4cf5f99c *tw_windows_vista_with_sp2_x86_dvd_x15-36286.iso
+fe63d62e8d9c62296a1eabb20124e7373884e749 *uk_windows_vista_with_sp2_x64_dvd_x15-36376.iso
+cff5df9c964d7627ba99081ba5998180a0478d3e *uk_windows_vista_with_sp2_x86_dvd_x15-36317.iso
+
+# Windows XP Media Center 2005 [7180]
+520d1abf754d63dbc394c91bb8593b4ac6d7bea8 *de_winxp_mce_2005_cd1.iso
+9f0e3517426e87331e6ebff03231362757350040 *de_winxp_mce_2005_cd2.iso
+263e59a41559bdb988304f033ea8116efc500456 *en_winxp_mce_2005_cd1.iso
+4efc488f9ed6b746cec11e8b1cdc5241c50fa490 *en_winxp_mce_2005_cd2.iso
+05504416dbc759479331abc82066a425f191d66d *fr_winxp_mce_2005_cd1.iso
+c3d5f92ec313aeff20b962ff627c269340452ef8 *fr_winxp_mce_2005_cd2.iso
+418fa8ff08602e7d0a738deec3ff823fd70b88ed *it_winxp_mce_2005_cd1.iso
+a7859e72b3bcf1e76e86dd52941755688f4cf252 *it_winxp_mce_2005_cd2.iso
+361479fdaa23708b090e73129023e2a7d760449c *ja_winxp_mce_2005_cd2.iso
+0651ef452ba28467fcaea9fa1c1977ed03496e86 *jp_winxp_mce_2005_cd1.iso
+6c905d3435f4575d1e68a14c0e924b0edbbb34c5 *ko_winxp_mce_2005_cd1.iso
+f05d750f2fa15c2573e11f4ad20c8ce452a38c0c *ko_winxp_mce_2005_cd2.iso
+4b75453c6841192e02e7a2630ac0d6d975c09431 *nl_winxp_mce_2005_cd1.iso
+376a1fe3164b4787e1eff3fb091cd21101ca70e2 *nl_winxp_mce_2005_cd2.iso
+8d6a1aa1871c49314cb9df4899e025ca63058fc0 *sc_winxp_mce_2005_cd1.iso
+01b8242ac47bc04d1940869d5b06fdff30b370c6 *sc_winxp_mce_2005_cd2.iso
+
+# Windows XP Media Center 2005 Localization Pack [7184]
+caf3c67fada58f12b8fb7da3d5629ec5da94fe51 *cht_winxp_mce_2005_locpack.iso
+2a8ebb591e8835cdda270a8e04a5434e472d947e *cz_winxp_mce_2005_locpack.iso
+a1a9b40dd628f20ccdd9308408f27a26812c43cd *da_winxp_mce_2005_locpack.iso
+5c91fb60ce8f29aea3d16fa3f1db6277a219d164 *es_winxp_mce_2005_locpack.iso
+d88adef74c5594fcefeb8419933115336cf4357d *fi_winxp_mce_2005_locpack.iso
+e19ebad1a8ae918754d8d2f3d829ef02b97268ba *hk_winxp_mce_2005_locpack.iso
+168209f3f4b44e5388ebf87516ff04515ab0740e *no_winxp_mce_2005_locpack.iso
+50b8ea28f69ddd7a8f48216bc7b6c00d4b26cd03 *po_winxp_mce_2005_locpack.iso
+8affd56c0588336d8306d3fb25874d3888637f82 *pt_winxp_mce_2005_locpack.iso
+b3456382d646413e1ff61b09e0708bf0e25f687e *ru_winxp_mce_2005_locpack.iso
+a735aec6b85cea32ca881a70325e51d8c5c8a296 *sv_winxp_mce_2005_locpack.iso
+7476748aa58ce02311927028848212cf7a1d27b2 *tk_winxp_mce_2005_locpack.iso
+
+# Windows XP Professional with Service Pack 3 [7630]
+22ae37b8f860d8ff7b30a82878e15931e41d1725 *ar_windows_xp_professional_with_service_pack_3_x86_cd_x14-80396.iso
+9f4201afa36ae9f31ceaf4fc642e9764fcb5f536 *cs_windows_xp_professional_with_service_pack_3_x86_cd_x14-80416.iso
+9a6c10040e4c5ce1f8a2d60c7e0319edf8dceb92 *da_windows_xp_professional_with_service_pack_3_x86_cd_x14-80420.iso
+543b4a7c6779002a63614f09e5218056ee220af6 *de_windows_xp_professional_with_service_pack_3_x86_cd_x14-80444.iso
+254a501babf9716f9b3c9c73cadc4900a21fb73c *el_windows_xp_professional_with_service_pack_3_x86_cd_x14-80448.iso
+1c735b38931bf57fb14ebd9a9ba253ceb443d459 *en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso
+11ffce4604bbf627c5695e30c2238266e214c5db *es_windows_xp_professional_with_service_pack_3_x86_cd_x14-80488.iso
+ce9bf0c9dc49efeba3b868e72baccb7f07ce63f9 *fi_windows_xp_professional_with_service_pack_3_x86_cd_x14-80436.iso
+ffba78eb8e5a965a178ebd0cf354e9dd67dd5064 *fr_windows_xp_professional_with_service_pack_3_x86_cd_x14-80440.iso
+be5790b582368c5c3c7170760d2b578f22da76cb *he_windows_xp_professional_with_service_pack_3_x86_cd_x14-80452.iso
+90476edef22543d7e56c7d924b4c54a0aa86303b *hu_windows_xp_professional_with_service_pack_3_x86_cd_x14-80456.iso
+2ba80aa9de48c34b2ab488afda9666ba7f4aa963 *it_windows_xp_professional_with_service_pack_3_x86_cd_x14-80460.iso
+3125aaed8f40a5d8a10dbb959a03e39acc0d9fcb *ja_windows_xp_professional_with_service_pack_3_x86_dvd_x14-80464.iso
+ab323d40a96471675d12dde87bafd6fe0adc7141 *nl_windows_xp_professional_with_service_pack_3_x86_cd_x14-80424.iso
+b5dac6d279e55b434c41ba8d5f9697a65affdc09 *no_windows_xp_professional_with_service_pack_3_x86_cd_x14-80472.iso
+595ca475f4a80b42704ae2fca9fb9042c37d5c49 *pl_windows_xp_professional_with_service_pack_3_x86_cd_x14-80476.iso
+32f376c2252849c81e1aa704838b01210c09ba96 *pt-br_windows_xp_professional_with_service_pack_3_x86_cd_x14-80400.iso
+b8d34a720cbe3533ec45c870d1432fc568599e97 *pt-pt_windows_xp_professional_with_service_pack_3_x86_cd_x14-80480.iso
+3686da63d3d3e8402eb43fe4bf29a58486eca6b3 *ru_windows_xp_professional_with_service_pack_3_x86_cd_x14-80484.iso
+5060d593c8eac1d9875f5fd6f23691706abc5460 *sv_windows_xp_professional_with_service_pack_3_x86_cd_x14-80492.iso
+ca1d57347afe6f9297e00381e0ae849fab8bc4f9 *tr_windows_xp_professional_with_service_pack_3_x86_cd_x14-80496.iso
+69dbf131116760932dcf132ade111d6b45778098 *zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso
+48ac651e487a7368be50163263c4a3927fb4e869 *zh-hk_windows_xp_professional_with_service_pack_3_x86_cd_x14-80412.iso
+ce63c1b72e058e121db9d58f81623da3e7401fbf *zh-tw_windows_xp_professional_with_service_pack_3_x86_cd_x14-80408.iso
+
+# Windows Vista Ultimate with Service Pack 2 Debug-Checked [7641]
+4b0be4a155dceea5ce8069f9806fd505f63fdbbc *en_windows_vista_ultimate_sp2_checked_build_x64_dvd_342433.iso
+3617756d54dffc47b803b30a530ff389a15dc3d3 *en_windows_vista_ultimate_sp2_checked_build_x86_dvd_342432.iso
+
+# Windows 10 IoT Enterprise LTSC 2021 [8166]
+d265df49b30a1477d010c79185a7bc88591a1be4b3eb690c994bed828ea17c00 *en-us_windows_10_iot_enterprise_ltsc_2021_arm64_dvd_e8d4fc46.iso
+a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160 *en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso
+
+# Windows Vista Media Center Software Development Kit (SDK) Version 5.3 [8402]
+3aac262d8ca5205b197a8378f3d66a4f1d2399dd *en_windows_vista_media_center_sdk_v5.3_x86_cd_x14-28827.iso
+
+# Windows Vista Media Center Software Development Kit (SDK) Version 5.2 [8403]
+f54ea53d96e4b2558be56931a3f339649bf973c8 *en_windows_vista_media_center_software_development_kit_v5.2_cd_x14-07889.iso
+
+# Windows Vista Media Center Software Development Kit (SDK) Refresh [8404]
+d6486e9b3e8bc9be3858e78287befba1605b603e *en_windows_vista_media_center_sdk_refresh_dvd_x13-77439.iso
+
+# Windows 11 IoT Enterprise LTSC 2024 [8870]
+f8f068cdc90c894a55d8c8530db7c193234ba57bb11d33b71383839ac41246b4 *en-us_windows_11_iot_enterprise_ltsc_2024_arm64_dvd_ec517836.iso
+4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a *en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso