Simply call like
generate_profile.py --debian
or
generate_profile.py --fedora
It will overwrite your ~/.profile and ~/.bashrc, so backup it if you need things in it.
#!/usr/bin/env python3 | |
import sys | |
import os | |
def ident(txt: str): | |
return txt.replace(' ', '').replace('\t', ' ').strip() | |
def generate_profile(os: str): | |
xs = ['#!/bin/bash', 'export HOME=~', 'umask 077', | |
'alias ccat="pygmentize -g"', 'alias pip="pip2"'] | |
if os == 'macos': | |
xs += ['alias ls="ls -G"', | |
'alias mysql_start="brew services start mysql"', | |
'alias mysql_stop="brew services stop mysql"' | |
'alias postgres_start="brew services start postgres"', | |
'alias postgres_stop="brew services stop postgres"', | |
'alias ct="rm -r ${HOME}/.Trash/*"' | |
r'alias rep="resize -s 24 80 &>/dev/null;printf \'\e[3;0;0t\';clear"', | |
r'alias rep2="resize -s 24 155 &>/dev/null;printf \'\e[3;500;0t\';clear"', | |
r'alias rep3="resize -s 34 80 &>/dev/null;printf \'\e[3;0;370t\';clear"', | |
r'alias rep4="resize -s 34 155 &>/dev/null;printf \'\e[3;500;370t\';clear"', | |
'alias fv="resize -s 60 155 &>/dev/null;printf \'\e[3;500;0t\';clear"'] | |
else: | |
xs += ['alias ls="ls --color=auto"'] | |
xs += [ | |
ident(''' | |
function add_to_path_if_exists() | |
{ | |
\tif [[ -d "$1" ]] | |
\tthen | |
\t\texport PATH=$PATH:$1 | |
\tfi | |
} | |
''')] | |
if os == 'macos': | |
xs += ['old_ifs=$IFS', | |
'IFS=:', | |
'qt=(${HOME}/Qt/*/clang_64/bin)', | |
'export PATH=$PATH:"${qt[*]}"', | |
'IFS=$old_ifs'] | |
xs += [ | |
'add_to_path_if_exists ${HOME}/bin', | |
'add_to_path_if_exists ${HOME}/.config/yarn/global/node_modules/.bin', | |
'export PYTHON=$(which python3)', | |
'export LC_ALL=en_US.UTF-8', | |
'export LANG=$LC_ALL', | |
'export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/opt/openblas/lib/pkgconfig"', | |
ident(''' | |
function tbz() | |
{ | |
\ttar -c "$(basename "$1")" | bzip2 -9 > "$(basename "$1").tbz" | |
} | |
function tgz() | |
{ | |
\ttar -c "$(basename "$1")" | gzip -9 > "$(basename "$1").tgz" | |
} | |
function txz() | |
{ | |
\ttar -c "$(basename "$1")" | xz -9 -T 0 > "$(basename "$1").txz" | |
} | |
function zipup() | |
{ | |
\tzip -9 -r "$(basename "$1")" "$(basename "$1")" | |
} | |
if [ -f /etc/bash_completion ]; then | |
\tsource /etc/bash_completion | |
fi | |
''')] | |
xs += [ident(''' | |
if [[ $- == *i* ]]; then | |
\texport PS1="\\[\\033[38;5;14m\\]\\W\\[$(tput sgr0)\\]\\[\\033[38;5;15m\\] \\[$(tput sgr0)\\]\\[\\033[38;5;2m\\]\\\\$\\[$(tput sgr0)\\]\\[\\033[38;5;15m\\] \\[$(tput sgr0)\\]" | |
fi | |
''')] | |
if os == 'macos': | |
xs += [ident( | |
''' | |
function pip-up() | |
{ | |
\tpip2 install --upgrade pip | |
\tpip2 list --outdated --no-cache-dir | awk 'FNR>2 {print $1}' | xargs pip2 install --no-cache-dir --upgrade | |
} | |
function pip3-up() | |
{ | |
\tpip3 install --upgrade pip | |
\tpip3 list --outdated --no-cache-dir | awk 'FNR>2 {print $1}' | xargs pip3 install --no-cache-dir --upgrade | |
} | |
function grid() | |
{ | |
\tif [ "$1" == "v" ] | |
\tthen | |
\t\tosascript ~/bin/grid.scpt vertical | |
\t\trep | |
\telif [ "$1" == "h" ] | |
\tthen | |
\t\tosascript ~/bin/grid.scpt horizontal | |
\t\trep | |
\telif [ "$1" == "v2" ] | |
\tthen | |
\t\tosascript ~/bin/grid.scpt vertical2 | |
\t\trep2 | |
\telif [ "$1" == "h2" ] | |
\tthen | |
\t\tosascript ~/bin/grid.scpt horizontal2 | |
\t\trep3 | |
\telse | |
\t\tosascript ~/bin/grid.scpt | |
\t\trep | |
\tfi | |
} | |
function pastecb() | |
{ | |
\tsleep 5 | |
\tosascript -e 'tell application "System Events" to keystroke the clipboard as text' | |
} | |
''')] | |
else: | |
xs += [ident( | |
''' | |
function pip-up() | |
{ | |
\tpip2 install --upgrade --user pip | |
\tpip2 list --outdated --no-cache-dir --user | awk 'FNR>2 {print $1}' | xargs pip2 install --no-cache-dir --upgrade --user | |
} | |
function pip3-up() | |
{ | |
\tpip3 install --upgrade pip --user | |
\tpip3 list --outdated --no-cache-dir --user | awk 'FNR>2 {print $1}' | xargs pip3 install --no-cache-dir --upgrade --user | |
} | |
''')] | |
xs += [ident(''' | |
if [[ $- == *i* ]] | |
then | |
\tbind '"\\e[A": history-search-backward' | |
\tbind '"\\e[B": history-search-forward' | |
fi | |
''')] | |
if os == 'debian': | |
xs += [ident(''' | |
function update() | |
{ | |
\tsudo apt update | |
\tsudo apt-get dist-upgrade -y | |
\tsudo apt-get autoremove -y | |
\tpip-up | |
\tpip3-up | |
} | |
''')] | |
elif os == 'fedora': | |
xs += [ident(''' | |
function update() | |
{ | |
\tsudo dnf distro-sync -y | |
\tsudo dnf autoremove -y | |
\tsudo dnf remove --duplicates --obsoletes -y | |
\tpip3-up | |
} | |
''')] | |
elif os == 'suse': | |
xs += [ident(''' | |
function update() | |
{ | |
\tsudo zypper dup -y | |
\tpip3-up | |
} | |
''')] | |
elif os == 'arch': | |
xs += [ident(''' | |
function update() | |
{ | |
\taur sync -u | |
\tsudo pacman -Syu | |
\tpip3-up | |
} | |
''')] | |
return '\n'.join(xs) | |
if __name__ == '__main__': | |
args = sys.argv[1:] | |
ds = ['debian', 'fedora', 'suse', 'arch', 'macos'] | |
ds = [d for d in ds if f'--{d}' in args] | |
if len(ds) != 1: | |
print('Specify one of:') | |
print('\t--debian: For Debian based distros (Debian, Ubuntu, Mint, etc)') | |
print('\t--fedora: For Fedora based distros') | |
print('\t--suse: For SUSE based distros (SUSE, OpenSUSE)') | |
print('\t--arch: For Arch based distros') | |
print('\t--macos: For macOS') | |
print('### THIS COMMAND WILL OVERWRITE ~/.bashrc AND ~/.profile ###') | |
exit(0) | |
distro = ds[0] | |
print(f'Generating .profile and .bashrc for {distro}') | |
with open(os.path.expanduser('~/.profile'), 'tw') as profile: | |
profile.write(generate_profile(distro)) | |
with open(os.path.expanduser('~/.bashrc'), 'tw') as bashrc: | |
bashrc.write('source ~/.profile') |
Simply call like
generate_profile.py --debian
or
generate_profile.py --fedora
It will overwrite your ~/.profile and ~/.bashrc, so backup it if you need things in it.