Moving toward working gui installation.

This commit is contained in:
Storm Dragon
2025-11-29 03:54:28 -05:00
parent dfd2609461
commit 013b3d11ac
13 changed files with 351 additions and 43 deletions

View File

@@ -25,7 +25,8 @@ Architecture = auto
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
# Protect Stormux custom skel files from being overwritten by package updates
NoUpgrade = etc/skel/.bashrc etc/skel/.inputrc etc/skel/.screenrc etc/skel/.vimrc etc/skel/.vim/*
#NoExtract =
# Misc options

View File

@@ -0,0 +1,43 @@
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# Change directories without using cd
shopt -s autocd
# Load aliases and functions if they exist
[[ -f "$HOME/.bash_aliases" ]] && . "$HOME/.bash_aliases"
[[ -f "$HOME/.bash_functions" ]] && . "$HOME/.bash_functions"
# Environment variables
export QT_ACCESSIBILITY=1
export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
# Set prompt
PS1='[\u@\h \W] \$ '
# Dialog accessibility options
export DIALOGOPTS='--no-lines --visit-items'
# Browser selection based on environment
if [[ -z "$DISPLAY" ]]; then
export BROWSER=w3m
fi
# GPG TTY
GPG_TTY=$(tty)
export GPG_TTY
# Don't put commands prefixed with space, or duplicate commands in history
export HISTCONTROL=ignoreboth
# Increase history size
export HISTSIZE=10000
export HISTFILESIZE=20000
# Add user's local bin directories to PATH
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
export PATH

View File

@@ -0,0 +1,25 @@
# ~/.inputrc
# Readline configuration for bash
# Reload changes with control+x followed by control+r
# Don't echo control characters
set echo-control-characters off
# History searching with up and down arrows
"\e[A": history-search-backward
"\e[B": history-search-forward
# Shift+Tab sequences for console (backward menu completion)
"\e[Z": menu-complete-backward
"\eZ": menu-complete-backward
# Alt+comma as alternative
"\e,": menu-complete-backward
# Music player keybindings (requires playerctl)
"\eX": "\C-k \C-u playerctl play\C-M"
"\eC": "\C-k \C-u playerctl play-pause\C-M"
"\eV": "\C-k \C-u playerctl stop\C-M"
"\eB": "\C-k \C-u playerctl next\C-M"
"\eU": "\C-k \C-u playerctl metadata -f '{{artist}} - {{album}} - {{title}}'\C-M"
"\e_": "\C-k \C-u playerctl volume 0.05-\C-M"
"\e+": "\C-k \C-u playerctl volume 0.05+\C-M"

View File

@@ -0,0 +1,33 @@
# ~/.screenrc
# GNU Screen configuration
# Disable visual bell
vbell off
bell_msg ""
# Disable hardstatus
hardstatus off
# Disable startup message
startup_message off
# Set scrollback buffer size
defscrollback 4096
# Extended window numbering (0-19 instead of 0-9)
bind ! select 10
bind @ select 11
bind \# select 12
bind $ select 13
bind % select 14
bind ^ select 15
bind & select 16
bind * select 17
bind ( select 18
bind ) select 19
# Copy buffer to system clipboard (requires xclip)
bind b eval "writebuf" 'exec !!! xclip -selection "clipboard" -i /tmp/screen-exchange'
# Disable alternate screen switching (allows scrollback in terminal)
termcapinfo xterm* ti@:te@

View File

@@ -0,0 +1,29 @@
" Date and time insertion functions
" Insert current date in format: Wednesday, January 15, 2025
function! InsertDate()
let date_string = strftime("%A, %B %d, %Y")
execute "normal! a" . date_string
endfunction
" Insert current time in format: 09:15PM
function! InsertTime()
let time_string = strftime("%I:%M%p")
execute "normal! a" . time_string
endfunction
" Insert current date and time in format: Wednesday, January 15, 2025, 09:15PM
function! InsertDateTime()
let datetime_string = strftime("%A, %B %d, %Y, %I:%M%p")
execute "normal! a" . datetime_string
endfunction
" Key mappings
nnoremap <leader>date :call InsertDate()<CR>
inoremap <leader>date <C-o>:call InsertDate()<CR>
nnoremap <leader>time :call InsertTime()<CR>
inoremap <leader>time <C-o>:call InsertTime()<CR>
nnoremap <leader>datetime :call InsertDateTime()<CR>
inoremap <leader>datetime <C-o>:call InsertDateTime()<CR>

View File

@@ -0,0 +1,39 @@
" Emoji insertion mappings
" Basic expressions
inoremap ,:) 😊
inoremap ,:( 😢
inoremap ,:D 😃
inoremap ,;) 😉
inoremap ,:P 😛
inoremap ,:o 😮
inoremap ,:\| 😐
" Hearts and love
inoremap ,<3
inoremap ,heart
inoremap ,love 💕
inoremap ,kiss 😘
" Special expressions
inoremap ,>:) 😈
inoremap ,devil 😈
inoremap ,:* 😘
inoremap ,cool 😎
inoremap ,nerd 🤓
inoremap ,angry 😠
" Hands and gestures
inoremap ,thumbs 👍
inoremap ,clap 👏
inoremap ,wave 👋
inoremap ,peace
inoremap ,pray 🙏
" Common symbols
inoremap ,check
inoremap ,x
inoremap ,star
inoremap ,fire 🔥
inoremap ,rocket 🚀
inoremap ,tada 🎉

View File

@@ -0,0 +1,77 @@
" ~/.vimrc
" Vim configuration for Stormux
" Ensure vim directory structure exists
" mkdir -p ~/.vim/{backup,swap,views}
set nocompatible " Use Vim settings (not Vi compatible)
filetype off " Required for some plugins
" Terminal and encoding
set term=linux " Make arrow and other keys work
scriptencoding utf-8
" History and undo
set history=1000 " Store more history (default is 20)
set undoreload=10000 " Maximum lines to save for undo on buffer reload
" Backup and swap file configuration
set backup " Enable backups
set backupdir=$HOME/.vim/backup//
set directory=$HOME/.vim/swap//
set viewdir=$HOME/.vim/views//
" Search settings
set ignorecase " Case insensitive search
set smartcase " Case sensitive when uppercase present
set gdefault " /g flag on :s substitutions by default
" Spell checking
set spell " Enable spell checking
" Display settings
set wrap " Wrap long lines
set linebreak " Break lines at word boundaries
set noruler " Disable ruler (for accessibility)
set laststatus=0 " Never show status line
set noshowcmd " Don't show commands in status
" Indentation settings
set shiftwidth=4 " Use indents of 4 spaces
set expandtab " Tabs are spaces, not tabs
set tabstop=4 " An indentation every four columns
set softtabstop=4 " Let backspace delete indent
" Leader key
let mapleader = ','
" Remap semicolon to colon for easier commands
nnoremap ; :
" Yank from cursor to end of line (consistent with C and D)
nnoremap Y y$
" Em-dash insertion
inoremap ,-
" Working directory shortcuts
cmap cwd lcd %:p:h
cmap cd. lcd %:p:h
" Write with sudo if you forgot to open with sudo
cmap w!! w !sudo tee % >/dev/null
" Disable automatic comment continuation
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
" Load vim helper functions if they exist
if filereadable(expand("~/.vim/dates.vim"))
source ~/.vim/dates.vim
endif
if filereadable(expand("~/.vim/emoji.vim"))
source ~/.vim/emoji.vim
endif
" Enable filetype detection and indenting
filetype plugin indent on

View File

@@ -38,4 +38,14 @@ if [ -d /home/stormux ]; then
chown -R 1000:1000 /home/stormux
fi
# Copy Stormux custom skel files to /etc/skel
# This is done after package installation to avoid conflicts with packages like screen
echo "Copying Stormux custom skel files..."
if [ -d /etc/skel.stormux ]; then
cp -a /etc/skel.stormux/. /etc/skel/
echo "Stormux skel files copied to /etc/skel"
else
echo "Warning: /etc/skel.stormux not found"
fi
echo "Airootfs customization complete"

View File

@@ -18,10 +18,12 @@ declare -a userNames=()
declare -a userPasswords=()
declare -a userIsAdmin=()
desktopEnvironment="" # "none", "i3", "mate"
hasDesktop=false # true if a desktop environment is selected
timezone=""
enableSsh="no" # "yes" or "no"
installLinuxGameManager="no" # "yes" or "no"
installAudiogameManager="no" # "yes" or "no"
autoLoginUser="" # User to auto-login for desktop environments
#
@@ -666,24 +668,49 @@ gather_system_info() {
case "$desktop" in
"Console only"*)
desktopEnvironment="none"
hasDesktop=false
log_info "Desktop environment: none"
break
;;
"i3"*)
desktopEnvironment="i3"
hasDesktop=true
log_info "Desktop environment: i3"
break
;;
"MATE"*)
desktopEnvironment="mate"
hasDesktop=true
log_info "Desktop environment: mate"
break
;;
esac
done
# Auto-login user selection (only if desktop environment selected)
if [[ "$hasDesktop" == true ]]; then
echo ""
echo "=== Auto-Login Configuration ==="
if [[ ${#userNames[@]} -eq 1 ]]; then
autoLoginUser="${userNames[0]}"
echo "Auto-login user set to: $autoLoginUser"
log_info "Auto-login user: $autoLoginUser"
else
echo "Select which user should automatically login to the graphical session:"
PS3="Enter user number: "
select selectedUser in "${userNames[@]}"; do
if [[ -n "$selectedUser" ]]; then
autoLoginUser="$selectedUser"
echo "Auto-login user set to: $autoLoginUser"
log_info "Auto-login user: $autoLoginUser"
break
fi
done
fi
fi
# Game manager installation (only if desktop environment selected)
if [[ "$desktopEnvironment" != "none" ]]; then
if [[ "$hasDesktop" == true ]]; then
echo ""
echo "=== Optional Game Managers ==="
echo ""
@@ -804,7 +831,7 @@ install_base_system() {
)
local utilityPackages=(
vim nano screen magic-wormhole
vi vim nano screen magic-wormhole
man man-pages
xdg-user-dirs xdg-utils
poppler socat parted
@@ -820,30 +847,22 @@ install_base_system() {
# Combine all packages
local allPackages=("${basePackages[@]}" "${audioPackages[@]}" "${accessibilityPackages[@]}" "${utilityPackages[@]}")
# Add wine packages for audiogame-manager
if [[ "$installAudiogameManager" == "yes" ]]; then
local winePackages=(
wine winetricks wine_gecko wine-mono
cabextract dos2unix translate-shell
gst-plugins-bad gst-plugins-good gst-plugins-ugly gst-libav
)
allPackages+=("${winePackages[@]}")
log_info "Adding wine packages for audiogame-manager"
fi
# Add desktop-specific packages
case "$desktopEnvironment" in
i3)
allPackages+=(i3-wm xclip)
allPackages+=(i3-wm orca lxterminal pluma)
allPackages+=(discount jq libnotify xfce4-notifyd pamixer playerctl)
allPackages+=(python-i3ipc python-wxpython sox yad)
allPackages+=(lxsession magic-wormhole pcmanfm)
allPackages+=(python-gobject python-pillow python-pytesseract scrot tesseract)
allPackages+=(tesseract-data-eng udiskie xorg-setxkbmap)
# Add Stormux-specific i3 packages
stormuxPackages+=(xlibre-server xlibre-input-libinput nodm-dgw)
stormuxPackages+=(xlibre-xserver xlibre-input-libinput nodm-dgw)
;;
mate)
allPackages+=(mate mate-extra orca lightdm lightdm-gtk-greeter)
allPackages+=(mate mate-extra orca)
# Add Stormux-specific MATE packages
stormuxPackages+=(xlibre-server xlibre-input-libinput)
stormuxPackages+=(xlibre-xserver xlibre-input-libinput nodm-dgw)
;;
esac
@@ -1052,6 +1071,23 @@ pacman -Sy --noconfirm --needed ${stormuxPackages[*]} 2>/dev/null || true
"
fi
# Build game manager packages installation command
local gameManagerPackagesCmd=""
if [[ "$installAudiogameManager" == "yes" ]]; then
gameManagerPackagesCmd+="
# Install wine packages for audiogame-manager
echo \"Installing wine packages for audiogame-manager...\"
pacman -S --noconfirm --needed wine winetricks wine_gecko wine-mono cabextract dos2unix translate-shell gst-plugins-bad gst-plugins-good gst-plugins-ugly gst-libav 2>/dev/null || true
"
fi
if [[ "$installLinuxGameManager" == "yes" ]]; then
gameManagerPackagesCmd+="
# Install packages for linux-game-manager
echo \"Installing packages for linux-game-manager...\"
pacman -S --noconfirm --needed linux-game-manager 2>/dev/null || true
"
fi
# Build pipewire configuration command for all users
local pipewireConfigCmd=""
for username in "${userNames[@]}"; do
@@ -1093,6 +1129,8 @@ export GTK_MODULES=gail:atk-bridge
export GNOME_ACCESSIBILITY=1
export QT_ACCESSIBILITY=1
export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
export EDITOR=nano
export VISUAL=nano
ENV_EOF
# Note: realtime group is created by realtime-privileges package
@@ -1161,7 +1199,6 @@ elif [[ "${desktopEnvironment}" == "mate" ]]; then
#
# Executed by startx (run your window manager from here)
dbus-launch
[[ -f ~/.Xresources ]] && xrdb -merge -I\$HOME ~/.Xresources
if [ -d /etc/X11/xinit/xinitrc.d ]; then
@@ -1171,30 +1208,24 @@ if [ -d /etc/X11/xinit/xinitrc.d ]; then
unset f
fi
# Source xprofile if it exists
[[ -f ~/.xprofile ]] && . ~/.xprofile
[ -f /etc/xprofile ] && . /etc/xprofile
[ -f ~/.xprofile ] && . ~/.xprofile
exec mate-session
exec dbus-run-session -- mate-session
XINITRC_MATE_EOF
chmod 755 /home/\$firstUser/.xinitrc
chown \$firstUser:users /home/\$firstUser/.xinitrc
# Create .xprofile for MATE with accessibility variables
cat > /home/\$firstUser/.xprofile <<'XPROFILE_MATE_EOF'
#!/bin/sh
#
# ~/.xprofile
#
# Executed by display managers and sourced by .xinitrc
# Accessibility environment variables
# Accessibility variables
export ACCESSIBILITY_ENABLED=1
export GTK_MODULES=gail:atk-bridge:canberra-gtk-module
export CHROME_FLAGS="--force-renderer-accessibility"
export GTK_MODULES=gail:atk-bridge
export GNOME_ACCESSIBILITY=1
export QT_ACCESSIBILITY=1
export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
export DBUS_SESSION_BUS_PID
export DBUS_SESSION_BUS_ADDRESS
export SAL_USE_VCLPLUGIN=gtk3
# Enable Orca screen reader
gsettings set org.gnome.desktop.a11y.applications screen-reader-enabled true 2>/dev/null || true
@@ -1220,13 +1251,12 @@ if [[ -f /usr/share/pacman/keyrings/stormux.gpg ]]; then
pacman-key --lsign-key 52ADA49000F1FF0456F8AEEFB4CDE1CD56EF8E82 2>/dev/null || true
fi
# Import xlibre key
pacman-key --recv-keys 73580DE2EDDFA6D6 2>/dev/null || true
pacman-key --lsign-key 73580DE2EDDFA6D6 2>/dev/null || true
# Install Stormux-specific packages (built dynamically before chroot)
$stormuxPackagesCmd
# Install game manager packages (built dynamically before chroot)
$gameManagerPackagesCmd
# Enable pipewire globally for all users (creates symlinks in /etc/systemd/user/)
systemctl --global enable pipewire.service pipewire-pulse.service wireplumber.service
@@ -1241,9 +1271,9 @@ $pipewireConfigCmd
# Configure nodm for automatic login (only after nodm package is installed)
if [[ "${desktopEnvironment}" == "i3" ]] || [[ "${desktopEnvironment}" == "mate" ]]; then
if [[ -f /etc/nodm.conf ]]; then
sed -i "s/{user}/${userNames[0]}/g" /etc/nodm.conf
sed -i "s/{user}/${autoLoginUser}/g" /etc/nodm.conf
systemctl enable nodm.service
echo "Display manager (nodm) configured for ${userNames[0]}"
echo "Display manager (nodm) configured for ${autoLoginUser}"
else
echo "Warning: /etc/nodm.conf not found, skipping nodm configuration"
fi
@@ -1262,6 +1292,10 @@ export GNOME_ACCESSIBILITY=1
export QT_ACCESSIBILITY=1
export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
# Default editor (users can override in their own shell config)
export EDITOR=nano
export VISUAL=nano
# Dialog accessibility options
export DIALOGOPTS='--no-lines --visit-items'
PROFILE_EOF
@@ -1356,6 +1390,10 @@ install_game_managers() {
# Clone repository
git clone https://git.stormux.org/storm/linux-game-manager "$mountPoint/opt/linux-game-manager"
# Configure git repository for shared group access
arch-chroot "$mountPoint" git -C /opt/linux-game-manager config core.sharedRepository group
arch-chroot "$mountPoint" git -C /opt/linux-game-manager config safe.directory /opt/linux-game-manager
# Set ownership to root:games with group-writable permissions
chown -R root:games "$mountPoint/opt/linux-game-manager"
chmod -R 775 "$mountPoint/opt/linux-game-manager"
@@ -1366,7 +1404,13 @@ install_game_managers() {
cat > "$mountPoint/usr/local/bin/linux-game-manager" <<'EOF'
#!/usr/bin/env bash
cd /opt/linux-game-manager || exit 1
# Set umask for group-writable files
umask 002
# Try to update - only members of games group can write
git pull --quiet 2>/dev/null || true
./linux-game-manager.sh "$@"
EOF
chmod 755 "$mountPoint/usr/local/bin/linux-game-manager"
@@ -1383,6 +1427,10 @@ EOF
# Clone repository
git clone https://git.stormux.org/storm/audiogame-manager "$mountPoint/opt/audiogame-manager"
# Configure git repository for shared group access
arch-chroot "$mountPoint" git -C /opt/audiogame-manager config core.sharedRepository group
arch-chroot "$mountPoint" git -C /opt/audiogame-manager config safe.directory /opt/audiogame-manager
# Set ownership to root:games with group-writable permissions
chown -R root:games "$mountPoint/opt/audiogame-manager"
chmod -R 775 "$mountPoint/opt/audiogame-manager"
@@ -1393,7 +1441,13 @@ EOF
cat > "$mountPoint/usr/local/bin/audiogame-manager" <<'EOF'
#!/usr/bin/env bash
cd /opt/audiogame-manager || exit 1
# Set umask for group-writable files
umask 002
# Try to update - only members of games group can write
git pull --quiet 2>/dev/null || true
./audiogame-manager.sh "$@"
EOF
chmod 755 "$mountPoint/usr/local/bin/audiogame-manager"

View File

@@ -25,7 +25,8 @@ Architecture = auto
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
# Protect Stormux custom skel files from being overwritten by package updates
NoUpgrade = etc/skel/.bashrc etc/skel/.inputrc etc/skel/.screenrc etc/skel/.vimrc etc/skel/.vim/*
#NoExtract =
# Misc options
@@ -79,10 +80,6 @@ LocalFileSigLevel = Optional
SigLevel = Required DatabaseOptional
Server = https://packages.stormux.org/$arch
[xlibre]
SigLevel = Required DatabaseOptional
Server = https://x11libre.net/repo/arch_based/$arch
[core]
Include = /etc/pacman.d/mirrorlist