much of this setup has been in use for a decade and still proves its value each day.
linux boots to a login console. after login, a luks partition (or file /home/.{username}) is decrypted and mounted to /home/{username} using pam_mount. since the users shell is configured to be bash, the contents of .bash_profile are executed, where startx is called to run an xserver instance which executes the contents of .xinitrc, where the window manager is started.
dwm handles the arrangement of xserver windows and is configured to draw no borders and with a monospace font. dwm-show-info from sph-script displays time and date.
switching between desktops in dwm is particularly fast, uninterrupted, and consistent.
custom, non-standard, keyboard shortcuts:
the most important commands are bound to fn keys.
st started with a screen session for tabs/multiplexing in any environment. st -e screen
.
ctrl+a c
creates new terminal buffers, ctrl+a p
and ctrl+a n
switch between them. this is extremely fast and surprisingly easy to physically execute, and works even on remote shells. it shows that virtual terminals do not need tab support (with keybindings for it differing between terminals).
extensive use of thunars easily configurable custom right click commands. for example: splice, rate, group, and move-up.
batch renaming: when multiple files are selected, right-click -> rename will open a featureful batch renamer which can also be started with "thunar -B", "thunar -B *", or "find . | thunar -B".
the prompt is the basename of the current directory on its own line in magenta
example session:
~ echo test test ~ cd /usr/bin bin ls guile guile bin
~/.bash_profile
if test "$(tty)" == /dev/tty1 then exec startx fi
~/.xinitrc
xmodmap /home/nonroot/.xmodmap xbindkeys & st -e screen & dwm
~/.xbindkeysrc.scm
(xbindkey (quote (F1)) "firefox") (xbindkey (quote (F2)) "thunar") (xbindkey (quote (F3)) "st -e screen") (xbindkey (quote (F4)) "dmenu_run") (xbindkey (quote (F5)) "screenshot")
~/.xmodmap
remove lock = Caps_Lock remove shift = Shift_R Shift_L add mod1 = Shift_R remove mod1 = Alt_L Alt_R
/etc/bash.bashrc
# custom colors for ls # light #LS_COLORS='rs=0:di=04;30:ln=01;30:pi=34;01:so=00:do=00:bd=40;33;01:cd=00:or=01;31:su=00:sg=00:tw=00:ow=00;30:st=00:ex=40;37:*.tar=00;33:*.tgz=00;33:*.lzma=00;33:*.zip=00;33:*.z=00;33:*.gz=00;33:*.bz2=00;33:*.bz=00;33:*.tbz2=00;33:*.tz=00;33:*.deb=00;33:*.rpm=00;33:*.jar=00;33:*.rar=00;33:*.cpio=00;33:*.7z=00;33:*.jpg=00;32:*.jpeg=00;32:*.gif=00;32:*.bmp=00;32:*.tif=00;32:*.tiff=00;32:*.png=00;32:*.svg=00;32:*.svgz=00;32:*.xcf=00;32:*.pcx=00;32:*.mov=00;36:*.mpg=00;36:*.mpeg=00;36:*.m2v=00;36:*.mkv=00;36:*.ogm=00;36:*.mp4=00;36:*.m4v=00;36:*.vob=00;36:*.wmv=00;36:*.asf=00;36:*.avi=00;36:*.flv=00;36:*.aac=00;35:*.flac=00;35:*.mid=00;35:*.midi=00;35:*.mka=00;35:*.mp3=00;35:*.mpc=00;35:*.ogg=00;35:*.wav=00;35:*.scm=00;34:*.rb=00;31:*.txt=00;30:*.pdf=00;34:*.doc=00;34:'; # dark export LS_COLORS='rs=0:di=04;37:ln=01;37:pi=34;01:so=00:do=00:bd=40;33;01:cd=00:or=00;31:su=00:sg=00:tw=00:ow=00;37:st=00:ex=00;37:*.tar=00;33:*.tgz=00;33:*.xz=00;33:*.lzma=00;33:*.zip=00;33:*.tar.zst=00;33:*.z=00;33:*.gz=00;33:*.bz2=00;33:*.bz=00;33:*.tbz2=00;33:*.tz=00;33:*.deb=00;33:*.rpm=00;33:*.jar=00;33:*.rar=00;33:*.cpio=00;33:*.7z=00;33:*.jpg=00;32:*.jpeg=00;32:*.gif=00;32:*.bmp=00;32:*.tif=00;32:*.tiff=00;32:*.png=00;32:*.svg=00;32:*.svgz=00;32:*.xcf=00;32:*.pcx=00;32:*.mov=00;36:*.mpg=00;36:*.mpeg=00;36:*.m2v=00;36:*.mkv=00;36:*.ogm=00;36:*.mp4=00;36:*.m4v=00;36:*.vob=00;36:*.wmv=00;36:*.asf=00;36:*.avi=00;36:*.flv=00;36:*.aac=00;35:*.flac=00;35:*.mid=00;35:*.midi=00;35:*.mka=00;35:*.mp3=00;35:*.mpc=00;35:*.ogg=00;35:*.wav=00;35:*.scm=00;37:*.rb=00;31:*.txt=00;37:*.pdf=00;37:*.doc=00;37:'; export HISTCONTROL='ignoreboth:erasedups' # ignore duplicate commands from shell history export TERM=xterm-256color # make most terminals use 256 colors export PS1="\e[0;35m\W\e[m\n " # set the prompt export PROMPT_COMMAND='echo -ne "\033]0;${HOSTNAME}\007"' # terminal window title export EDITOR=nano umask 0077 # relatively restrictive default permissions for new files (600) unset HISTFILE # disable the .bash_history file. cycling through previous commands of the current session still works
~/.config/gtk-3.0/settings.ini
[Settings] gtk-theme-name=Windows-10-Dark gtk-icon-theme-name=HighContrast gtk-font-name=Cantarell 11 gtk-cursor-theme-name=Adwaita gtk-cursor-theme-size=0 gtk-cursor-blink = false gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=0 gtk-enable-input-feedback-sounds=0 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle=hintmedium
~/.gtkrc-2.0 (can be managed with lxappearance)
gtk-cursor-blink = 0 include "/home/nonroot/.gtkrc-2.0.mine" gtk-theme-name="Windows-10-Dark" gtk-icon-theme-name="HighContrast" gtk-font-name="Cantarell 11" gtk-cursor-theme-name="Adwaita" gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=0 gtk-enable-input-feedback-sounds=0 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle="hintmedium"
~/.config/qt6ct/qt6ct.conf, ~/.config/qt6ct/qt5ct.conf
[Interface] cursor_flash_time=0
stored in a git repository with a file structure like this
data {hostname} ... {root-relative-full-paths}
symlinked to target destinations with "cp -rst / $PWD/data/hostname/*"