diff --git a/.xonshrc b/.xonshrc index 2e6df89..86c71dd 100644 --- a/.xonshrc +++ b/.xonshrc @@ -8,57 +8,22 @@ elif $HOSTNAME == "riley-desktop": $XONSH_COLOR_STYLE = 'default' xontrib load argcomplete autovox jedi z bashisms -class CommandNotFoundException(Exception): - def __init__(self, command): - super().__init__(f"Command '{command}' not found.") - -# Windows Subsystem for Linux stuff - -def in_wsl() -> bool: - version = p'/proc/version'.read_text() - if "microsoft" in version: - return True - return False - -if in_wsl(): - $GPG_TTY=$(tty) - -def to_clipboard(text: str): - if in_wsl(): - $(echo -n @(text) | clip.exe) - else: - requires("xclip") - $(echo -n @(text) | xclip -sel clipboard) - -def requires(command: str): - if not !(which @(command)): - raise CommandNotFoundException(command) - return True - -# path stuff - -def load_path(): - import sys - $PATH.extend([ - '~/addins', - '~/.local/bin', - '~/bin', - '~/go/bin', - '~/.deno/bin', - ]) - sys.path.insert(0, '') - -load_path() +source "functions.xsh" +source "exceptions.xsh" +source "aliases.xsh" # TODO: Fix with Arch-based distros # import addins # my extra stuffs :p -def _colortest(): - import sys - for i in range(256): - sys.stdout.write(f"\033[48;5;{i}m ") - if (i+1) % 16 == 0: - sys.stdout.write("\033[0m\n") +# Windows Subsystem for Linux stuff +if in_wsl(): + $GPG_TTY=$(tty) # allows gpg to work inside WSL + +# path stuff +append_path("~/addins") +append_path("~/.local/bin") +append_path("~/bin") +append_path("~/go/bin") # tmux try: @@ -70,110 +35,6 @@ try: except CommandNotFoundException: pass -# debug -def _debug(): - if $XONSH_SHOW_TRACEBACK: - $XONSH_SHOW_TRACEBACK = False - print("Debug mode disabled.") - else: - $XONSH_SHOW_TRACEBACK = True - print("Debug mode enabled.") - -# bitwarden shit -def bw_get(object: str, bw_id: str, nulled: bool = False): - if nulled: - return !(bw get @(object) @(bw_id) a> /dev/null) - return $(bw get @(object) @(bw_id)) - -def _bwc(args: list): - requires("bw") - if not p'~/.bw_session'.exists(): - raise FileNotFoundError("~/.bw_session") - source ~/.bw_session - - if args[0] == "full": # determine which keys to search for. - items = ["username", "password", "totp"] - elif args[0] == "password": - items = ["password", "totp"] - else: - items = [args[0]] - - for i in items: # removes keys that don't exist for the object. - if not bw_get(i, args[1], True): - items.remove(i) - - print(f"found: {', '.join(items)}") - for i in items: # actually copy the info to clipboard. - output = bw_get(i, args[1]) - to_clipboard(output) - if items.index(i) < len(items) - 1: - input(f"copied {i}, press enter to continue") - else: - print(f"copied {i}") - -def _ensure_tmux(args: list): - if $XONSH_SHOW_TRACEBACK: - print(args) - if not $(tmux has-session -t @(args[0])): - tmux new-session -d -s @(args[0]) all> /dev/null - $(tmux send-keys -t @(args[0]) @(f"cd {args[1]}") C-m) - $(tmux send-keys -t @(args[0]) @(f"{args[2]}") C-m) - -def _alias(): - for alias in aliases: - if callable(aliases[alias]): - print(alias + " = ", aliases[alias].__name__) - else: - print(alias + " =", " ".join(aliases[alias])) - -def _mcrcon(args: list): - if p"~/.mcrcon".exists(): - source "~/.mcrcon" - else: - raise FileNotFoundError("~/.mcrcon") - $(mcrcon @(" ".join(args))) - -def _mcterm(): - if p"~/.mcrcon".exists(): - source "~/.mcrcon" - else: - raise FileNotFoundError("~/.mcrcon") - mcrcon -t - -def _add_system_user(args: list): - """used to add a system user for systemd services""" - $(adduser --system --home @(args[1])) - $(addgroup --system @(args[0])) - $(adduser @(args[0]) @(args[0])) - -# aliases -aliases.update({ - 'bwg': _bwc, - 'bwc': _bwc, - 'colortest': _colortest, - 'config': '/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME', - 'debug': _debug, - 'ls': 'ls -alhs --color=auto', - 'mc': _mcrcon, - 'mct': _mcterm, - ':q': 'exit', - 'owo': 'echo uwu', - 'awa': 'echo ewe', - 'ewe': 'echo iwi', - 'iwi': 'echo awa', - 'uwu': 'echo owo', - 'ywy': 'echo whywhy', - 'ensure-tmux': _ensure_tmux, - 'alias': _alias, - 'asu': _add_system_user, - 'l': '/home/riley/programs/light_controller/main.py' -}) - -if in_wsl(): - aliases.update({ - 'wh': "cd /mnt/c/Users/Riley" - }) - # man page colors :O $LESS_TERMCAP_mb = "\033[01;31m" # begin blinking $LESS_TERMCAP_md = "\033[01;31m" # begin bold @@ -181,3 +42,4 @@ $LESS_TERMCAP_me = "\033[0m" # end mode $LESS_TERMCAP_so = "\033[01;44;36m" # begin standout-mode (bottom of screen) $LESS_TERMCAP_se = "\033[0m" # end standout-mode +load_aliases() \ No newline at end of file diff --git a/aliases.xsh b/aliases.xsh new file mode 100644 index 0000000..a0e4eff --- /dev/null +++ b/aliases.xsh @@ -0,0 +1,104 @@ +source "functions.xsh" + +def _debug(): + if $XONSH_SHOW_TRACEBACK: + $XONSH_SHOW_TRACEBACK = False + print("Debug mode disabled.") + else: + $XONSH_SHOW_TRACEBACK = True + print("Debug mode enabled.") + +def bw_get(object: str, bw_id: str, nulled: bool = False): + if nulled and in_win(): + return !(bw get @(object) @(bw_id) a> nul) + elif nulled and not in_win(): + return !(bw get @(object) @(bw_id) a> /dev/null) + return $(bw get @(object) @(bw_id)) + +def _bwc(args: list): + requires("bw") + if not p'~/.bw_session'.exists(): + raise FileNotFoundError("~/.bw_session") + source ~/.bw_session + + if args[0] == "full": # determine which keys to search for. + items = ["username", "password", "totp"] + elif args[0] == "password": + items = ["password", "totp"] + else: + items = [args[0]] + + for i in items: # removes keys that don't exist for the object. + if not bw_get(i, args[1], True): + items.remove(i) + + print(f"found: {', '.join(items)}") + for i in items: # actually copy the info to clipboard. + output = bw_get(i, args[1]) + to_clipboard(output) + if items.index(i) < len(items) - 1: + input(f"copied {i}, press enter to continue") + else: + print(f"copied {i}") + +def _mcrcon(args: list): + if p"~/.mcrcon".exists(): + source "~/.mcrcon" + else: + raise FileNotFoundError("~/.mcrcon") + $(mcrcon @(" ".join(args))) + +def _mcterm(): + if p"~/.mcrcon".exists(): + source "~/.mcrcon" + else: + raise FileNotFoundError("~/.mcrcon") + mcrcon -t + +def _alias(): + for alias in aliases: + if callable(aliases[alias]): + print(alias + " = ", aliases[alias].__name__) + else: + print(alias + " =", " ".join(aliases[alias])) + +def _ensure_tmux(args: list): + if $XONSH_SHOW_TRACEBACK: + print(args) + if not $(tmux has-session -t @(args[0])): + tmux new-session -d -s @(args[0]) all> /dev/null + $(tmux send-keys -t @(args[0]) @(f"cd {args[1]}") C-m) + $(tmux send-keys -t @(args[0]) @(f"{args[2]}") C-m) + +def _colortest(): + import sys + for i in range(256): + sys.stdout.write(f"\033[48;5;{i}m ") + if (i+1) % 16 == 0: + sys.stdout.write("\033[0m\n") + +def load_aliases(): + aliases.update({ + 'bwg': _bwc, + 'colortest': _colortest, + 'config': '/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME', + 'debug': _debug, + 'ls': 'ls -alhs --color=auto', + 'mc': _mcrcon, + 'mct': _mcterm, + ':q': 'exit', + 'ensure-tmux': _ensure_tmux, + 'aliases': _alias, + }) + + # WSL specific aliases + if in_wsl(): + aliases.update({ + 'wh': "cd /mnt/c/Users/Riley", + }) + + # Windows specific aliases + if in_win(): + aliases.update({ + 'ls': $('dir') # get past namespace conflict with python's dir() function. + }) diff --git a/bin/pack b/bin/pack deleted file mode 100755 index 2b652be..0000000 --- a/bin/pack +++ /dev/null @@ -1,18 +0,0 @@ -make clean - -if [ -d "output" ] -then - rm -r output -fi - -if [ -f "work.zip" ] -then - rm work.zip -fi - -if [ -z "$1" ] -then - zip -r work.zip . -x "makefile" -else - zip -r work.zip $1 -x "makefile" -fi diff --git a/exceptions.xsh b/exceptions.xsh new file mode 100644 index 0000000..c491346 --- /dev/null +++ b/exceptions.xsh @@ -0,0 +1,3 @@ +class CommandNotFoundException(Exception): + def __init__(self, command): + super().__init__(f"Command '{command}' not found.") \ No newline at end of file diff --git a/functions.xsh b/functions.xsh new file mode 100644 index 0000000..713175e --- /dev/null +++ b/functions.xsh @@ -0,0 +1,40 @@ +source "exceptions.xsh" + +def in_wsl() -> bool: + """Determines if the system is running inside a WSL environment.""" + if in_win(): return False + + version = p'/proc/version'.read_text() + if "microsoft" in version: + return True + return False + +def in_win() -> bool: + """Determines if the system is running inside a Windows environment.""" + + if ${'OS'} == "Windows_NT": + return True + return False + +def to_clipboard(text: str): + """Send text to the clipboard.""" + if in_wsl() or in_win(): + $(echo -n @(text) | clip.exe) + else: + requires("xclip") + $(echo -n @(text) | xclip -sel clipboard) + +def requires(command: str): + """Force exit the program if a required command is not found.""" + if not !(which @(command)): + raise CommandNotFoundException(command) + return True + +def append_path(path: str): + """Append a path to the end of the system's PATH variable.""" + import sys + $PATH.extend([path]) + + # enables us to import and use modules in the current working directory + if sys.path[0] != '': + sys.path.insert(0, '') diff --git a/wallpapers/mushroom_glow_light.jpg b/wallpapers/mushroom_glow_light.jpg new file mode 100644 index 0000000..3dff270 Binary files /dev/null and b/wallpapers/mushroom_glow_light.jpg differ