Browse Source

Merge branch 'sway'

Casey DeLorme 9 months ago
parent
commit
be95682350
70 changed files with 939 additions and 863 deletions
  1. 61 62
      arch.sh
  2. 9 0
      install/etc/polkit-1/rules.d/90-corectrl.rules
  3. 0 58
      install/etc/skel/.Xdefaults
  4. 21 2
      install/etc/skel/.bash_profile
  5. 5 14
      install/etc/skel/.bashrc
  6. 8 0
      install/etc/skel/.config/alacritty/alacritty.yml
  7. 3 0
      install/etc/skel/.config/chromium-flags.conf
  8. 0 26
      install/etc/skel/.config/conky/conky.conf
  9. 3 0
      install/etc/skel/.config/electron-flags.conf
  10. 2 2
      install/etc/skel/.config/libfm/libfm.conf
  11. 2 2
      install/etc/skel/.config/mimeapps.list
  12. 8 2
      install/etc/skel/.config/mpv/mpv.conf
  13. 0 7
      install/etc/skel/.config/openbox/autostart
  14. 0 18
      install/etc/skel/.config/openbox/menu.xml
  15. 0 107
      install/etc/skel/.config/openbox/rc.xml
  16. 0 63
      install/etc/skel/.config/picom/picom.conf
  17. 0 0
      install/etc/skel/.config/sublime-text/Packages/User/Default (Linux).sublime-keymap
  18. 0 0
      install/etc/skel/.config/sublime-text/Packages/User/GoSublime.sublime-settings
  19. 0 0
      install/etc/skel/.config/sublime-text/Packages/User/Markdown.sublime-settings
  20. 0 0
      install/etc/skel/.config/sublime-text/Packages/User/MarkdownPreview.sublime-settings
  21. 1 0
      install/etc/skel/.config/sublime-text/Packages/User/Preferences.sublime-settings
  22. 0 0
      install/etc/skel/.config/sublime-text/Packages/User/default_file_type.sublime-settings
  23. 171 0
      install/etc/skel/.config/sway/config
  24. 13 0
      install/etc/skel/.config/sway/config.d/keyboard-defaults
  25. 0 12
      install/etc/skel/.config/systemd/user/conky.service
  26. 12 0
      install/etc/skel/.config/systemd/user/corectrl.service
  27. 1 1
      install/etc/skel/.config/systemd/user/fcitx5.service
  28. 1 1
      install/etc/skel/.config/systemd/user/gsettings.service
  29. 1 1
      install/etc/skel/.config/systemd/user/lxpolkit.service
  30. 0 10
      install/etc/skel/.config/systemd/user/openbox-autostart.service
  31. 0 12
      install/etc/skel/.config/systemd/user/pasystray.service
  32. 0 12
      install/etc/skel/.config/systemd/user/picom.service
  33. 1 1
      install/etc/skel/.config/systemd/user/sway-session.target
  34. 1 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/corectrl.service
  35. 0 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/fcitx5.service
  36. 1 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/gsettings.service
  37. 0 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/lxpolkit.service
  38. 1 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/update-desktop-database.service
  39. 0 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/wallpaper.service
  40. 1 0
      install/etc/skel/.config/systemd/user/sway-session.target.wants/xdg-user-dirs-update.service
  41. 0 12
      install/etc/skel/.config/systemd/user/tint2.service
  42. 10 0
      install/etc/skel/.config/systemd/user/update-desktop-database.service
  43. 1 1
      install/etc/skel/.config/systemd/user/wallpaper.service
  44. 10 0
      install/etc/skel/.config/systemd/user/xdg-user-dirs-update.service
  45. 0 1
      install/etc/skel/.config/systemd/user/xsession.target.wants/conky.service
  46. 0 1
      install/etc/skel/.config/systemd/user/xsession.target.wants/openbox-autostart.service
  47. 0 1
      install/etc/skel/.config/systemd/user/xsession.target.wants/pasystray.service
  48. 0 1
      install/etc/skel/.config/systemd/user/xsession.target.wants/picom.service
  49. 0 1
      install/etc/skel/.config/systemd/user/xsession.target.wants/tint2.service
  50. 0 106
      install/etc/skel/.config/tint2/tint2rc
  51. 58 0
      install/etc/skel/.config/waybar/config
  52. 254 0
      install/etc/skel/.config/waybar/style.css
  53. 39 3
      install/etc/skel/.config/yt-dlp/config
  54. 0 5
      install/etc/skel/.xinitrc
  55. 3 0
      install/usr/local/bin/disk-maintenance
  56. 0 13
      install/usr/local/bin/genshin-impact
  57. 0 50
      install/usr/local/bin/mh
  58. 0 3
      install/usr/local/bin/mpv-control
  59. 0 36
      install/usr/local/bin/pash
  60. 1 8
      install/usr/local/bin/screenshot
  61. 6 2
      install/usr/local/bin/screenshot-selection
  62. 1 2
      install/usr/local/bin/system-updates
  63. 0 10
      install/usr/local/bin/urxvtq
  64. 53 25
      install/usr/local/bin/uz
  65. 9 6
      install/usr/local/bin/wallpaper
  66. 2 0
      notes/games/vr/valve-index.md
  67. 51 0
      notes/sway.md
  68. 1 0
      readme.md
  69. 1 4
      setup/install.sh
  70. 112 159
      todo.md

+ 61 - 62
arch.sh

@@ -55,15 +55,15 @@ curl -O https://download.sublimetext.com/sublimehq-pub.gpg && pacman-key --add s
 # Core tools
 # Core tools
 export PACKAGES="linux linux-headers linux-firmware base-devel mkinitcpio sudo bash-completion man-db tmux gvim dkms dmidecode at bc cronie lm_sensors lshw stress"
 export PACKAGES="linux linux-headers linux-firmware base-devel mkinitcpio sudo bash-completion man-db tmux gvim dkms dmidecode at bc cronie lm_sensors lshw stress"
 
 
+# install core packages so dependencies exist
+pacman -Syu --noconfirm $PACKAGES
+
 # Conditional CPU unicode
 # Conditional CPU unicode
 [ $(grep -c "Intel" /proc/cpuinfo) -gt 0 ] && PACKAGES="${PACKAGES} intel-ucode"
 [ $(grep -c "Intel" /proc/cpuinfo) -gt 0 ] && PACKAGES="${PACKAGES} intel-ucode"
 [ $(grep -c "AMD" /proc/cpuinfo) -gt 0 ] && PACKAGES="${PACKAGES} amd-ucode"
 [ $(grep -c "AMD" /proc/cpuinfo) -gt 0 ] && PACKAGES="${PACKAGES} amd-ucode"
 
 
-# Conditional laptop packages
-if [ -e /sys/class/power_supply/BAT0 ]; then
-	PACKAGES="${PACKAGES} xf86-input-synaptics acpid acpilight tlp"
-	sed -i "s/panel_items = LTSC/panel_items = LTSBC/g" /srv/arch-desktop/install/etc/skel/.config/tint2/tint2rc
-fi
+# Conditional battery packages
+[ -e /sys/class/power_supply/BAT0 ] && PACKAGES="${PACKAGES} xf86-input-synaptics acpid tlp"
 
 
 # Storage
 # Storage
 PACKAGES="${PACKAGES} btrfs-progs smartmontools usbutils gvfs gvfs-mtp gvfs-afc android-udev parted postgresql transmission-cli python-pip python-setuptools"
 PACKAGES="${PACKAGES} btrfs-progs smartmontools usbutils gvfs gvfs-mtp gvfs-afc android-udev parted postgresql transmission-cli python-pip python-setuptools"
@@ -72,52 +72,53 @@ PACKAGES="${PACKAGES} btrfs-progs smartmontools usbutils gvfs gvfs-mtp gvfs-afc
 PACKAGES="${PACKAGES} cryptsetup lzop unzip p7zip xz unrar unace lrzip arj innoextract"
 PACKAGES="${PACKAGES} cryptsetup lzop unzip p7zip xz unrar unace lrzip arj innoextract"
 
 
 # networking packages
 # networking packages
-PACKAGES="${PACKAGES} nftables iptables dnsmasq rsync dhcpcd inetutils net-tools openssh sshfs ntp wget curl wireless_tools bluez bluez-utils oath-toolkit openconnect openvpn ethtool pptpclient"
-
-# conditional networking packages
-[ -d "/sys/class/net/${active_network_device}/wireless" ] && PACKAGES="${PACKAGES} connman wpa_supplicant iwd"
+PACKAGES="${PACKAGES} nftables iptables dnsmasq rsync dhcpcd inetutils net-tools openssh sshfs ntp wget curl wireless_tools bluez bluez-utils oath-toolkit openconnect openvpn ethtool pptpclient connman wpa_supplicant iwd"
 
 
 # programming packages
 # programming packages
-PACKAGES="${PACKAGES} pkgfile pkgconf bison gcc gcc-libs cmake ccache ncurses xmlstarlet jq git mercurial subversion bzr patchelf packer vagrant libvirt qemu libguestfs virt-install edk2-ovmf"
+PACKAGES="${PACKAGES} pkgfile pkgconf bison gcc gcc-libs cmake ccache ncurses xmlstarlet jq git mercurial subversion bzr patchelf xdelta3 packer vagrant libvirt qemu qemu-base libguestfs virt-install edk2-ovmf"
 
 
 # multimedia dependencies
 # multimedia dependencies
-PACKAGES="${PACKAGES} mesa lib32-mesa dbus polkit giflib lib32-giflib mpg123 lib32-mpg123 v4l-utils lib32-v4l-utils lame libwebp libid3tag libvorbis vorbis-tools faac x264 x265 libpng12 lib32-libpng12 pulseaudio libpulse lib32-libpulse openal lib32-openal opencl-icd-loader lib32-opencl-icd-loader libva lib32-libva gst-plugins-base-libs lib32-gst-plugins-base-libs graphicsmagick imagemagick joyutils evtest libexif ffmpeg lxsession yt-dlp wine-staging winetricks fcitx5 fcitx5-mozc fcitx5-configtool fcitx5-gtk fcitx5-qt"
+PACKAGES="${PACKAGES} mesa lib32-mesa dbus polkit giflib lib32-giflib mpg123 lib32-mpg123 v4l-utils lib32-v4l-utils lame libwebp libid3tag libvorbis vorbis-tools faac x264 x265 libpng12 lib32-libpng12 pulseaudio libpulse lib32-libpulse openal lib32-openal opencl-icd-loader lib32-opencl-icd-loader libva lib32-libva libva-utils gst-plugins-base-libs lib32-gst-plugins-base-libs graphicsmagick imagemagick joyutils evtest libexif ffmpeg lxsession-gtk3 yt-dlp wine-staging winetricks fcitx5 fcitx5-mozc fcitx5-configtool fcitx5-gtk fcitx5-qt"
 
 
 # GUI theme
 # GUI theme
-PACKAGES="${PACKAGES} gnome-themes-extra gnome-icon-theme arc-gtk-theme"
+PACKAGES="${PACKAGES} gnome-themes-extra hicolor-icon-theme arc-gtk-theme gtk-engines gtk-engine-murrine"
 
 
-# Xorg dependencies
-PACKAGES="${PACKAGES} xorg-server xorg-server-devel xorg-xinit xorg-xinput xorg-xdpyinfo xorg-xprop xdotool xsel arandr "
+# GUI dependencies
+PACKAGES="${PACKAGES} gtk3 lib32-gtk3 pavucontrol pcmanfm-gtk3 ffmpegthumbnailer tumbler xdg-utils xdg-user-dirs"
 
 
-# openbox Environment
-PACKAGES="${PACKAGES} openbox gtk3 lib32-gtk3 feh hsetroot archlinux-xdg-menu picom pavucontrol pasystray xdg-utils xdg-user-dirs tint2 conky pcmanfm-gtk3 gmrun gtk-engines gtk-engine-murrine lxappearance ffmpegthumbnailer tumbler libva-mesa-driver lib32-libva-mesa-driver lib32-mesa-vdpau vulkan-tools vulkan-icd-loader lib32-vulkan-icd-loader "
+# vulkan packages
+PACKAGES="${PACKAGES} libva-mesa-driver lib32-libva-mesa-driver lib32-mesa-vdpau vulkan-tools vulkan-icd-loader lib32-vulkan-icd-loader"
+
+# Sway dependencies
+PACKAGES="${PACKAGES} sway swaybg alacritty wofi waybar xorg-xwayland xorg-xlsclients wev qt5-wayland glfw-x11 grim slurp xdg-desktop-portal-wlr libpipewire lib32-libpipewire wl-clipboard brightnessctl playerctl mako libappindicator-gtk3 lib32-libappindicator-gtk3"
 
 
 # fonts
 # fonts
 PACKAGES="${PACKAGES} fontconfig ttf-bitstream-vera ttf-droid ttf-dejavu ttf-liberation ttf-hanazono ttf-font-awesome"
 PACKAGES="${PACKAGES} fontconfig ttf-bitstream-vera ttf-droid ttf-dejavu ttf-liberation ttf-hanazono ttf-font-awesome"
 
 
 # GUI software
 # GUI software
-PACKAGES="${PACKAGES} rxvt-unicode urxvt-perls xarchiver gparted psensor hardinfo steam discord mpv openshot gimp krita firefox obs-studio dia mednafen mame ppsspp lutris sublime-text evince viewnior virt-manager virtualbox virtualbox-host-modules-arch"
+PACKAGES="${PACKAGES} xarchiver gparted psensor steam steam-native-runtime gamemode lib32-gamemode discord mpv mpv-mpris openshot gimp krita firefox obs-studio mednafen mame ppsspp lutris sublime-text evince viewnior virt-manager virtualbox virtualbox-host-modules-arch corectrl"
 
 
 # conditional GPU packages
 # conditional GPU packages
 if [ $(lspci | grep -i "vga" | grep -ci "amd") -gt 0 ]; then
 if [ $(lspci | grep -i "vga" | grep -ci "amd") -gt 0 ]; then
-	PACKAGES="$PACKAGES xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon mesa-vdpau"
+	PACKAGES="${PACKAGES} xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon mesa-vdpau"
 
 
 	# update modules to load
 	# update modules to load
 	[ $(grep -c "amd" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 amdgpu radeon)/' /etc/mkinitcpio.conf
 	[ $(grep -c "amd" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 amdgpu radeon)/' /etc/mkinitcpio.conf
 fi
 fi
 if [ $(lspci | grep -i "vga" | grep -ci "intel") -gt 0 ]; then
 if [ $(lspci | grep -i "vga" | grep -ci "intel") -gt 0 ]; then
-	PACKAGES="$PACKAGES xf86-video-intel vulkan-intel lib32-vulkan-intel mesa-vdpau"
+	PACKAGES="${PACKAGES} xf86-video-intel vulkan-intel lib32-vulkan-intel mesa-vdpau"
 
 
 	# update modules to load
 	# update modules to load
 	[ $(grep -c "amd" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 i915)/' /etc/mkinitcpio.conf
 	[ $(grep -c "amd" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 i915)/' /etc/mkinitcpio.conf
 fi
 fi
 if [ $(lspci | grep -i "vga" | grep -ci "nvidia") -gt 0 ]; then
 if [ $(lspci | grep -i "vga" | grep -ci "nvidia") -gt 0 ]; then
-	PACKAGES="$PACKAGES nvidia-dkms libglvnd lib32-libglvnd opencl-nvidia lib32-opencl-nvidia xf86-video-nouveau nvidia-utils lib32-nvidia-utils mesa-vdpau nvidia-settings"
+	PACKAGES="${PACKAGES} nvidia-dkms libglvnd lib32-libglvnd opencl-nvidia lib32-opencl-nvidia xf86-video-nouveau nvidia-utils lib32-nvidia-utils mesa-vdpau nvidia-settings"
 
 
 	# update modules to load
 	# update modules to load
 	[ $(grep -c "nvidia" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf
 	[ $(grep -c "nvidia" /etc/mkinitcpio.conf) -eq 0 ] && sed -i 's/MODULES=(\(.*\))/MODULES=(\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf
 
 
 	# automatic mkinitcpio updates in pacman.d
 	# automatic mkinitcpio updates in pacman.d
+	mkdir -p /etc/pacman.d/hooks
 	echo -e "[Trigger]\nOperation=Install\nOperation=Upgrade\nOperation=Remove\nType=Package\nTarget=nvidia\n\n[Action]\nDepends=mkinitcpio\nWhen=PostTransaction\nExec=/usr/bin/mkinitcpio -P" > /etc/pacman.d/hooks/nvidia.hook
 	echo -e "[Trigger]\nOperation=Install\nOperation=Upgrade\nOperation=Remove\nType=Package\nTarget=nvidia\n\n[Action]\nDepends=mkinitcpio\nWhen=PostTransaction\nExec=/usr/bin/mkinitcpio -P" > /etc/pacman.d/hooks/nvidia.hook
 fi
 fi
 
 
@@ -128,7 +129,7 @@ pacman -Syu --noconfirm $PACKAGES
 [ -d /srv/arch-desktop/install ] || git clone https://git.caseydelorme.com/cdelorme/arch-desktop /srv/arch-desktop
 [ -d /srv/arch-desktop/install ] || git clone https://git.caseydelorme.com/cdelorme/arch-desktop /srv/arch-desktop
 rsync -Pav /srv/arch-desktop/install/ /
 rsync -Pav /srv/arch-desktop/install/ /
 mkdir -p /etc/skel/.config/pulse
 mkdir -p /etc/skel/.config/pulse
-mkdir -p /etc/skel/{desktop,downloads,public,public/templates,documents,music,pictures,videos,git}
+mkdir -p /etc/skel/{desktop,downloads,public,public/templates,documents,music,pictures,videos,code}
 sed "/module-suspend-on-idle/d" /etc/pulse/default.pa > /etc/skel/.config/pulse/default.pa
 sed "/module-suspend-on-idle/d" /etc/pulse/default.pa > /etc/skel/.config/pulse/default.pa
 # @note: we may want to avoid disabling this on laptops
 # @note: we may want to avoid disabling this on laptops
 sed -i "/module-switch-on-port-available/d" /etc/skel/.config/pulse/default.pa
 sed -i "/module-switch-on-port-available/d" /etc/skel/.config/pulse/default.pa
@@ -136,7 +137,7 @@ rsync -Pav /etc/skel/ "$(getent passwd root | cut -d: -f6)/"
 sed -i "/ssh-add/d" "$(getent passwd root | cut -d: -f6)/.bashrc"
 sed -i "/ssh-add/d" "$(getent passwd root | cut -d: -f6)/.bashrc"
 
 
 # install protontricks
 # install protontricks
-python3 -m pip install protontricks
+# python3 -m pip install protontricks
 
 
 # enable ccache and optimize cores for AUR
 # enable ccache and optimize cores for AUR
 sed -i 's/!ccache/ccache/' /etc/makepkg.conf
 sed -i 's/!ccache/ccache/' /etc/makepkg.conf
@@ -155,6 +156,10 @@ sudo -u $aur_username git clone https://aur.archlinux.org/xcursor-chameleon-skyb
 sudo -u $aur_username git clone https://aur.archlinux.org/numix-icon-theme-git.git /home/${aur_username}/numix-icon-theme-git
 sudo -u $aur_username git clone https://aur.archlinux.org/numix-icon-theme-git.git /home/${aur_username}/numix-icon-theme-git
 (cd /home/${aur_username}/numix-icon-theme-git && sudo -u ${aur_username} makepkg -rcsi --noconfirm)
 (cd /home/${aur_username}/numix-icon-theme-git && sudo -u ${aur_username} makepkg -rcsi --noconfirm)
 
 
+# cmst (for connman UI)
+sudo -u $aur_username git clone https://aur.archlinux.org/cmst.git /home/${aur_username}/cmst
+(cd /home/${aur_username}/cmst && sudo -u ${aur_username} makepkg -rcsi --noconfirm)
+
 # cleanup aur user
 # cleanup aur user
 rm -rf /etc/sudoers.d/${aur_username}
 rm -rf /etc/sudoers.d/${aur_username}
 userdel -fr $aur_username
 userdel -fr $aur_username
@@ -172,9 +177,6 @@ if ! which flashplayer &> /dev/null; then
 	tar -xf /tmp/flash.tar.gz -C /usr/local/bin flashplayer
 	tar -xf /tmp/flash.tar.gz -C /usr/local/bin flashplayer
 fi
 fi
 
 
-# install urxvt perl enhancement for font resize support
-[ ! -f /usr/lib/urxvt/perl/font ] && curl -Lfs "https://raw.githubusercontent.com/noah/urxvt-font/master/font" > /usr/lib/urxvt/perl/font
-
 # create sudo group and add to sudoers
 # create sudo group and add to sudoers
 groupadd -fr sudo
 groupadd -fr sudo
 [ ! -f /etc/sudoers.d/sudo ] && echo '%sudo ALL=(ALL) ALL' > /etc/sudoers.d/sudo
 [ ! -f /etc/sudoers.d/sudo ] && echo '%sudo ALL=(ALL) ALL' > /etc/sudoers.d/sudo
@@ -204,45 +206,41 @@ su - postgres -c "initdb --locale en_US.UTF-8 -D '/var/lib/postgres/data'"
 echo "net.core.rmem_max = 4194304" > /etc/sysctl.d/transmission.conf
 echo "net.core.rmem_max = 4194304" > /etc/sysctl.d/transmission.conf
 echo "net.core.wmem_max = 1048576" >> /etc/sysctl.d/transmission.conf
 echo "net.core.wmem_max = 1048576" >> /etc/sysctl.d/transmission.conf
 
 
-# check whether username and password are not empty
-if [[ -n "$username" && -n "$password" ]]; then
-
-	# create user if not exists, else (re)-install dot-files
-	if ! id $username &> /dev/null; then
-		useradd -m -s /bin/bash $username
-		echo "${username}:${password}" | chpasswd -c SHA256
-	else
-		[ $EUID -ne 0 ] && rsync -Pav /etc/skel/ "$(getent passwd $username | cut -d: -f6)/"
-	fi
-
-	# add user to standard groups
-	usermod -aG users,sudo,adm,input,audio,video,disk,storage,lp,vboxusers $username
-
-	# generate postgres user and user database
-	systemctl start postgresql
-	su postgres -c "cd && createuser -ds $username" 2> /dev/null && su $username -c "cd && createdb"
-
-	# load xdg-user-dirs
-	su $username -c "cd && xdg-user-dirs-update"
-	update-desktop-database
-
-	# generate default (passwordless) ed25519 ssh key if none exists
-	su $username -c "cd; if [ ! -f ~/.ssh/id_ed25519 ]; then ssh-keygen -q -t ed25519 -N '' -f ~/.ssh/id_ed25519 && cd && chmod 600 ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519.pub; fi"
-
-	# install gvm loading from ~/.bash_profile, and the latest go version
-	su $username -c "if [ ! -d ~/.gvm ]; then GVM_NO_UPDATE_PROFILE=1 bash < <(curl -Ls https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer 2> /dev/null); fi"
-	su $username -c 'grep "gvm" ~/.bash_profile &> /dev/null || echo -e "\n# load gvm\n! which gvm &> /dev/null && . ~/.gvm/scripts/gvm" >> ~/.bash_profile'
-	su $username -c ". ~/.gvm/scripts/gvm && gvm install go1.17.6 -B && gvm use go1.17.6 --default"
-
-	# configure user-space transmission
-	if [ ! -f "/etc/systemd/system/transmission.service.d/local.conf" ]; then
-		su $username -c "cd && mkdir -p ~/transmission/{done,incomplete}"
-		su $username -c 'cd && tmp=$(mktemp) && jq ".[\"download-dir\"] = \"${HOME}/transmission/done\"" $HOME/.config/transmission-daemon/settings.json | jq ".[\"incomplete-dir\"] = \"${HOME}/transmission/incomplete\"" | jq ".[\"watch-dir\"] = \"$(xdg-user-dir DOWNLOAD)\"" > $tmp && mv $tmp $HOME/.config/transmission-daemon/settings.json'
-	fi
+# create user if not exists, else (re)-install dot-files
+if ! id $username &> /dev/null; then
+	useradd -m -s /bin/bash $username
+	echo "${username}:${password}" | chpasswd -c SHA256
+else
+	[ $EUID -ne 0 ] && rsync -Pav /etc/skel/ "$(getent passwd $username | cut -d: -f6)/"
+fi
+
+# add user to standard groups
+usermod -aG users,sudo,adm,input,audio,video,disk,storage,lp,vboxusers $username
+
+# generate postgres user and user database
+systemctl start postgresql
+su postgres -c "cd && createuser -ds $username" 2> /dev/null && su $username -c "cd && createdb"
+
+# load xdg-user-dirs
+su $username -c "cd && xdg-user-dirs-update"
+update-desktop-database
+
+# generate default (passwordless) ed25519 ssh key if none exists
+su $username -c "cd; if [ ! -f ~/.ssh/id_ed25519 ]; then ssh-keygen -q -t ed25519 -N '' -f ~/.ssh/id_ed25519 && cd && chmod 600 ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519.pub; fi"
+
+# install gvm loading from ~/.bashrc & ~/.bash_profile, and the latest go version
+su $username -c "if [ ! -d ~/.gvm ]; then GVM_NO_UPDATE_PROFILE=1 bash < <(curl -Ls https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer 2> /dev/null); fi"
+su $username -c 'grep "gvm" ~/.bash_profile &> /dev/null || echo -e "\n# load gvm\n[ -s $HOME/.gvm/scripts/gvm ] && . $HOME/.gvm/scripts/gvm" >> ~/.bash_profile'
+su $username -c ". ~/.gvm/scripts/gvm && gvm install go1.21.3 -B && gvm use go1.21.3 --default"
+
+# configure user-space transmission
+if [ ! -f "/etc/systemd/system/transmission.service.d/local.conf" ]; then
+	su $username -c "cd && mkdir -p ~/transmission/{done,incomplete}"
+	su $username -c 'cd && tmp=$(mktemp) && jq ".[\"download-dir\"] = \"${HOME}/transmission/done\"" $HOME/.config/transmission-daemon/settings.json | jq ".[\"incomplete-dir\"] = \"${HOME}/transmission/incomplete\"" | jq ".[\"watch-dir\"] = \"$(xdg-user-dir DOWNLOAD)\"" > $tmp && mv $tmp $HOME/.config/transmission-daemon/settings.json'
 fi
 fi
 
 
 # symlink shceduled maintenance tasks
 # symlink shceduled maintenance tasks
-ln -sf /usr/local/bin/system-updates /etc/cron.daily/system-updates
+#ln -sf /usr/local/bin/system-updates /etc/cron.daily/system-updates
 ln -sf /usr/local/bin/disk-maintenance /etc/cron.weekly/disk-maintenance
 ln -sf /usr/local/bin/disk-maintenance /etc/cron.weekly/disk-maintenance
 
 
 # symlink override vi to vim
 # symlink override vi to vim
@@ -260,6 +258,7 @@ systemctl enable dnsmasq
 systemctl enable cronie
 systemctl enable cronie
 systemctl enable ntpd
 systemctl enable ntpd
 systemctl enable sshd
 systemctl enable sshd
+systemctl enable connman
 
 
 # attempt to enable dhcp on active network devices on reboot
 # attempt to enable dhcp on active network devices on reboot
 export active_network_device=$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')
 export active_network_device=$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')
@@ -279,7 +278,7 @@ echo "linux vmlinuz-linux" >> /boot/loader/entries/arch.conf
 echo "initrd /initramfs-linux.img" >> /boot/loader/entries/arch.conf
 echo "initrd /initramfs-linux.img" >> /boot/loader/entries/arch.conf
 export boot_options="options root=PARTUUID=$(blkid -s PARTUUID -o value $(mount | grep ' / '|cut -d' ' -f 1)) rw quiet loglevel=3"
 export boot_options="options root=PARTUUID=$(blkid -s PARTUUID -o value $(mount | grep ' / '|cut -d' ' -f 1)) rw quiet loglevel=3"
 [ "$enable_hibernation" = "y" ] && [ -n "$resume_uuid" ] && boot_options="${boot_options} resume=UUID=${resume_uuid}"
 [ "$enable_hibernation" = "y" ] && [ -n "$resume_uuid" ] && boot_options="${boot_options} resume=UUID=${resume_uuid}"
-[[ $(lspci | grep -i " vga" | grep -ci " nvidia") -gt 0 && $(grep -c "nvidia" /boot/loader/entires/arch.conf) -eq 0 ]] && boot_options="${boot_options} nvidia-dkm.modeset=1"
+[[ $(lspci | grep -i " vga" | grep -ci " nvidia") -gt 0 && $(grep -c "nvidia" /boot/loader/entires/arch.conf) -eq 0 ]] && boot_options="${boot_options} nvidia-drm.modeset=1"
 echo "$boot_options" >> /boot/loader/entries/arch.conf
 echo "$boot_options" >> /boot/loader/entries/arch.conf
 
 
 # set boot loader entry as default
 # set boot loader entry as default

+ 9 - 0
install/etc/polkit-1/rules.d/90-corectrl.rules

@@ -0,0 +1,9 @@
+polkit.addRule(function(action, subject) {
+    if ((action.id == "org.corectrl.helper.init" ||
+         action.id == "org.corectrl.helperkiller.init") &&
+        subject.local == true &&
+        subject.active == true &&
+        subject.isInGroup("sudo")) {
+            return polkit.Result.YES;
+    }
+});

+ 0 - 58
install/etc/skel/.Xdefaults

@@ -1,58 +0,0 @@
-Xft.dpi:                    96
-Xft.antialias:              true
-Xft.rgba:                   rgb
-Xft.hinting:                true
-Xft.hintstyle:              hintfull
-Xft.autohint:               false
-Xft.lcdfilter:              lcddefault
-Xcursor.theme:              Chameleon-SkyBlue-Regular
-Xcursor.size:               14
-URxvt.depth:                32
-URxvt.geometry:             80x24
-URxvt*background:           [70]#001E27
-URxvt*scrollTtyOutput:      false
-URxvt*scrollWithBuffer:     true
-URxvt*scrollTtyKeypress:    true
-URxvt.fading:               0
-URxvt.loginShell:           true
-URxvt.internalBorder:       3
-URxvt.lineSpace:            0
-URxvt.scrollStyle:          rxvt
-URxvt.scrollBar:            false
-URxvt.cursorBlink:          true
-URxvt.cursorColor:          #657b83
-URxvt.cursorUnderline:      false
-URxvt.pointerBlank:         true
-URxvt*font:                 xft:ForMateKonaVe:pixelsize=14
-URxvt*letterSpace:          -1
-URxvt.perl-ext-common:      default,matcher,font,clipboard,selection-to-clipboard
-URxvt.clipboard.copycmd:    xsel -ib
-URxvt.clipboard.pastecmd:   xsel -ob
-URxvt.keysym.C-equal:       perl:font:increment
-URxvt.keysym.C-minus:       perl:font:decrement
-URxvt.matcher.button:       1
-URxvt.urlLauncher:          /usr/bin/xdg-open
-URxvt.inputMethod:          ibus
-URxvt.preeditType:          OverTheSpot
-*background:                #001E27
-*foreground:                #9CC2C3
-*fadeColor:                 #002832
-*cursorColor:               #F34F00
-*pointerColorBackground:    #003747
-*pointerColorForeground:    #9CC2C3
-*color0:                    #002831
-*color1:                    #D11C24
-*color2:                    #6CBE6C
-*color3:                    #A57706
-*color4:                    #2176C7
-*color5:                    #C61C6F
-*color6:                    #259286
-*color7:                    #EAE3CB
-*color8:                    #006488
-*color9:                    #F5163B
-*color10:                   #51EF84
-*color11:                   #B27E28
-*color12:                   #178EC8
-*color13:                   #E24D8E
-*color14:                   #00B39E
-*color15:                   #FCF4DC

+ 21 - 2
install/etc/skel/.bash_profile

@@ -2,14 +2,33 @@
 
 
 # add local bin to path
 # add local bin to path
 export PATH=/usr/local/bin:$PATH
 export PATH=/usr/local/bin:$PATH
+export LD_LIBRARY_PATH="/usr/lib:$LD_LIBRARY_PATH"
 
 
-# add Xresources symlink if not exists
-[ ! -f "$HOME/.Xresources" ] && ln -s "$HOME/.Xdefaults" "$HOME/.Xresources"
+# explicitly set and append to XDG_DATA_DIRS
+[ -z "$XDG_DATA_DIRS" ] && export XDG_DATA_DIRS="/usr/share:/usr/local/share"
+export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.local/share"
+
+# set language, editor, augment history behavior, enable dynamic resize
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US.UTF-8
+export EDITOR=vim
+export HISTFILE="$HOME/.bash_history"
+export HISTCONTROL=ignoreboth:erasedups
+shopt -s histappend
+shopt -s checkwinsize
+shopt -s direxpand
 
 
 # fcitx IME support
 # fcitx IME support
 export GTK_IM_MODULE=fcitx
 export GTK_IM_MODULE=fcitx
 export QT_IM_MODULE=fcitx
 export QT_IM_MODULE=fcitx
 export XMODIFIERS=@im=fcitx
 export XMODIFIERS=@im=fcitx
 
 
+# specify wayland for applications (primarily games)
+export MOZ_ENABLE_WAYLAND=1
+export SDL_VIDEODRIVER="wayland,x11"
+export XDG_CURRENT_DESKTOP=Unity
+export WINE_FULLSCREEN_FSR=1
+export RADV_PERFTEST=gpl
+
 # if bashrc exists and the terminal has stdin load it
 # if bashrc exists and the terminal has stdin load it
 test -t 0 && . "$HOME/.bashrc"
 test -t 0 && . "$HOME/.bashrc"

+ 5 - 14
install/etc/skel/.bashrc

@@ -1,21 +1,16 @@
 #!/bin/bash
 #!/bin/bash
 
 
-# set language, editor, augment history behavior, enable dynamic resize
-export LANG=en_US.UTF-8
-export LANGUAGE=en_US.UTF-8
-export EDITOR=vim
-export HISTFILE="$HOME/.bash_history"
-export HISTCONTROL=ignoreboth:erasedups
-shopt -s histappend
-shopt -s checkwinsize
-shopt -s direxpand
-
 # add aliases with optimized settings
 # add aliases with optimized settings
 alias ls='ls -vhFA --color=auto'
 alias ls='ls -vhFA --color=auto'
 alias grep='grep --color=auto'
 alias grep='grep --color=auto'
 alias ..='cd ..'
 alias ..='cd ..'
 alias ...='cd ../..'
 alias ...='cd ../..'
 alias sshfs='sshfs -o cache=yes,compression=yes,kernel_cache'
 alias sshfs='sshfs -o cache=yes,compression=yes,kernel_cache'
+alias jwine='LANG=ja_JP.UTF-8 wine'
+alias puz='for F in *.zip; do mkdir "${F%.*}" && unzip -d "${F%.*}" "${F}" && rm "${F}"; done'
+
+# alias for discord wayland, since it ignores configs
+alias discord='discord --enable-features=UseOzonePlatform --ozone-platform=wayland'
 
 
 # define pretty man pages colors
 # define pretty man pages colors
 man() {
 man() {
@@ -95,10 +90,6 @@ fi
 . /usr/share/bash-completion/bash_completion
 . /usr/share/bash-completion/bash_completion
 . /usr/share/doc/pkgfile/command-not-found.bash
 . /usr/share/doc/pkgfile/command-not-found.bash
 
 
-# explicitly set and append to XDG_DATA_DIRS
-[ -z "$XDG_DATA_DIRS" ] && export XDG_DATA_DIRS="/usr/share:/usr/local/share"
-export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.local/share"
-
 # use shared agent to load ssh-keys; expects systemd to manage agent
 # use shared agent to load ssh-keys; expects systemd to manage agent
 export SSH_AUTH_SOCK="$HOME/.ssh/socket"
 export SSH_AUTH_SOCK="$HOME/.ssh/socket"
 ssh-add -l &> /dev/null || ssh-add
 ssh-add -l &> /dev/null || ssh-add

+ 8 - 0
install/etc/skel/.config/alacritty/alacritty.yml

@@ -0,0 +1,8 @@
+env:
+  TERM: xterm-256color
+window:
+  opacity: 0.95
+shell:
+  program: /usr/bin/bash
+  args:
+    - --login

+ 3 - 0
install/etc/skel/.config/chromium-flags.conf

@@ -0,0 +1,3 @@
+--enable-features=UseOzonePlatform
+--ozone-platform=wayland
+

+ 0 - 26
install/etc/skel/.config/conky/conky.conf

@@ -1,26 +0,0 @@
-conky.config = {
-    update_interval = 2.0,
-    cpu_avg_samples = 5,
-    net_avg_samples = 5,
-    diskio_avg_samples = 5,
-    alignment = 'tm',
-    gap_y = 0,
-    gap_x = 0,
-    use_xft = true,
-    xftalpha = 0.8,
-    font = 'ForMateKonaVe:size=9',
-    uppercase = false,
-    override_utf8_locale = true,
-    default_color = '6CBE6C',
-    own_window = true,
-    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager,above',
-    own_window_transparent = false,
-    own_window_argb_visual = true,
-    own_window_argb_value = 80,
-    double_buffer = true,
-}
-
-conky.text = [[
-${exec ip addr show | grep -v "127.0.0." | grep -v "169.254." | grep -o 'inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+' | grep -o [0-9].*}    ${exec date +'%F %H:%M:%S'} (${uptime})    cpu (${cpu cpu0}%) ${cpubar cpu0 8,120}    ${mem}/${memmax} (${memperc}%) ${membar 5,120}    / (${fs_used_perc /}%) ${fs_bar 5,120 /}
-]]
-

+ 3 - 0
install/etc/skel/.config/electron-flags.conf

@@ -0,0 +1,3 @@
+--enable-features=UseOzonePlatform
+--ozone-platform=wayland
+

+ 2 - 2
install/etc/skel/.config/libfm/libfm.conf

@@ -1,4 +1,4 @@
-# Configuration file for the libfm version 1.3.1.
+# Configuration file for the libfm version 1.3.2.
 # Autogenerated file, don't edit, your changes will be overwritten.
 # Autogenerated file, don't edit, your changes will be overwritten.
 
 
 [config]
 [config]
@@ -20,7 +20,7 @@ auto_selection_delay=600
 drop_default_action=auto
 drop_default_action=auto
 defer_content_test=0
 defer_content_test=0
 quick_exec=1
 quick_exec=1
-terminal=urxvt %s
+terminal=alacritty %s
 archiver=xarchiver
 archiver=xarchiver
 thumbnail_local=0
 thumbnail_local=0
 thumbnail_max=32768
 thumbnail_max=32768

+ 2 - 2
install/etc/skel/.config/mimeapps.list

@@ -17,7 +17,7 @@ text/x-go=sublime_text.desktop;
 text/x-markdown=sublime_text.desktop;
 text/x-markdown=sublime_text.desktop;
 application/x-php=sublime_text.desktop;
 application/x-php=sublime_text.desktop;
 application/x-shellscript=sublime_text.desktop;
 application/x-shellscript=sublime_text.desktop;
-application/pdf=evince.desktop;
+application/pdf=org.gnome.Evince.desktop;
 video/x-msvideo=mpv.desktop;
 video/x-msvideo=mpv.desktop;
 video/x-flv=mpv.desktop;
 video/x-flv=mpv.desktop;
 video/quicktime=mpv.desktop;
 video/quicktime=mpv.desktop;
@@ -66,7 +66,7 @@ text/x-go=sublime_text.desktop;
 text/x-markdown=sublime_text.desktop;
 text/x-markdown=sublime_text.desktop;
 application/x-php=sublime_text.desktop;
 application/x-php=sublime_text.desktop;
 application/x-shellscript=sublime_text.desktop;
 application/x-shellscript=sublime_text.desktop;
-application/pdf=evince.desktop;
+application/pdf=org.gnome.Evince.desktop;
 video/x-msvideo=mpv.desktop;
 video/x-msvideo=mpv.desktop;
 video/x-flv=mpv.desktop;
 video/x-flv=mpv.desktop;
 video/quicktime=mpv.desktop;
 video/quicktime=mpv.desktop;

+ 8 - 2
install/etc/skel/.config/mpv/mpv.conf

@@ -2,6 +2,12 @@
 # video driver
 # video driver
 profile=gpu-hq
 profile=gpu-hq
 
 
+# hwdecoder
+hwdec=auto-copy
+
+# wayland gpu context
+gpu-context=waylandvk
+
 # default scale and image rendering
 # default scale and image rendering
 scale=ewa_lanczossharp
 scale=ewa_lanczossharp
 cscale=ewa_lanczossoft
 cscale=ewa_lanczossoft
@@ -21,8 +27,8 @@ osc=yes
 # mpv --ytdl-raw-options="username=username,password=password" "url"
 # mpv --ytdl-raw-options="username=username,password=password" "url"
 
 
 # extensions
 # extensions
-[extension.webm]
-loop-file=inf
+#[extension.webm]
+#loop-file=inf
 
 
 [extension.gif]
 [extension.gif]
 loop-file=inf
 loop-file=inf

+ 0 - 7
install/etc/skel/.config/openbox/autostart

@@ -1,7 +0,0 @@
-#!/bin/sh
-(xset r rate 250 25; xset b off; xset m 7 5)
-(xset s 0 0; xset s noexpose; xset s noblank; xset s off; xset -dpms)
-xrdb -merge "$HOME/.Xresources"
-hsetroot -solid "#001E27"
-(update-desktop-database) &
-(xdg-user-dirs-update) &

+ 0 - 18
install/etc/skel/.config/openbox/menu.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
-	<menu id="root-menu" label="Openbox 3">
-		<item label="web"><action name="Execute"><execute>firefox</execute></action></item>
-		<item label="editor"><action name="Execute"><execute>subl</execute></action></item>
-		<item label="cli"><action name="Execute"><execute>urxvt</execute></action></item>
-		<item label="files"><action name="Execute"><execute>pcmanfm</execute></action></item>
-		<separator />
-		<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />
-		<separator />
-		<menu id="client-list-menu" />
-		<separator />
-		<item label="reload"><action name="Reconfigure" /></item>
-		<item label="logout"><action name="Exit"><prompt>no</prompt></action></item>
-		<item label='reboot'><action name='Execute'><command>systemctl reboot -i</command></action></item>
-		<item label='shutdown'><action name='Execute'><command>systemctl poweroff -i</command></action></item>
-	</menu>
-</openbox_menu>

+ 0 - 107
install/etc/skel/.config/openbox/rc.xml

@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
-	<resistance><strength>15</strength><screen_edge_strength>40</screen_edge_strength></resistance>
-	<focus><focusNew>yes</focusNew><followMouse>no</followMouse></focus>
-	<placement><policy>Smart</policy><center>yes</center><monitor>Active</monitor><primaryMonitor>Active</primaryMonitor></placement>
-	<desktops><number>3</number><firstdesk>1</firstdesk><popupTime>1000</popupTime></desktops>
-	<resize><drawContents>yes</drawContents><popupShow>Nonpixel</popupShow><popupPosition>Center</popupPosition></resize>
-	<menu><file>menu.xml</file><hideDelay>200</hideDelay><middle>no</middle><submenuShowDelay>100</submenuShowDelay><submenuHideDelay>400</submenuHideDelay><applicationIcons>yes</applicationIcons><manageDesktops>no</manageDesktops></menu>
-	<margins><top>0</top><bottom>0</bottom><left>0</left><right>0</right></margins>
-	<dock><position>TopLeft</position><floatingX>0</floatingX><floatingY>0</floatingY><noStrut>no</noStrut><stacking>Above</stacking><direction>Vertical</direction><autoHide>no</autoHide><hideDelay>300</hideDelay><showDelay>300</showDelay><moveButton>Middle</moveButton></dock>
-	<theme>
-		<name>Onyx-Citrus</name>
-		<titleLayout>NLIMC</titleLayout>
-		<keepBorder>no</keepBorder>
-		<animateIconify>yes</animateIconify>
-		<font place="ActiveWindow"><name>ForMateKonaVe</name><size>8</size><weight>bold</weight><slant>normal</slant></font>
-		<font place="InactiveWindow"><name>ForMateKonaVe</name><size>8</size><weight>bold</weight><slant>normal</slant></font>
-		<font place="MenuHeader"><name>ForMateKonaVe</name><size>9</size><weight>normal</weight><slant>normal</slant></font>
-		<font place="MenuItem"><name>ForMateKonaVe</name><size>9</size><weight>normal</weight><slant>normal</slant></font>
-		<font place="ActiveOnScreenDisplay"><name>ForMateKonaVe</name><size>9</size><weight>bold</weight><slant>normal</slant></font>
-		<font place="InactiveOnScreenDisplay"><name>ForMateKonaVe</name><size>9</size><weight>bold</weight><slant>normal</slant></font>
-	</theme>
-	<keyboard>
-		<keybind key="A-F4"><action name="Close"/></keybind>
-		<keybind key="W-Down"><action name="Iconify"/></keybind>
-		<keybind key="W-Tab"><action name="ShowMenu"><menu>root-menu</menu></action></keybind>
-		<keybind key="A-space"><action name="ShowMenu"><menu>client-menu</menu></action></keybind>
-		<keybind key="A-Escape"><action name="Lower"/><action name="FocusToBottom"/><action name="Unfocus"/></keybind>
-		<keybind key="A-Tab"><action name="NextWindow"><finalactions><action name="Focus"/><action name="Raise"/><action name="Unshade"/></finalactions></action></keybind>
-		<keybind key="A-S-Tab"><action name="PreviousWindow"><finalactions><action name="Focus"/><action name="Raise"/><action name="Unshade"/></finalactions></action></keybind>
-		<keybind key="W-Up"><action name="ToggleMaximizeFull"/></keybind>
-		<keybind key="W-C-Up"><action name="ToggleMaximizeFull"/></keybind>
-		<keybind key="W-Right"><action name="MoveResizeTo"><monitor>next</monitor></action></keybind>
-		<keybind key="W-Left"><action name="MoveResizeTo"><monitor>prev</monitor></action></keybind>
-		<keybind key="W-C-Right"><action name="Unmaximize"/><action name="MoveResizeTo"><width>50%</width><height>100%</height><x>-0</x><y>0</y><monitor>current</monitor></action></keybind>
-		<keybind key="W-C-Left"><action name="Unmaximize"/><action name="MoveResizeTo"><width>50%</width><height>100%</height><x>0</x><y>0</y><monitor>current</monitor></action></keybind>
-		<keybind key="C-A-Right"><action name="GoToDesktop"><to>right</to><wrap>no</wrap></action></keybind>
-		<keybind key="C-A-Left"><action name="GoToDesktop"><to>left</to><wrap>no</wrap></action></keybind>
-		<keybind key="S-A-Right"><action name="SendToDesktop"><to>right</to><wrap>no</wrap></action></keybind>
-		<keybind key="S-A-Left"><action name="SendToDesktop"><to>left</to><wrap>no</wrap></action></keybind>
-		<keybind key="XF86MonBrightnessUp"><action name="Execute"><command>xbacklight -inc 5</command></action></keybind>
-		<keybind key="XF86MonBrightnessDown"><action name="Execute"><command>xbacklight -dec 5</command></action></keybind>
-		<keybind key="XF86AudioRaiseVolume"><action name="Execute"><command>pash increase</command></action></keybind>
-		<keybind key="XF86AudioLowerVolume"><action name="Execute"><command>pash decrease</command></action></keybind>
-		<keybind key="XF86AudioMute"><action name="Execute"><command>pash mute</command></action></keybind>
-        <keybind key="XF86AudioPlay"><action name="Execute"><command>mpv-control p</command></action></keybind>
-        <keybind key="XF86AudioPrev"><action name="Execute"><command>mpv-control less</command></action></keybind>
-        <keybind key="XF86AudioNext"><action name="Execute"><command>mpv-control greater</command></action></keybind>
-		<keybind key="W-S-3"><action name="Execute"><command>screenshot</command></action></keybind>
-		<keybind key="W-S-4"><action name="Execute"><command>screenshot-selection</command></action></keybind>
-		<keybind key="W-grave"><action name="Execute"><execute>urxvtq</execute></action></keybind>
-		<keybind key="W-space"><action name="Execute"><command>gmrun</command></action></keybind>
-		<keybind key="A-F2"><action name="Execute"><command>gmrun</command></action></keybind>
-		<keybind key="W-w"><action name="Execute"><command>firefox</command></action></keybind>
-		<keybind key="W-t"><action name="Execute"><command>urxvt</command></action></keybind>
-		<keybind key="W-e"><action name="Execute"><command>subl</command></action></keybind>
-		<keybind key="W-b"><action name="Execute"><command>pcmanfm</command></action></keybind>
-		<keybind key="W-x"><action name="Exit"><prompt>no</prompt></action></keybind>
-	</keyboard>
-	<mouse>
-		<dragThreshold>5</dragThreshold>
-		<doubleClickTime>200</doubleClickTime>
-		<screenEdgeWarpTime>400</screenEdgeWarpTime>
-		<context name="Root Desktop">
-			<mousebind button="Right" action="Press"><action name="ShowMenu"><menu>root-menu</menu></action></mousebind>
-		</context>
-		<context name="Client">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
-			<mousebind button="Middle" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
-			<mousebind button="Right" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
-		</context>
-		<context name="Titlebar">
-			<mousebind button="Left" action="Drag"><action name="Move"/></mousebind>
-			<mousebind button="Left" action="DoubleClick"><action name="ToggleMaximize"/></mousebind>
-			<mousebind button="Right" action="Press"><action name="Focus"/><action name="Raise"/><action name="ShowMenu"><menu>client-menu</menu></action></mousebind>
-		</context>
-		<context name="Top Left Right Bottom TRCorner BRCorner TLCorner BLCorner">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/><action name="Unshade"/></mousebind>
-			<mousebind button="Left" action="Drag"><action name="Resize"/></mousebind>
-		</context>
-		<context name="Icon">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/><action name="ShowMenu"><menu>client-menu</menu></action></mousebind>
-			<mousebind button="Right" action="Press"><action name="Focus"/><action name="Raise"/><action name="ShowMenu"><menu>client-menu</menu></action></mousebind>
-		</context>
-		<context name="Iconify">
-			<mousebind button="Left" action="Click"><action name="Iconify"/></mousebind>
-		</context>
-		<context name="Maximize">
-			<mousebind button="Left" action="Click"><action name="ToggleMaximize"/></mousebind>
-		</context>
-		<context name="Close">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
-			<mousebind button="Left" action="Click"><action name="Close"/></mousebind>
-		</context>
-		<context name="AllDesktops">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/><action name="Unshade"/></mousebind>
-			<mousebind button="Left" action="Click"><action name="ToggleOmnipresent"/></mousebind>
-		</context>
-		<context name="Shade">
-			<mousebind button="Left" action="Press"><action name="Focus"/><action name="Raise"/></mousebind>
-			<mousebind button="Left" action="Click"><action name="ToggleShade"/></mousebind>
-		</context>
-	</mouse>
-	<applications>
-		<application name="urxvtq"><decor>no</decor><position force="yes"><x>center</x><y>0</y></position><desktop>all</desktop><layer>above</layer><skip_pager>yes</skip_pager><skip_taskbar>yes</skip_taskbar><maximized>Horizontal</maximized></application>
-	</applications>
-</openbox_config>

+ 0 - 63
install/etc/skel/.config/picom/picom.conf

@@ -1,63 +0,0 @@
-
-# lean renderer
-backend = "xrender";
-
-# vsync optimizations
-unredir-if-possible = true;
-
-# shadow optimizations
-shadow = true;
-dock = { shadow = false; };
-dnd = { shadow = false; };
-shadow-ignore-shaped = false;
-shadow-radius = 4;
-shadow-offset-x = -5;
-shadow-offset-y = -3;
-shadow-opacity = 0.5;
-shadow-exclude-reg = "x28+0-0"; # block shadows from overlapping the taskbar at the bottom of the screen
-shadow-exclude = [
-	"! name~=''",
-	"name = 'Notification'",
-	"name *= 'picom'",
-	"name *= 'mpv'",
-	"class_g = 'conky'"
-];
-
-# menu optimizations
-popup_menu = { opacity = 1; };
-dropdown_menu = { opacity = 1; };
-inactive-opacity = 1;
-active-opacity = 1;
-frame-opacity = 1;
-inactive-opacity-override = false;
-
-# avoid blur
-blur-background-fixed = false;
-blur-background-exclude = [
-	"window_type = 'dock'",
-	"window_type = 'desktop'"
-];
-
-# fading disabled for responsive desktop
-fading = false;
-
-# window manager optimizations
-mark-wmwin-focused = true;
-mark-overdir-focused = true;
-use-ewmh-active-win = true;
-
-# window detection optimizations
-detect-rounded-corners = true;
-detect-transient = true;
-detect-client-opacity = true;
-detect-client-leader = true;
-
-# other behaviors
-wintypes = {
-    tooltip = {
-        fade = true;
-        shadow = false;
-        focus = true;
-    }
-};
-

+ 0 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/Default (Linux).sublime-keymap → install/etc/skel/.config/sublime-text/Packages/User/Default (Linux).sublime-keymap


+ 0 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/GoSublime.sublime-settings → install/etc/skel/.config/sublime-text/Packages/User/GoSublime.sublime-settings


+ 0 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/Markdown.sublime-settings → install/etc/skel/.config/sublime-text/Packages/User/Markdown.sublime-settings


+ 0 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/MarkdownPreview.sublime-settings → install/etc/skel/.config/sublime-text/Packages/User/MarkdownPreview.sublime-settings


+ 1 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/Preferences.sublime-settings → install/etc/skel/.config/sublime-text/Packages/User/Preferences.sublime-settings

@@ -1,4 +1,5 @@
 {
 {
+	"show_git_status": true,
 	"auto_complete_commit_on_tab": true,
 	"auto_complete_commit_on_tab": true,
 	"caret_style": "phase",
 	"caret_style": "phase",
 	"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
 	"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",

+ 0 - 0
install/etc/skel/.config/sublime-text-3/Packages/User/default_file_type.sublime-settings → install/etc/skel/.config/sublime-text/Packages/User/default_file_type.sublime-settings


+ 171 - 0
install/etc/skel/.config/sway/config

@@ -0,0 +1,171 @@
+
+# @reference: man 5 sway
+# super for modifier
+set $mod Mod4
+
+# define service variables
+set $launcher wofi --show=run --lines=5 --prompt=""
+set $applauncher wofi --show=drun --lines=5 --prompt=""
+set $term alacritty
+set $browser firefox
+set $editor subl
+set $files pcmanfm
+
+# @note: we use the default wallpaper as a backup
+output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
+
+# @note: cursor theme and size set env vars; may not apply to all applications
+seat seat0 xcursor_theme Chameleon-SkyBlue-Large
+
+# window manager commands
+bindsym $mod+Shift+c reload
+bindsym $mod+Shift+q kill
+bindsym $mod+x exec "systemctl --user import-environment; systemctl --user stop sway-session.target; swaymsg exit"
+bindsym $mod+p focus parent
+
+# split workspace horizontal and vertical
+bindsym $mod+v splitv
+bindsym $mod+h splith
+
+# change workspace layout
+bindsym $mod+Shift+e layout toggle split
+bindsym $mod+Shift+s layout stacking
+bindsym $mod+Shift+w layout tabbed
+
+# fullscreen toggle
+bindsym $mod+f fullscreen
+
+# floating window controls:
+#   super+l to toggle floating mode
+#   super+_shift+l to switch focus to floating window(s)
+#   hold super then use left click to drag and right click to resize
+bindsym $mod+l floating toggle
+bindsym $mod+Shift+l focus mode_toggle
+floating_modifier $mod normal
+
+# Move your focus around
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# Move the focused window with the same, but add Shift
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+mode "resize" {
+    bindsym Left resize shrink width 10px
+    bindsym Down resize grow height 10px
+    bindsym Up resize shrink height 10px
+    bindsym Right resize grow width 10px
+    bindsym Return mode "default"
+    bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+# navigate workspaces
+bindsym $mod+1 workspace number 1
+bindsym $mod+2 workspace number 2
+bindsym $mod+3 workspace number 3
+bindsym $mod+4 workspace number 4
+bindsym $mod+5 workspace number 5
+bindsym $mod+6 workspace number 6
+bindsym $mod+7 workspace number 7
+bindsym $mod+8 workspace number 8
+bindsym $mod+9 workspace number 9
+bindsym $mod+0 workspace number 10
+bindsym Control+Alt+Right workspace next
+bindsym Control+Alt+Left workspace prev
+
+# send window to workspace
+bindsym $mod+Shift+1 move container to workspace number 1, workspace number 1
+bindsym $mod+Shift+2 move container to workspace number 2, workspace number 2
+bindsym $mod+Shift+3 move container to workspace number 3, workspace number 3
+bindsym $mod+Shift+4 move container to workspace number 4, workspace number 4
+bindsym $mod+Shift+5 move container to workspace number 5, workspace number 5
+bindsym $mod+Shift+6 move container to workspace number 6, workspace number 6
+bindsym $mod+Shift+7 move container to workspace number 7, workspace number 7
+bindsym $mod+Shift+8 move container to workspace number 8, workspace number 8
+bindsym $mod+Shift+9 move container to workspace number 9, workspace number 9
+bindsym $mod+Shift+0 move container to workspace number 10, workspace number 10
+bindsym $mod+Control+Right move container to workspace next, workspace next
+bindsym $mod+Control+Left move container to workspace prev, workspace prev
+
+# services
+bindsym $mod+Space exec $launcher
+bindsym $mod+Shift+F2 exec $applauncher
+bindsym $mod+t exec $term
+bindsym $mod+b exec $files
+bindsym $mod+e exec $editor
+bindsym $mod+w exec $browser
+bindsym $mod+Ctrl+3 exec screenshot
+bindsym Print exec screenshot
+bindsym $mod+Ctrl+4 exec screenshot-selection
+bindsym Shift+Print exec screenshot-selection
+
+# multimedia keys
+bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
+bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
+bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
+bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
+bindsym XF86AudioPlay exec playerctl -p mpv play-pause
+bindsym XF86AudioNext exec playerctl -p mpv next
+bindsym XF86AudioPrev exec playerctl -p mpv previous
+bindsym XF86MonBrightnessUp exec brightnessctl set +5%
+bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
+bindsym Shift+XF86MonBrightnessUp exec brightnessctl s 100%
+bindsym Shift+XF86MonBrightnessDown exec brightnessctl s 0%
+
+# global push-to-talk & toggle
+bindsym $mod+m exec pactl set-source-mute @DEFAULT_SOURCE@ 0 # mute mic
+bindsym --release $mod+m exec pactl set-source-mute @DEFAULT_SOURCE@ 1 # unmute mic
+bindsym $mod+Shift+m exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
+
+# classify sane defaults for window management
+for_window [window_role="pop-up"] floating enable
+for_window [window_role="bubble"] floating enable
+for_window [window_role="task_dialog"] floating enable
+for_window [window_role="Preferences"] floating enable
+for_window [window_type="dialog"] floating enable
+for_window [window_type="menu"] floating enable
+for_window [window_role="About"] floating enable
+for_window [class="xdg-desktop-portal-kde"] floating enable
+for_window [class="Wine"] floating enable
+for_window [app_id="lutris"] floating enable
+
+# @reference: man 5 sway-bar
+# @todo: figure out how to configure and optimize waybar
+bar {
+    swaybar_command waybar
+}
+
+# load additional configuration
+include /etc/sway/config.d/*
+
+# load user configuration from local sub-directory
+#
+# @reference: man 5 sway-output
+# @reference: swaymsg -t get_outputs
+#
+# example with custom resolution and dual monitors:
+#
+#   output HDMI-A-1 mode --custom 2560x1440@60Hz position 0,0 adaptive_sync on
+#   output DP-1 mode 3440x1440@144Hz pos 3440 0 adaptive_sync on
+#
+# @reference: man 5 sway-input
+# @reference: swaymsg -t get_inputs
+#
+# Example configuration:
+#
+#   input "2:14:SynPS/2_Synaptics_TouchPad" {
+#       dwt enabled
+#       tap enabled
+#       natural_scroll enabled
+#       middle_emulation enabled
+#   }
+include ~/.config/sway/config.d/*
+
+# start sway session in systemd to intialize services
+exec_always "systemctl --user import-environment; systemctl --user start sway-session.target"

+ 13 - 0
install/etc/skel/.config/sway/config.d/keyboard-defaults

@@ -0,0 +1,13 @@
+
+# @note: potential firefox crash bug
+input * xkb_numlock enable
+
+input * repeat_delay 250
+input * repeat_rate 25
+
+input "type:keyboard" {
+	xkb_options ctrl:nocaps
+
+    repeat_delay 250
+    repeat_rate 25
+}

+ 0 - 12
install/etc/skel/.config/systemd/user/conky.service

@@ -1,12 +0,0 @@
-[Unit]
-Description=Conky Status Window
-PartOf=graphical-session.target
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/conky
-Restart=on-failure
-RestartSec=3
-
-[Install]
-WantedBy=xsession.target

+ 12 - 0
install/etc/skel/.config/systemd/user/corectrl.service

@@ -0,0 +1,12 @@
+[Unit]
+Description=CoreControl Advanced CPU and GPU Tuning
+PartOf=graphical-session.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/corectrl
+Restart=on-failure
+RestartSec=3
+
+[Install]
+WantedBy=sway-session.target

+ 1 - 1
install/etc/skel/.config/systemd/user/fcitx5.service

@@ -10,4 +10,4 @@ Restart=on-failure
 RestartSec=3
 RestartSec=3
 
 
 [Install]
 [Install]
-WantedBy=xsession.target
+WantedBy=sway-session.target

+ 1 - 1
install/etc/skel/.config/systemd/user/gsettings.service

@@ -7,4 +7,4 @@ Type=oneshot
 ExecStart=/usr/local/bin/load-gsettings
 ExecStart=/usr/local/bin/load-gsettings
 
 
 [Install]
 [Install]
-WantedBy=xsession.target
+WantedBy=sway-session.target

+ 1 - 1
install/etc/skel/.config/systemd/user/lxpolkit.service

@@ -9,4 +9,4 @@ Restart=on-failure
 RestartSec=3
 RestartSec=3
 
 
 [Install]
 [Install]
-WantedBy=xsession.target
+WantedBy=sway-session.target

+ 0 - 10
install/etc/skel/.config/systemd/user/openbox-autostart.service

@@ -1,10 +0,0 @@
-[Unit]
-Description=Openbox autostart script
-PartOf=graphical-session.target
-
-[Service]
-Type=oneshot
-ExecStart=%h/.config/openbox/autostart
-
-[Install]
-WantedBy=xsession.target

+ 0 - 12
install/etc/skel/.config/systemd/user/pasystray.service

@@ -1,12 +0,0 @@
-[Unit]
-Description=Pulse Audio System Tray Menu
-PartOf=graphical-session.target
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/pasystray
-Restart=on-failure
-RestartSec=3
-
-[Install]
-WantedBy=xsession.target

+ 0 - 12
install/etc/skel/.config/systemd/user/picom.service

@@ -1,12 +0,0 @@
-[Unit]
-Description=Picom window composite manager
-PartOf=graphical-session.target
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/picom
-Restart=on-failure
-RestartSec=3
-
-[Install]
-WantedBy=xsession.target

+ 1 - 1
install/etc/skel/.config/systemd/user/xsession.target → install/etc/skel/.config/systemd/user/sway-session.target

@@ -1,3 +1,3 @@
 [Unit]
 [Unit]
-Description=Xsession started
+Description=sway session initialization
 BindsTo=graphical-session.target
 BindsTo=graphical-session.target

+ 1 - 0
install/etc/skel/.config/systemd/user/sway-session.target.wants/corectrl.service

@@ -0,0 +1 @@
+../corectrl.service

+ 0 - 0
install/etc/skel/.config/systemd/user/xsession.target.wants/fcitx5.service → install/etc/skel/.config/systemd/user/sway-session.target.wants/fcitx5.service


+ 1 - 0
install/etc/skel/.config/systemd/user/sway-session.target.wants/gsettings.service

@@ -0,0 +1 @@
+../gsettings.service

+ 0 - 0
install/etc/skel/.config/systemd/user/xsession.target.wants/lxpolkit.service → install/etc/skel/.config/systemd/user/sway-session.target.wants/lxpolkit.service


+ 1 - 0
install/etc/skel/.config/systemd/user/sway-session.target.wants/update-desktop-database.service

@@ -0,0 +1 @@
+../update-desktop-database.service

+ 0 - 0
install/etc/skel/.config/systemd/user/xsession.target.wants/wallpaper.service → install/etc/skel/.config/systemd/user/sway-session.target.wants/wallpaper.service


+ 1 - 0
install/etc/skel/.config/systemd/user/sway-session.target.wants/xdg-user-dirs-update.service

@@ -0,0 +1 @@
+../xdg-user-dirs-update.service

+ 0 - 12
install/etc/skel/.config/systemd/user/tint2.service

@@ -1,12 +0,0 @@
-[Unit]
-Description=Tint2 Menu
-PartOf=graphical-session.target
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/tint2
-Restart=on-failure
-RestartSec=3
-
-[Install]
-WantedBy=xsession.target

+ 10 - 0
install/etc/skel/.config/systemd/user/update-desktop-database.service

@@ -0,0 +1,10 @@
+[Unit]
+Description=update desktop database
+PartOf=graphical-session.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/update-desktop-database
+
+[Install]
+WantedBy=sway-session.target

+ 1 - 1
install/etc/skel/.config/systemd/user/wallpaper.service

@@ -9,4 +9,4 @@ Restart=on-failure
 RestartSec=3
 RestartSec=3
 
 
 [Install]
 [Install]
-WantedBy=xsession.target
+WantedBy=sway-session.target

+ 10 - 0
install/etc/skel/.config/systemd/user/xdg-user-dirs-update.service

@@ -0,0 +1,10 @@
+[Unit]
+Description=update xdg user directories
+PartOf=graphical-session.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/xdg-user-dirs-update
+
+[Install]
+WantedBy=sway-session.target

+ 0 - 1
install/etc/skel/.config/systemd/user/xsession.target.wants/conky.service

@@ -1 +0,0 @@
-../conky.service

+ 0 - 1
install/etc/skel/.config/systemd/user/xsession.target.wants/openbox-autostart.service

@@ -1 +0,0 @@
-../openbox-autostart.service

+ 0 - 1
install/etc/skel/.config/systemd/user/xsession.target.wants/pasystray.service

@@ -1 +0,0 @@
-../pasystray.service

+ 0 - 1
install/etc/skel/.config/systemd/user/xsession.target.wants/picom.service

@@ -1 +0,0 @@
-../picom.service

+ 0 - 1
install/etc/skel/.config/systemd/user/xsession.target.wants/tint2.service

@@ -1 +0,0 @@
-../tint2.service

+ 0 - 106
install/etc/skel/.config/tint2/tint2rc

@@ -1,106 +0,0 @@
-
-# background & border
-
-rounded = 11
-border_width = 1
-background_color = #000000 80
-border_color = #ffffff 20
-
-rounded = 6
-border_width = 0
-background_color = #ffffff 20
-border_color = #ffffff 20
-
-
-# panel
-
-panel_items = LTSC
-panel_monitor = all
-panel_position = bottom center
-panel_size = 85% 28
-panel_margin = 4 2
-panel_padding = 0 0 2
-font_shadow = 0
-panel_background_id = 0
-
-
-# launchbar
-
-launcher_padding = 4 2 3
-launcher_background_id = 1
-launcher_icon_theme = gnome
-launcher_icon_size = 16
-launcher_item_app = /usr/share/applications/urxvt.desktop
-launcher_item_app = /usr/share/applications/sublime_text.desktop
-launcher_item_app = /usr/share/applications/firefox.desktop
-launcher_item_app = /usr/share/applications/pcmanfm.desktop
-
-
-# taskbar
-
-taskbar_mode = single_desktop
-taskbar_padding = 4 4 2
-taskbar_background_id = 1
-
-
-# tasks
-
-task_icon = 1
-task_text = 1
-task_maximum_size = 100 26
-task_centered = 1
-task_padding = 1 1
-task_font = ForMateKonaVe 7
-task_font_color = #ffffff 70
-task_active_font_color = #ffffff 85
-task_background_id = 3
-task_active_background_id = 2
-
-
-# mouse actions on tasks
-
-mouse_middle = maximize_restore
-mouse_right = none
-mouse_scroll_up = toggle
-mouse_scroll_down = iconify
-
-
-# systray
-
-systray = 1
-systray_padding = 4 2 3
-systray_background_id = 1
-systray_icon_size = 16
-systray_monitor = primary
-
-
-# battery
-
-battery = 0
-battery_low_status = 7
-battery_low_cmd = zenity --warning --title="Battery" --text="Low power, please plug into the nearest outlet."
-bat1_font = ForMateKonaVe bold 8
-bat2_font = ForMateKonaVe 7
-battery_font_color = #ffffff 70
-battery_padding = 4 16
-battery_background_id = 1
-
-
-# clock
-
-time1_format = %T
-time1_font = ForMateKonaVe bold 8
-time2_format = %a. %Y/%m/%d
-time2_font = ForMateKonaVe 6
-clock_font_color = #ffffff 76
-clock_padding = 4 4
-clock_background_id = 1
-
-
-# autohide options
-
-autohide = 0
-autohide_show_timeout = 0.3
-autohide_hide_timeout = 2
-autohide_height = 2
-strut_policy = follow_size

+ 58 - 0
install/etc/skel/.config/waybar/config

@@ -0,0 +1,58 @@
+{
+    "height": 30,
+    "spacing": 4,
+    "modules-left": ["sway/workspaces", "sway/mode"],
+    "sway/mode": {
+        "format": "<span style=\"italic\">{}</span>"
+    },
+
+    "modules-center": ["sway/window"],
+
+    "modules-right": ["tray", "cpu", "memory", "backlight", "battery", "pulseaudio", "network", "clock"],
+    "tray": {
+        "spacing": 10
+    },
+    "cpu": {
+        "format": "{usage}% 💻",
+        "tooltip": false
+    },
+    "memory": {
+        "format": "{}% "
+    },
+
+    "backlight": {
+        "format": "{percent}% {icon}",
+        "format-icons": ["", ""]
+    },
+    "battery": {
+        "states": {
+            "warning": 30,
+            "critical": 15
+        },
+        "format": "{icon}: {time} ({capacity}%)",
+        "format-charging": "{icon}: {time} ({capacity}% charging)",
+        "format-plugged": "{icon}: {time} ({capacity}% plugged)",
+        "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
+    },
+
+    "pulseaudio": {
+        "format": "{volume}% {icon} {format_source}",
+        "format-bluetooth": "{volume}% {icon} {format_source}",
+        "format-source": "{volume}% ",
+        "format-source-muted": "",
+        "format-icons": {
+            "default": ["", "", ""]
+        },
+        "on-click": "pavucontrol"
+    },
+    "network": {
+        "format": "{ipaddr}/{cidr}",
+        "tooltip-format": "{ifname} via {gwaddr}",
+        "format-disconnected": "Disconnected ⚠",
+        "on-click": "cmst"
+    },
+    "clock": {
+        "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
+        "format": "{:%Y-%m-%d %H:%M}"
+    },
+}

+ 254 - 0
install/etc/skel/.config/waybar/style.css

@@ -0,0 +1,254 @@
+* {
+    /* `otf-font-awesome` is required to be installed for icons */
+    font-family: Roboto, Helvetica, Arial, sans-serif;
+    font-size: 13px;
+}
+
+window#waybar {
+    background-color: rgba(43, 48, 59, 0.5);
+    border-bottom: 3px solid rgba(100, 114, 125, 0.5);
+    color: #ffffff;
+    transition-property: background-color;
+    transition-duration: .5s;
+}
+
+window#waybar.hidden {
+    opacity: 0.2;
+}
+
+/*
+window#waybar.empty {
+    background-color: transparent;
+}
+window#waybar.solo {
+    background-color: #FFFFFF;
+}
+*/
+
+window#waybar.termite {
+    background-color: #3F3F3F;
+}
+
+window#waybar.chromium {
+    background-color: #000000;
+    border: none;
+}
+
+#workspaces button {
+    padding: 0 5px;
+    background-color: transparent;
+    color: #ffffff;
+    /* Use box-shadow instead of border so the text isn't offset */
+    box-shadow: inset 0 -3px transparent;
+    /* Avoid rounded borders under each workspace name */
+    border: none;
+    border-radius: 0;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+#workspaces button:hover {
+    background: rgba(0, 0, 0, 0.2);
+    box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button.focused {
+    background-color: #64727D;
+    box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button.urgent {
+    background-color: #eb4d4b;
+}
+
+#mode {
+    background-color: #64727D;
+    border-bottom: 3px solid #ffffff;
+}
+
+#clock,
+#battery,
+#cpu,
+#memory,
+#disk,
+#temperature,
+#backlight,
+#network,
+#pulseaudio,
+#custom-media,
+#tray,
+#mode,
+#idle_inhibitor,
+#mpd {
+    padding: 0 10px;
+    color: #ffffff;
+}
+
+#window,
+#workspaces {
+    margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+    margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+    margin-right: 0;
+}
+
+#clock {
+    background-color: #64727D;
+}
+
+#battery {
+    background-color: #ffffff;
+    color: #000000;
+}
+
+#battery.charging, #battery.plugged {
+    color: #ffffff;
+    background-color: #26A65B;
+}
+
+@keyframes blink {
+    to {
+        background-color: #ffffff;
+        color: #000000;
+    }
+}
+
+#battery.critical:not(.charging) {
+    background-color: #f53c3c;
+    color: #ffffff;
+    animation-name: blink;
+    animation-duration: 0.5s;
+    animation-timing-function: linear;
+    animation-iteration-count: infinite;
+    animation-direction: alternate;
+}
+
+label:focus {
+    background-color: #000000;
+}
+
+#cpu {
+    background-color: #2ecc71;
+    color: #000000;
+}
+
+#memory {
+    background-color: #9b59b6;
+}
+
+#disk {
+    background-color: #964B00;
+}
+
+#backlight {
+    background-color: #90b1b1;
+}
+
+#network {
+    background-color: #2980b9;
+}
+
+#network.disconnected {
+    background-color: #f53c3c;
+}
+
+#pulseaudio {
+    background-color: #f1c40f;
+    color: #000000;
+}
+
+#pulseaudio.muted {
+    background-color: #90b1b1;
+    color: #2a5c45;
+}
+
+#custom-media {
+    background-color: #66cc99;
+    color: #2a5c45;
+    min-width: 100px;
+}
+
+#custom-media.custom-spotify {
+    background-color: #66cc99;
+}
+
+#custom-media.custom-vlc {
+    background-color: #ffa000;
+}
+
+#temperature {
+    background-color: #f0932b;
+}
+
+#temperature.critical {
+    background-color: #eb4d4b;
+}
+
+#tray {
+    background-color: #2980b9;
+}
+
+#tray > .passive {
+    -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+    -gtk-icon-effect: highlight;
+    background-color: #eb4d4b;
+}
+
+#idle_inhibitor {
+    background-color: #2d3436;
+}
+
+#idle_inhibitor.activated {
+    background-color: #ecf0f1;
+    color: #2d3436;
+}
+
+#mpd {
+    background-color: #66cc99;
+    color: #2a5c45;
+}
+
+#mpd.disconnected {
+    background-color: #f53c3c;
+}
+
+#mpd.stopped {
+    background-color: #90b1b1;
+}
+
+#mpd.paused {
+    background-color: #51a37a;
+}
+
+#language {
+    background: #00b093;
+    color: #740864;
+    padding: 0 5px;
+    margin: 0 5px;
+    min-width: 16px;
+}
+
+#keyboard-state {
+    background: #97e1ad;
+    color: #000000;
+    padding: 0 0px;
+    margin: 0 5px;
+    min-width: 16px;
+}
+
+#keyboard-state > label {
+    padding: 0 5px;
+}
+
+#keyboard-state > label.locked {
+    background: rgba(0, 0, 0, 0.2);
+}

+ 39 - 3
install/etc/skel/.config/yt-dlp/config

@@ -1,4 +1,40 @@
-# set sane defaults to ensure video and audio work always
+# set sane defaults to ensure video and audio are saved as intended
+#
+# Unfortunately yt-dlp lacks sane behaviors with regards to controlling
+# both video and audio formats from `~/.config/yt-dlp/config`.
+#
+# If I add `--recode-video=webm` then it will also recode audio only downloads
+# to webm even if I specified `--audio-format=opus`.
+#
+# I then tried using `-f` to control the downloaded file, but this is exposed
+# other strange and undesirable behaviors.
+#
+# If I use `ba[ext=opus]` it will often fail because `opus` is not a commonly
+# available extension.
+#
+# If I use `ba[ext=webm]`even if I want both audio and video it will never
+# download the full video file.
+#
+# If I use `bv[ext=webm]+ba[ext=webm]` with `-x` it will download the entire
+# video file, which is often an order of magnitude larger wasting both time and
+# disk space, before converting to the desired audio-only format.
+#
+# In conclusion there does not seem to be intelligent design around the `-x`
+# flag.  It ignores this flag when picking the file to download, and it ignores
+# this flag when asked to recode video even though I only want audio.
+#
+# The end result is that I have to pick between only controlling audio or video
+# and if I control video I am forced to download entire video files when smaller
+# audio-only downloads would suffice.
 
 
--f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
---audio-format=mp3
+# sane stream download setting
+--wait-for-video=1
+
+# optimal quality
+--audio-quality=0
+
+# save audio as opus and video as webm
+--prefer-free-formats
+-S ext:webm:webm
+--audio-format=opus
+--recode-video="opus>opus/webm"

+ 0 - 5
install/etc/skel/.xinitrc

@@ -1,5 +0,0 @@
-[ -f ~/.screenlayout/default.sh ] && . ~/.screenlayout/default.sh
-/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
-systemctl --user import-environment PATH DBUS_SESSION_BUS_ADDRESS
-systemctl --no-block --user start xsession.target
-exec openbox

+ 3 - 0
install/usr/local/bin/disk-maintenance

@@ -42,3 +42,6 @@ done
 for j in $(jobs -p); do
 for j in $(jobs -p); do
 	wait $j
 	wait $j
 done
 done
+
+# cleanup journalctl
+journalctl --vacuum-time=10d

+ 0 - 13
install/usr/local/bin/genshin-impact

@@ -1,13 +0,0 @@
-#!/bin/bash -xa
-# @note: assumes lutris wine 6.14-3 has been installed, feel free to edit as needed
-export PATH="/home/cdelorme/.local/share/lutris/runners/wine/lutris-6.14-3-x86_64/bin:$PATH"
-export WINEPREFIX="${HOME}/games/pc/genshin-impact/lutris"
-export GAMEPATH="${WINEPREFIX}/drive_c/Program Files/Genshin Impact/Genshin Impact game"
-export WINEDEBUG=-all
-#export DXVK_HUD=fps
-export MANGOHUD=1
-
-if [ "$1" != "env" ]; then
-	cd "$GAMEPATH"
-	wine explorer /desktop=gi,1920x1080 cmd /c launcher.bat
-fi

+ 0 - 50
install/usr/local/bin/mh

@@ -1,50 +0,0 @@
-#!/bin/bash
-#
-# mh command for simplified operations
-#
-# mh save
-# mh restore
-# mh kill
-#
-# can utilize save/restore to save-scum decoration farming
-# can utilize kill to stop processes when failed to cease
-#
-# save includes timestamps to avoid potential
-#
-# current implementation uses hard-coded user id; not portable
-# future implementations should either save/restore for all ids, or ask/compute
-
-export steam_game_id="582010"
-export save_path="${HOME}/games/mhworld/saves"
-export steam_user_id="48081292"
-export full_path="${HOME}/.local/share/Steam/userdata/${steam_user_id}/${steam_game_id}/remote/SAVEDATA1000"
-
-mhsave() {
-	mkdir -p "$save_path"
-	local save_file="${save_path}/$(date +%Y%m%d%H%M%S)"
-	cp "$full_path" "$save_file"
-	ln -sf "$save_file" "${save_path}/latest"
-}
-
-mhrestore() {
-	[ ! -f "${save_path}/latest" ] && return
-	cp -L "${save_path}/latest" "$full_path"
-}
-
-case "$1" in
-	run)
-		steam "steam://rungameid/${steam_game_id}" &> /dev/null &
-		;;
-	save)
-		mhsave
-		;;
-	restore)
-		mhrestore
-		;;
-	kill)
-		ps aux | grep -i monster | awk '{print $2}' | xargs kill -9 &> /dev/null
-		;;
-	*)
-		echo "unable to process command..."
-		;;
-esac

+ 0 - 3
install/usr/local/bin/mpv-control

@@ -1,3 +0,0 @@
-#!/bin/bash
-win=$(xdotool search --class mpv)
-[ -n "$1" ] && [ -n "$win" ] && xdotool key --window "$win" $1

+ 0 - 36
install/usr/local/bin/pash

@@ -1,36 +0,0 @@
-#!/bin/bash
-
-# define functions to assist with operations
-pash_increase() {
-	echo "increasing volume on all active sinks..."
-	local sinks=$(pactl list short sinks | grep "RUNNING\|IDLE" | awk '{print $1}')
-	echo "$sinks" | while IFS= read -r sink ; do pactl set-sink-volume $sink +5%; done
-}
-
-pash_decrease() {
-	echo "decreasing volume on all active sinks..."
-	local sinks=$(pactl list short sinks | grep "RUNNING\|IDLE" | awk '{print $1}')
-	echo "$sinks" | while IFS= read -r sink ; do pactl set-sink-volume $sink -5%; done
-}
-
-pash_mute() {
-	echo "toggling mute on all active sinks..."
-	local sinks=$(pactl list short sinks | grep "RUNNING\|IDLE" | awk '{print $1}')
-	echo "$sinks" | while IFS= read -r sink ; do pactl set-sink-mute $sink toggle; done
-}
-
-# select operation from list
-case $1 in
-	increase)
-		pash_increase
-		;;
-	decrease)
-		pash_decrease
-		;;
-	mute)
-		pash_mute
-		;;
-	*)
-		echo "unknown command ${1}..."
-		;;
-esac

+ 1 - 8
install/usr/local/bin/screenshot

@@ -1,9 +1,2 @@
 #!/bin/bash
 #!/bin/bash
-[ -d $(xdg-user-dir PICTURES)/screenshots ] || mkdir -p $(xdg-user-dir PICTURES)/screenshots
-mx=$(xdotool getmouselocation | awk -F'[: ]' '{print $2}')
-my=$(xdotool getmouselocation | awk -F'[: ]' '{print $4}')
-xdpyinfo -ext XINERAMA | sed '/^  head #/!d;s///' | while IFS=' :x@,' read i w h x y; do
-	if [[ $mx -ge $x && $mx -le $(($x + $w)) && $my -ge $y && $my -le $(($y + $h)) ]]; then
-		import -window root -crop ${w}x$h+$x+$y "$(xdg-user-dir PICTURES)/screenshots/$(date +%F_%H%M%S_%N)-${i}.png"
-	fi
-done
+grim -o $(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name') "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"

+ 6 - 2
install/usr/local/bin/screenshot-selection

@@ -1,3 +1,7 @@
 #!/bin/bash
 #!/bin/bash
-[ -d $(xdg-user-dir PICTURES)/screenshots ] || mkdir -p $(xdg-user-dir PICTURES)/screenshots
-import -frame "$(xdg-user-dir PICTURES)/screenshots/$(date +'%F-%H.%M.%S-(%N).png')"
+dimensions=$(slurp 2>/dev/null)
+if [ $? -eq 0 ]; then
+	grim -g "$dimensions" "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"
+else
+	grim -g "$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused).rect | "\(.x),\(.y) \(.width)x\(.height)"')" "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"
+fi

+ 1 - 2
install/usr/local/bin/system-updates

@@ -2,6 +2,5 @@
 
 
 pacman -Syu --noconfirm --ignore=linux
 pacman -Syu --noconfirm --ignore=linux
 
 
-youtube-dl -U
-
 python3 -m pip install --upgrade protontricks
 python3 -m pip install --upgrade protontricks
+

+ 0 - 10
install/usr/local/bin/urxvtq

@@ -1,10 +0,0 @@
-#!/bin/bash
-if [ $(ps aux | grep -v grep | grep -c "urxvt -name urxvtq") -eq 0 ]; then
-	urxvt -name urxvtq -geometry 200x24 &
-	xdotool windowactivate --sync $(xdotool search -sync --onlyvisible --classname urxvtq)
-elif xdotool search --onlyvisible --classname urxvtq &> /dev/null; then
-	xdotool windowunmap $(xdotool search -sync --classname urxvtq)
-else
-	xdotool windowmap --sync $(xdotool search -sync --classname urxvtq)
-	xdotool windowactivate --sync $(xdotool search -sync --classname urxvtq)
-fi

+ 53 - 25
install/usr/local/bin/uz

@@ -1,32 +1,60 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
 
 
-import sys
+# Extracts a zip archive while converting file names from Shift-JIS encoding to UTF-8.
+#
+# Example:
+#   python unzip-jp.py archive.zip
+#
+#       Creates a directory `archive` and extracts the archive there.
+#
 import zipfile
 import zipfile
-import argparse
+import sys
+import os
+import codecs
 
 
-parser = argparse.ArgumentParser(description="accept to and from encodings")
-parser.add_argument('-O', metavar='decode', default="shift-jis")
-parser.add_argument('-I', metavar='encode', default="cp437")
-args, files = parser.parse_known_args();
+if len(sys.argv) < 2:
+    print('No archive name.')
+    print('')
+    print('Usage: unzip-jp archive [password]')
+    exit(1)
 
 
-def unzip(filename, encode, decode):
-    code = 0
-    with zipfile.ZipFile(filename) as myzip:
-        for info in myzip.infolist():
-            try:
-                info.filename = info.filename.encode(encode, 'strict').decode(decode, 'strict')
-                myzip.extract(info)
-            except Exception as e:
-                code = 1
-                print("failed to extract {0}: {1}".format(info.filename, e))
-    return code
+name = sys.argv[1]
 
 
-def main(files, encode, decode):
-    code = 0
-    for file in files:
-        if unzip(file, encode, decode) == 1:
-            code = 1
-    return code
+if len(sys.argv) > 2:
+    password = sys.argv[2]
+else:
+    password = None
 
 
-if __name__ == '__main__':
-    sys.exit(main(files, args.I, args.O))
+directory = os.path.splitext(os.path.basename(name))[0]
+
+if not os.path.exists(directory):
+    os.makedirs(directory)
+
+with zipfile.ZipFile(name, 'r') as z:
+    if password:
+        z.setpassword(password.encode('cp850','replace'))
+    for f in z.infolist():
+        bad_filename = f.filename
+        if bytes != str:
+            # Python 3 - decode filename into bytes
+            # assume CP437 - these zip files were from Windows anyway
+            bad_filename = bytes(bad_filename, 'cp437')
+        try:
+            uf = codecs.decode(bad_filename, 'sjis')
+        except:
+            uf = codecs.decode(bad_filename, 'shift_jisx0213')
+        # need to print repr in Python 2 as we may encounter UnicodeEncodeError
+        # when printing to a Windows console
+        print(repr(uf))
+        filename=os.path.join(directory, uf)
+        # create directories if necessary
+        if not os.path.exists(os.path.dirname(filename)):
+            try:
+                os.makedirs(os.path.dirname(filename))
+            except OSError as exc: # Guard against race condition
+                if exc.errno != errno.EEXIST:
+                    raise
+        # don't try to write to directories
+        if not filename.endswith('/'):
+            with open(filename, 'wb') as dest:
+                dest.write(z.read(f))

+ 9 - 6
install/usr/local/bin/wallpaper

@@ -15,12 +15,15 @@ done
 
 
 # infinitely change wallpaper
 # infinitely change wallpaper
 while true; do
 while true; do
-	wallpaper_cmd="feh --no-fehbg"
-	monitor_count=$(xrandr -d :0 -q | grep -c " connected")
-	while [ $monitor_count -gt 0 ]; do
-		wallpaper_cmd="$wallpaper_cmd --bg-max \"$(find $wallpaper_path -type f | sort -R | tail -1)\""
-		let monitor_count=monitor_count-1
+	old_pid=$(ps aux | grep swaybg | awk 'NR==1{ print $2 }')
+	swaybg_cmd="swaybg"
+	sway_outputs=( $(swaymsg -t get_outputs | jq -r '.[].name') )
+	for op in "${sway_outputs[@]}"; do
+		wp=$(printf '%q' "$(find $wallpaper_path -type f | sort -R | tail -1)")
+		swaybg_cmd="${swaybg_cmd} -o $op -i $wp -m fit -c \#000000"
 	done
 	done
-	eval "$wallpaper_cmd"
+	eval $swaybg_cmd &
+	sleep 1
+	[ -n "$old_pid" ] && kill $old_pid 2>/dev/null
 	sleep $wallpaper_sleep_for
 	sleep $wallpaper_sleep_for
 done
 done

+ 2 - 0
notes/games/vr/valve-index.md

@@ -73,6 +73,8 @@ These are some scripts and utilities that can be used to provide some missing fu
 - [steamvr utils](https://github.com/DavidRisch/steamvr_utils)
 - [steamvr utils](https://github.com/DavidRisch/steamvr_utils)
 - [paToggle](https://gist.github.com/frostworx/2a1a84ea8098ddc207cc9f54793f5446)
 - [paToggle](https://gist.github.com/frostworx/2a1a84ea8098ddc207cc9f54793f5446)
 - [lh.py; superseded by steamvr_utils](https://gist.github.com/prefiks/e614116fc3983a8e7e5fe326800dc101)
 - [lh.py; superseded by steamvr_utils](https://gist.github.com/prefiks/e614116fc3983a8e7e5fe326800dc101)
+- [VR-on-Linux](https://gitlab.com/vr-on-linux/VR-on-Linux)
+- [vr-video-player](https://git.dec05eba.com/vr-video-player/about/)
 
 
 _The `steamvr_utils` package can be installed and easily hooked to the launch configuration of SteamVR._
 _The `steamvr_utils` package can be installed and easily hooked to the launch configuration of SteamVR._
 
 

+ 51 - 0
notes/sway.md

@@ -0,0 +1,51 @@
+
+# sway
+
+This is the new window manager based on the Wayland protocol, which is being adopted by the linux community as a replacement to xorg.
+
+
+## notes
+
+Coming from xorg, sway treats each display/monitor separately, meaning they have their own independent workspace, and you cannot drag your mouse across them.  However, the same controls that allow you to re-arrange "containers" on a single monitor directly apply to the second.  **To summarize, no additional or different `bindsym` commands are needed for multi-monitor controls.**
+
+With `waybar` you can minify `corectrl` to the system tray by clicking its icon.  _It seems this package breaks often, so it may require the user to regularly rebuild._
+
+Screen sharing on discord is broken until the developers fix it or implement pipewire support.
+
+There is currently no support for restoring containers to their previous workspaces.  _This makes restarting significantly more messy, as launching a common utility like `firefox` or `subl` (sublime text), will open all containers in the current workspace, and you have to manually re-arrange them._
+
+The `~/.config/sway/config.d/` directory should be used to establish overrides such as custom resolutions, special enhancements, or specific monitor bindings:
+
+	# dual monitor configuration
+	output HDMI-A-1 mode --custom 2560x1440@60Hz position 0 0
+	output DP-1 mode 3440x1440@144Hz pos 3440 0 adaptive_sync on
+
+	# bind workspaces 9 and 10 to HDMI/HDTV
+	workspace 9 output HDMI-A-1
+	workspace 10 output HDMI-A-1
+
+	# bind workspaces 1-5 to DP
+	workspace 1 output DP-1
+	workspace 2 output DP-1
+	workspace 3 output DP-1
+	workspace 4 output DP-1
+	workspace 5 output DP-1
+
+
+
+---
+
+Strange problem with global push-to-talk; had to start it once in order to trigger it, and the state may or may not persist on reboots.
+
+There does not appear to be a way to add temperature support to `waybar`, since by default it reads the first `hwmon` resource, which is often unrelated or unimportant, and selecting the correct ones for CPU and GPU is entirely hardware dependent.  _It may be possible to write a script that generalizes running `sensors` and scanning for common or known driver names in order to grab the correct data._
+
+The scratchpad is a bit messy in that the "cycle" for pulling windows out involves show/hide/show/hide on repeat, rather than show to show to show swapping the pulled window instead.  _It may be possible to script this with `swaymsg` with an iterator._
+
+
+
+## nvidia
+
+Since the nvidia proprietary driver is unsupported you may need these in your `~/.bash_profile`:
+
+	export WLR_NO_HARDWARE_CURSORS=1
+	alias sway='sway --unsupported-gpu'

+ 1 - 0
readme.md

@@ -83,3 +83,4 @@ Finally, while I am not a fan of how `systemd` forced proliferation into all lin
 - [touchpad configuration](http://add4jhf.blogspot.com/2013/09/touch-pad-deactivation-while-typing-and.html)
 - [touchpad configuration](http://add4jhf.blogspot.com/2013/09/touch-pad-deactivation-while-typing-and.html)
 - [yay AUR Package Manager](https://github.com/Jguer/yay)
 - [yay AUR Package Manager](https://github.com/Jguer/yay)
 - [Wayland](https://www.fosskers.ca/en/blog/wayland)
 - [Wayland](https://www.fosskers.ca/en/blog/wayland)
+- [swaybg over swaymsg for wallpaper without flicker](https://sylvaindurand.org/dynamic-wallpapers-with-sway/)

+ 1 - 4
setup/install.sh

@@ -83,21 +83,18 @@ mkfs.btrfs -fLarch "/dev/${partitions[2]}"
 # enable and mount partitions with appropriate settings
 # enable and mount partitions with appropriate settings
 swapon "/dev/${partitions[1]}"
 swapon "/dev/${partitions[1]}"
 export resume_uuid="$(lsblk -no UUID "/dev/${partitions[1]}")"
 export resume_uuid="$(lsblk -no UUID "/dev/${partitions[1]}")"
-mount -t btrfs -o "noatime,compress=lzo,autodefrag,ssd" "/dev/${partitions[2]}" /mnt
+mount -t btrfs -o "noatime,compress=lzo,autodefrag,ssd,space_cache=v2" "/dev/${partitions[2]}" /mnt
 mkdir /mnt/boot
 mkdir /mnt/boot
 mount "/dev/${partitions[0]}" /mnt/boot
 mount "/dev/${partitions[0]}" /mnt/boot
 
 
 # install base and base-devel package sets, and generate the fstab
 # install base and base-devel package sets, and generate the fstab
 pacstrap /mnt base
 pacstrap /mnt base
-# pacstrap /mnt base base-devel linux linux-headers linux-firmware
 genfstab -Up /mnt > /mnt/etc/fstab
 genfstab -Up /mnt > /mnt/etc/fstab
 
 
 # this assumes that arch.sh and install/ exist and will copy them to continue
 # this assumes that arch.sh and install/ exist and will copy them to continue
 # @note: would prefer to copy to `/tmp` but `/mnt/tmp` from iso is a separate tmpfs
 # @note: would prefer to copy to `/tmp` but `/mnt/tmp` from iso is a separate tmpfs
 mkdir -p /mnt/srv/arch-desktop
 mkdir -p /mnt/srv/arch-desktop
 cp -r ./ /mnt/srv/arch-desktop
 cp -r ./ /mnt/srv/arch-desktop
-# cp -r install /mnt/srv/arch-desktop/
-# cp arch.sh /mnt/srv/arch-desktop/
 
 
 # proceed to automate arch-chroot installation and push output to a log file that gets copied to the new disk
 # proceed to automate arch-chroot installation and push output to a log file that gets copied to the new disk
 arch-chroot /mnt /srv/arch-desktop/arch.sh | tee arch-install.log
 arch-chroot /mnt /srv/arch-desktop/arch.sh | tee arch-install.log

+ 112 - 159
todo.md

@@ -8,199 +8,152 @@ _Expect iterative changes over the following months while fine-tuning happens on
 
 
 ## sway
 ## sway
 
 
-Create a `sway` branch to test building a minimal install with a brand new window manager and removing xorg packages!
+- verify fix for alacritty config loads gvm/bash_profile without requiring redundant sourcing
+- double-check whether exit command properly, and fully, terminates our sway session (eg. we can safely reload sway)
 
 
-Disable all GUI packages to build a "minimal" install.
 
 
-We'll take that image and triple check package dependency chains for sway and applications to run on it
+---
 
 
+When I eventually break down and buy elden ring, try these?
 
 
+	PROTON_NO_FSYNC=1 WINE_FULLSCREEN_FSR=1 mangohud gamemoderun %command%
 
 
-This will likely require significant refinement, as I'll need to test configurations on real hardware to validate multi-monitor behavior.
+May need other steps for ultrawide support?
 
 
-Further, it will require some time to get used to it, but from rudimentary tests I have been able to run every game of interest on it, and with significantly increased performance!
+https://github.com/gurrgur/er-patcher
 
 
-References:
+	./er-patcher -r 144 -uavc -- env <above command>
 
 
-https://www.fosskers.ca/en/blog/wayland
-https://wiki.archlinux.org/title/Sway#Manage_Sway-specific_daemons_with_systemd
-https://wiki.archlinux.org/title/Sway#Application_launchers
-https://github.com/swaywm/sway/issues/1174
-https://www.youtube.com/watch?v=hRIGYUWQfYU
-https://www.youtube.com/watch?v=YWgZrES4t3U
-https://github.com/swaywm/sway/wiki#program-launchers
-https://github.com/lyfeyaj/sublime-text-imfix
-https://www.reddit.com/r/swaywm/comments/eksf1p/steam_now_fully_works_under_sway/
 
 
-Installed packages:
+---
 
 
-	sway
-	alacritty
-	wofi
-	waybar
-	xorg-xwayland
-	xorg-xlsclients
-	qt5-wayland
-	glfw-wayland
-	grim
-	slurp
-	xdg-desktop-portal-wlr
-	libpipewire02
-	ttf-font-awesome
-	wl-clipboard
-	lxsession-gtk3
+- figure out how to modify aur package installation to occur under new user rather than temporary user
+- add new aur packages to the installation
+	- cmst (sway/wayland friendly connman management)
+	- wev (_need to verify necessity?_)
 
 
-Next create a config for sway:
+- investigate `poweralertd` and `batsignal` to setup low battery alerts with `mako`
+	- _This is important for laptops_
 
 
-	mkdir -p ~/.config/sway
-	cp /etc/sway/config ~/.config/sway/config
+- continue to refine `notes/sway.md` to account for the lack of obvious world-knowledge
 
 
-_I'm still tinkering with one using `wofi` for `$menu` and waybar, but it's not nearly ready._
+- Test SteamVR
+	- Setup two new base stations for 4-station setup
+	- Reconfigure steam vr utils software
+		- Make sure all 4 base stations connect
+		- Make sure all 4 base stations shutdown
+		- Make sure audio transitions to and from
+	- try Beat Saber
+	- try No Man's Sky
 
 
-Migrate as many hotkeys from `rc.xml` as possible to sway config
 
 
-Added to `~/.bash_profile`:
+## better temperature scripts
 
 
-	export MOZ_ENABLE_WAYLAND=1
-	export SDL_VIDEODRIVER="wayland"
+Write a script to grab temperatures to replace the temperature module in waybar with custom commands...
 
 
-_The `SDL_VIDEODRIVER` is for steam, and may break in many games, so I'll need to add overrides for incompatible titles using `SDL_VIDEODRIVER=x11` in steam launch commands, or if more games fail than no I can invert my setup so I add the override for games that I know work with wayland._
+_This is because configuring temperatures is hardware dependent and the waybar has unintelligent defaults and anti-agnostic configuration!_
 
 
-Switch to waybar in sway config (_this is a massive improvement over the default_):
+Example that matters?
 
 
-	bar {
-		swaybar_command waybar
+for amd cpu: `k10temp` followed by `tctl`
+for intel cpu: `coretemp` followed by `package id 0`
+for amd gpu `amdgpu` followed by `edge`
+
+for nvidia we need to use `nvidia-smi` and parse that instead, but that also means if `nvidia-smi` does not exist we have to back out!
+
+_For this we will want to have an `exec-if` that checks for results
+_There may be cases where there is no GPU, so when no sensors appear can we have the custom module omitted?_
+
+For gpu temperatures:
+
+- `amdgpu`, followed by `edge`
+
+_This may not exist for laptops, may differ for nvidia, and may also differ depending on the driver._
+
+Samples:
+
+	"custom/cputemp": {
+		"format": "{}°C",
+		"interval": "3",
+		"exec": "/usr/local/bin/temps cpu",
+		"exec-if": "/usr/local/bin/temps cpu can"
+	}
+	"custom/gputemp": {
+		"format": "GPU: {}°C",
+		"interval": "3",
+		"exec": "/usr/local/bin/temps gpu",
+		"exec-if": "/usr/local/bin/temps gpu can"
 	}
 	}
 
 
-_I need to research how to fully customize waybar, because it has a **lot** of data and could be refined!_
 
 
-I need to test wayland native alternatives to `urxvt` and `pcmanfm`; one recommendation is `alacritty` as a `urxvt` replacement, and `pcmanfm-gtk3` is supposedly wayland-compatible without xwayland.  Needs to be tested.
+## scratchpad experiment
 
 
-I also need to test a base install with **no** GUI packages and manually installing the sway dependencies to ensure a minimal build.
+I would like to be able to selectively deal with applications send to scratchpad.
 
 
-Add logic to sway config that starts sway-session target:
+Getting an ordered list is a starting point.
 
 
-	exec_always "systemctl --user import-environment; systemctl --user start sway-session.target"
+Probably replacing `scratchpad show` with an `exec`.
 
 
+New `/usr/local/bin/alacrittyq` with `$mod+tilde` toggle:
 
 
-_Delete legacy userspace service files, and edit/change others for sway-session compatibility._
+	#!/bin/bash
 
 
-Create new systemd service files for:
+	# @todo: query swaymsg get_tree for alacrittyq
+	# if not exists launch
+	# if exists
+	# if hidden in scratchpad show
+	# if shown hide in scratchpad
+	alacritty --class "alacrittyq"
 
 
-- update-desktop-database (oneshot)
-- xdg-user-dirs-update (oneshot)
-- gtk3-settings (oneshot)
+- investigate dedicated identity for an alacritty window to selectively target for scratchpad persistent terminal via mod+tilde
 
 
-_Verify whether we can delete `.Xdefaults` and `.Xresources`, as both should be legacy xorg specific; eg. urxvt._
 
 
-Replace `/usr/local/bin/screenshot`:
+## workspace restoration
 
 
-	grim -o $(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name') "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"
+It may be possible to write an IPC connected utility to save and restore workspaces
 
 
-Replace `/usr/local/bin/screenshot-selection`:
+_This tool would need to know when to save, and to intelligently restore only once when applications are first launched._
 
 
-	dimensions=$(slurp 2>/dev/null)
-	if [ $? -eq 0 ]; then
-		grim -g "$dimensions" "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"
-	else
-		grim -g "$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused).rect | "\(.x),\(.y) \(.width)x\(.height)"')" "$(xdg-user-dir PICTURES)/screenshots/$(date +'%Y%m%d_%H%M%S%N.png')"
-	fi
+It would need to have a way to pull wayland equivalents for the content mentioned in this issue:
 
 
-Replace `/usr/local/bin/wallpaper`:
+- https://github.com/swaywm/sway/issues/1005
 
 
-	#!/bin/bash
 
 
-	# set sane defaults
-	[ -z "$wallpaper_sleep_for" ] && wallpaper_sleep_for="180"
-	[ -z "$wallpaper_path" ] && wallpaper_path="$(xdg-user-dir PICTURES)/wallpaper"
-	mkdir -p "$wallpaper_path"
-
-	# validate wallpaper path
-	[ $(find "$wallpaper_path" -type f | wc -l) -gt 0 ] || exit 1
-
-	# there can be only one
-	while [ $(ps aux | grep -v 'grep' | grep -c "$0") -gt 2 ]; do
-		kill $(ps aux | grep -v 'grep' | grep -v $$ | grep "$0" | awk '{print $2}') &> /dev/null
-	done
-
-	# infinitely change wallpaper
-	while true; do
-		sway_outputs=( $(swaymsg -t get_outputs | jq -r '.[].name') )
-		for op in "${sway_outputs[@]}"; do
-			wp="$(find $wallpaper_path -type f | sort -R | tail -1)"
-			swaymsg "output $op bg $wp" fit \#001E27
-		done
-		sleep $wallpaper_sleep_for
-	done
-
-- research firefox auto-configuration _or_ copying configuration files (_eg. if plain text can add to dot-files_):
-	- https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig
-	- verify if it remembers workspaces when re-opened
-
-- test/fix multimedia keys for volume change support (_may require actual hardware; would also consider popup icons?_)
-	- https://www.reddit.com/r/swaywm/comments/bwwxg0/xf86_audio_keys/
-
-- add `yad` to packages as a wayland-native `zenity` alternative
-	- add messages to waybar for battery
-	- add messages to pash for volume changes?
-
-- install `cmst` from aur and try it out as an option for wifi support
-	- https://aur.archlinux.org/packages/cmst/
-
-- investigate using `scratchpad` feature of `sway` for persistent terminal with toggle hotkey
-- investigate creating workspace affinities for things like fullscreen games so it automates placement/movement
-
-- set sway config to load userspace `.d` directory for custom settings
-	- touchpad-specific configuration; we may be able to add a default if we can identify ideal settings...
-	- display-specific configuration
-
-- on real hardware I'll need to test/refine sway config hotkeys for better navigation
-	- test creating workspace "affinity" for games and videos etc... so they open into a desirable placement?
-	- multi-monitor support and configuration; I'll need hotkeys that move applications between displays
-		- supposedly each monitor is treated as a separate workspace, so this might work well
-			- https://www.reddit.com/r/swaywm/comments/gr7yvt/assigning_workspaces_to_specific_outputs/
-			- https://fedoramagazine.org/how-to-setup-multiple-monitors-in-sway/
-			- https://www.reddit.com/r/swaywm/comments/ftuiqa/is_it_possible_to_set_my_starting_workspace/
-	- test left/right arrow navigation; both changing workspaces and also displays
-		- _can this be used for all workspaces or only numbered?_
-		- _Does it loop?_
-
-
-### testing
-
-- sway launched without any issues
-- waybar is awesome, basically replaces both tint2 AND conky at the same time
-	- can we resize and adjust what is displayed?
-	- can we add cmst and launch from right click?
-	- can we auto-hide/show with modifier keys so fullscreen apps work?
-- wofi is very fast and very clean, but it seems to be pulling from `.desktop` and not raw command line
-	- can we disable history so when it cannot find something it doesn't launch the last thing it had?
-	- _figure out how to add and run raw cli commands and we'd be set!_
-	- can use mod+d for apps and mod+space for terminal commands!
-	- I can also load a custom css to style it very nicely
-- alacritty is fast and works great so far, need to test unicode character support, but if so it might be time...
-	- _can possibly dump `.Xdefaults`?_
-- firefox ran without xwayland, so it's native!! Woohoo!
-- wine, and specifically genshin, ran natively without using xwayland?  Holy shit!
-- sublime text loaded and is wayland native (eg. no xlsclients)
-- Resolution was resolved, but adaptive sync only works with display port not hdmi sadly
-	- _genshin now perfectly launches filling the screen without waybar, so maybe it's a non-issue?_
-- used mozilla gum_test to verify webcam, mic, and screen sharing worked
-- I should also investigate get_inputs to see what config options I have there!
-	- _namely for mouse and touchpad fine-tuning defaults; if they aren't already_
-
-https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables
-https://wiki.nftables.org/wiki-nftables/index.php/Main_differences_with_iptables
-https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables
-https://ungleich.ch/en-us/cms/blog/2018/08/18/iptables-vs-nftables/
-https://github.com/swaywm/sway/issues/3319
-https://github.com/swaywm/sway/blob/master/config.in
-https://github.com/jdonofrio728/swaywm-bg-changer/blob/master/swaywm-bg-changer
-https://github.com/jdonofrio728/swaywm-bg-changer
-https://www.reddit.com/r/swaywm/comments/ehqsuw/autochanging_background_for_sway/
-https://github.com/swaywm/sway/issues/5006
-https://wiki.archlinux.org/title/Polkit
-https://forums.centos.org/viewtopic.php?t=70139
-https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland
-https://www.reddit.com/r/swaywm/comments/epp0r4/unable_to_configure_the_cursor_theme/
-https://wiki.archlinux.org/title/x_resources
+## hidpi check
+
+Previously I stopped caring because hidpi is erratic and glitchy, but I'm curious if sway might be smarter than openbox...
+
+- test hidpi configuration
+	- `output * scale 2`
+	- also targeted output scaling for HDTV but not ultrawide
+- Verify hidpi behavior of applications is not poor:
+	- firefox (many different websites?)
+	- mpv
+	- pcmanfm
+	- steam
+	- discord
+- _Remember to take some screenshots before and after to indicate visible changes?_
+
+
+## firefox automated configuration
+
+- investigate firefox configuration
+	- [auto-configuration?](https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig)
+	- add mimetypes to bypass godawful save dialog (eg. hanlders.json in `~/.mozilla`, but unique profile path?)
+	- how to make it remember workspaces when restoring tabs (_probably not possible, so using tab manager addon_)
+
+
+## data cleanup
+
+Utilize my old rig to cleanup and organize my data across my old HDD's
+
+- Uninstall everything that is taking up disk space
+	- games
+	- videos
+	- music
+	- data
+- disable transmission (_we should not be downloading more content on this box_)
+
+Since this machine is separate/independent I can happily deal with long running processes and filling the disks to the brim while going through my files...
+
+At the end I want to be able to eliminate a huge amount of data that I don't need anymore, and any redundant copies of data as well...