├── .Xresources ├── .assets ├── cl ├── libs │ ├── bash │ │ ├── detect-init-system │ │ ├── detect-platform │ │ └── select-prompter │ └── node.js ├── mullvad-browser.desktop ├── parsers │ ├── bt-parser.lisp │ └── xrandr-parser.lisp ├── services │ ├── ollama-runit │ │ └── run │ ├── ollama-systemd │ ├── runsvdir-ismail │ │ └── run │ └── syncthing │ │ └── run └── sounds │ ├── car-revving-sound.mp3 │ └── car-startup-sound.mp3 ├── .bash_profile ├── .bashrc ├── .bin ├── linux │ ├── mt-archive │ ├── mt-audio-boost │ ├── mt-battery-prepare-for-travel │ ├── mt-battery-set-charge-thresholds │ ├── mt-bluetooth │ ├── mt-brightness-mode │ ├── mt-color-temperature-mode │ ├── mt-desktop-mode │ ├── mt-display-mode │ ├── mt-display-orientation │ ├── mt-flatpak │ ├── mt-gpu-mode │ ├── mt-hardware │ ├── mt-media │ ├── mt-network-cloak │ ├── mt-network-reset │ ├── mt-power-mode │ ├── mt-run-if-not-running │ ├── mt-session-lock │ ├── mt-session-lock-desktop │ ├── mt-session-quit │ ├── mt-set-random-wallpaper │ ├── mt-system-update │ └── mt-timezone-switch ├── mac │ ├── mt-power-mode │ └── mt-system-update ├── mt-connect-ssh ├── mt-find-duplicates ├── mt-find-duplicates-obvious ├── mt-get-machine ├── mt-list-contents ├── mt-llm-generate ├── mt-llm-query ├── mt-llm-transform ├── mt-llm-youtube ├── mt-ollama-remote ├── mt-purchase-max-bid ├── mt-purchase-total-cost ├── mt-repeat ├── mt-speak └── mt-sync-projects ├── .config ├── bash │ ├── config │ ├── config-linux │ └── config-mac ├── emacs │ ├── ellama-sessions │ ├── init.el │ ├── snippets │ │ ├── fundamental-mode │ │ │ ├── alhamd │ │ │ ├── date │ │ │ ├── insha │ │ │ ├── jazak │ │ │ ├── masha │ │ │ ├── salaam │ │ │ └── wasalaam │ │ └── org-mode │ │ │ ├── chapter │ │ │ ├── part │ │ │ └── section │ ├── user.el │ └── zone-quotes-masseffect.el ├── fish │ ├── config-linux.fish │ ├── config-mac.fish │ ├── config.fish │ └── functions │ │ ├── add-to-path.fish │ │ ├── cx.fish │ │ └── fish_prompt.fish ├── foot │ └── foot.ini ├── gtk-3.0 │ ├── bookmarks │ └── settings.ini ├── rofi │ └── config.rasi ├── waybar │ ├── config │ └── style.css └── wm │ ├── common │ ├── i3 │ ├── i3status-1.conf │ ├── i3status-2.conf │ └── sway ├── .face ├── .face.icon ├── .gitconfig ├── .gitignore ├── .gitignore_global ├── .gtkrc-2.0 ├── .mew.el ├── .scripts └── linux │ └── startup │ ├── cli │ ├── desktop │ ├── apps │ ├── audio │ ├── display │ ├── input │ └── run │ └── launch-apps ├── .setup ├── docs │ ├── install-void.md │ ├── releasing-a-machine.org │ ├── setting-up-a-new-machine.org │ └── switching-to-a-new-platform.org ├── forge-config.lisp ├── hardware │ ├── configure-default-display-brightness │ ├── configure-default-sound-volume │ ├── configure-dpi-for-wayland │ ├── configure-dpi-for-xorg │ ├── configure-fingerprints │ ├── configure-screen-color-temp │ ├── configure-touchpad-for-wayland │ ├── configure-touchpad-for-xorg │ ├── configure-trackpoint-for-wayland │ ├── configure-trackpoint-for-xorg │ └── void │ │ ├── configure-power-management │ │ ├── configure-pulseeffects │ │ ├── machines │ │ ├── dell-precision-t3600 │ │ ├── thinkpad-t15g-g2 │ │ ├── thinkpad-t420s │ │ ├── thinkpad-t440p │ │ ├── thinkpad-t470 │ │ ├── thinkpad-t61p │ │ ├── thinkpad-w530 │ │ ├── thinkpad-x1-carbon-g5 │ │ ├── thinkpad-x1-carbon-g7 │ │ ├── thinkpad-x1-extreme-g3 │ │ ├── thinkpad-x1-nano-g1 │ │ ├── thinkpad-x1-yoga-g1 │ │ ├── thinkpad-x1-yoga-g3 │ │ ├── thinkpad-x201 │ │ ├── thinkpad-x220 │ │ ├── thinkpad-x230 │ │ ├── thinkpad-x260 │ │ ├── thinkpad-x280 │ │ ├── thinkpad-x301 │ │ └── thinkpad-x61s │ │ ├── mesa │ │ ├── nvidia-latest │ │ ├── nvidia-legacy-390 │ │ ├── nvidia-legacy-470 │ │ └── nvidia-optimus ├── other │ ├── macos │ │ ├── docker │ │ └── rust │ └── void │ │ ├── docker │ │ └── rust └── start ├── .tmux.conf ├── .xinitrc ├── LICENSE ├── README.org └── bootstrap /.Xresources: -------------------------------------------------------------------------------- 1 | !! Colors 2 | *.foreground: #93a1a1 3 | *.background: #001b1b 4 | *.cursorColor: #afbfbf 5 | ! Black 6 | *.color0: #010101 7 | *.color8: #5b5b5b 8 | ! Red 9 | *.color1: #bd5243 10 | *.color9: #d6908b 11 | ! Green 12 | *.color2: #88ab39 13 | *.color10: #c3e264 14 | ! Yellow 15 | *.color3: #c5a739 16 | *.color11: #f2d771 17 | ! Blue 18 | *.color4: #4a899e 19 | *.color12: #94cee4 20 | ! Magenta 21 | *.color5: #be98c6 22 | *.color13: #eea8ec 23 | ! Cyan 24 | *.color6: #207f8c 25 | *.color14: #71d4cd 26 | ! White 27 | *.color7: #a7a7a7 28 | *.color15: #eaeaea 29 | 30 | !! URxvt 31 | URxvt.font: xft:robotomono:size=14 32 | URxvt.cursorBlink: true 33 | URxvt.scrollBar: false 34 | URxvt.scrollBar_right: false 35 | URxvt.keysym.Shift-Up: command:\033]720;1\007 36 | URxvt.keysym.Shift-Down: command:\033]721;1\007 37 | URxvt.keysym.Shift-Control-V: perl:clipboard:paste 38 | URxvt.iso14755: False 39 | URxvt.keysym.C-minus: resize-font:smaller 40 | URxvt.keysym.C-plus: resize-font:bigger 41 | URxvt.keysym.C-equal: resize-font:reset 42 | URxvt.keysym.C-question: resize-font:show 43 | URxvt.perl-ext-common: default,clipboard,resize-font -------------------------------------------------------------------------------- /.assets/cl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sbcl --script $(readlink -f ${1} | xargs realpath) ${@:2} 4 | -------------------------------------------------------------------------------- /.assets/libs/bash/detect-init-system: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_init_system="Unknown" 4 | 5 | if [ $(command -v systemctl) ]; then 6 | mt_init_system="SystemD" 7 | elif [ $(command -v sv) ]; then 8 | mt_init_system="Runit" 9 | fi 10 | -------------------------------------------------------------------------------- /.assets/libs/bash/detect-platform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_platform="Unknown" 4 | 5 | if [[ -f /bedrock/etc/bedrock-release ]]; then 6 | mt_platform="Bedrock" 7 | elif [ $(command -v xbps-query) ]; then 8 | mt_platform="Void" 9 | elif [ $(command -v pacman) ]; then 10 | mt_platform="Arch" 11 | elif [ $(command -v dnf) ]; then 12 | mt_platform="Fedora" 13 | elif [[ $(cat /etc/os-release | grep '^ID=' | cut -d '=' -f 2 | cut -d '"' -f 2) == "pop" ]]; then 14 | mt_platform="Pop" 15 | elif [ $(command -v apt) ]; then 16 | mt_platform="Debian" 17 | fi 18 | -------------------------------------------------------------------------------- /.assets/libs/bash/select-prompter: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if ! [[ $DISPLAY ]]; then 4 | mt_prompter="fzf" 5 | else 6 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 7 | mt_prompter="fuzzel -d" 8 | else 9 | mt_prompter="rofi -dmenu" 10 | fi 11 | fi 12 | -------------------------------------------------------------------------------- /.assets/libs/node.js: -------------------------------------------------------------------------------- 1 | /* global require module */ 2 | 3 | const { lstatSync, readdirSync, writeFileSync } = require('fs'); 4 | const { join } = require('path'); 5 | 6 | const inflateInput = (inputDirs, parentDir = '/') => 7 | inputDirs.map( 8 | inputDir => 9 | ( 10 | item => 11 | lstatSync(item).isDirectory() 12 | ? inflateInput(readdirSync(item), item) 13 | : [item] 14 | )(join(parentDir, inputDir)) 15 | ).reduce( 16 | (a, c) => a.concat(c), 17 | [] 18 | ); 19 | 20 | const getFileStats = filePath => { 21 | const elements = filePath.split('/'); 22 | 23 | return [ 24 | elements.slice(0, elements.length - 1).join('/'), 25 | elements[elements.length - 1], 26 | lstatSync(filePath).size 27 | ]; 28 | }; 29 | 30 | const getVerticalList = inputArray => 31 | inputArray.reduce((a, c) => a ? `${a}\n${c}` : c, ''); 32 | 33 | // TODO: Remove unused function 34 | const writeToFile = (filePath, text) => { 35 | writeFileSync(filePath, text); 36 | console.log(`\nList stored in file: ${filePath}`); 37 | }; 38 | 39 | module.exports.inflateInput = inflateInput; 40 | module.exports.getFileStats = getFileStats; 41 | module.exports.getVerticalList = getVerticalList; 42 | module.exports.writeToFile = writeToFile; 43 | -------------------------------------------------------------------------------- /.assets/mullvad-browser.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Mullvad Web Browser 4 | GenericName=Web Browser 5 | Type=Application 6 | Categories=Network;WebBrowser; 7 | Icon=/home/ismail/_store/Vault/binaries/mullvad-browser/Browser/browser/chrome/icons/default/about-logo.svg 8 | Exec=mullvad-browser %u 9 | MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp; -------------------------------------------------------------------------------- /.assets/parsers/bt-parser.lisp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/sbcl --script 2 | 3 | (defun get-device-id-and-name (arguments index) 4 | "Gets device name at index from among arguments." 5 | (let* ((remaining-sequence (subseq arguments index)) 6 | (end-position (position "Device" remaining-sequence :test 'string-equal))) 7 | (subseq remaining-sequence 8 | 0 9 | (or end-position 10 | (length remaining-sequence))))) 11 | 12 | (defun get-device-info (arguments) 13 | "Gets device id and name pairs." 14 | (let ((index 0)) 15 | (remove-if #'null 16 | (mapcar (lambda (p) 17 | (incf index) 18 | (if (equal "Device" p) 19 | (get-device-id-and-name arguments index) 20 | nil)) 21 | arguments)))) 22 | 23 | (defun main (arguments) 24 | "The main entry point of the program." 25 | (let* ((id-name-pairs (get-device-info arguments))) 26 | (princ (reduce (lambda (a b) 27 | (concatenate 'string a "\\n" b)) 28 | (mapcar (lambda (elements) 29 | (reduce (lambda (a b) 30 | (concatenate 'string a " " b)) 31 | elements)) 32 | id-name-pairs))))) 33 | 34 | ;; Start 35 | (main (cdr *posix-argv*)) 36 | -------------------------------------------------------------------------------- /.assets/parsers/xrandr-parser.lisp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/sbcl --script 2 | 3 | (defun get-device-names (arguments state) 4 | "Gets device id and name pairs." 5 | (let ((index 0)) 6 | (remove-if #'null 7 | (mapcar (lambda (p) 8 | (incf index) 9 | (if (equal state p) 10 | (nth (- index 2) arguments) 11 | nil)) 12 | arguments)))) 13 | 14 | (defun main (arguments) 15 | "The main entry point of the program." 16 | (let* ((choice (car arguments)) 17 | (devices-info (cdr arguments)) 18 | (connected-devices (get-device-names devices-info "connected")) 19 | (primary-device (car connected-devices)) 20 | (disconnected-devices (get-device-names devices-info "disconnected"))) 21 | (princ (cond ((string-equal choice "connected") connected-devices) 22 | ((string-equal choice "disconnected") disconnected-devices) 23 | (t primary-device))))) 24 | 25 | ;; Start 26 | (main (cdr *posix-argv*)) 27 | -------------------------------------------------------------------------------- /.assets/services/ollama-runit/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | exec /home/ismail/_store/Vault/binaries/ollama serve 1>/dev/null 4 | -------------------------------------------------------------------------------- /.assets/services/ollama-systemd: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Ollama service 3 | StartLimitIntervalSec=0 4 | 5 | [Service] 6 | User=ismail 7 | Restart=always 8 | RestartSec=1 9 | ExecStart=/home/ismail/_store/Vault/binaries/ollama serve 10 | 11 | [Install] 12 | WantedBy=default.target -------------------------------------------------------------------------------- /.assets/services/runsvdir-ismail/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export USER=ismail 4 | export HOME="/home/$USER" 5 | 6 | groups="$(id -Gn "$USER" | tr ' ' ':')" 7 | svdir="$HOME/.services" 8 | 9 | exec chpst -u "$USER:$groups" runsvdir "$svdir" -------------------------------------------------------------------------------- /.assets/services/syncthing/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | exec syncthing 1>/dev/null 4 | -------------------------------------------------------------------------------- /.assets/sounds/car-revving-sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myTerminal/dotfiles/9e64cf089e1a3bfa12692295276b8c7a26965686/.assets/sounds/car-revving-sound.mp3 -------------------------------------------------------------------------------- /.assets/sounds/car-startup-sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myTerminal/dotfiles/9e64cf089e1a3bfa12692295276b8c7a26965686/.assets/sounds/car-startup-sound.mp3 -------------------------------------------------------------------------------- /.bash_profile: -------------------------------------------------------------------------------- 1 | # Run startup script(s) 2 | if [ -f ~/.mt-tag ]; then 3 | . ~/.scripts/linux/startup/cli 4 | fi 5 | 6 | # Source .bashrc file if present 7 | if [ -f ~/.bashrc ]; then 8 | . ~/.bashrc 9 | fi 10 | -------------------------------------------------------------------------------- /.bashrc: -------------------------------------------------------------------------------- 1 | # Source bash config file if present 2 | if [ -f ~/.config/bash/config ]; then 3 | . ~/.config/bash/config 4 | fi 5 | -------------------------------------------------------------------------------- /.bin/linux/mt-archive: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | command=${1} 4 | 5 | if [ "${command}" == "do" ]; then 6 | 7 | if [[ $# -lt 3 ]]; then 8 | echo "Usage: mt-archive do " 9 | exit 1 10 | fi 11 | 12 | operation=${2} 13 | arguments=${@:3} 14 | filename="${arguments%%.*}" 15 | 16 | case "${operation}" in 17 | zip) 18 | zip -r "${filename}.zip" $arguments 19 | ;; 20 | 21 | tar) 22 | tar -cvzf "${filename}.tar.gz" $arguments 23 | ;; 24 | 25 | *) 26 | echo "Not implemented!" 27 | ;; 28 | esac 29 | elif [ "${command}" == "undo" ]; then 30 | 31 | if [[ $# -lt 2 ]]; then 32 | echo "Usage: mt-archive undo " 33 | exit 1 34 | fi 35 | 36 | arguments=${@:2} 37 | extension=${arguments#*.} 38 | 39 | case "${extension}" in 40 | zip) 41 | unzip "${arguments}" 42 | ;; 43 | 44 | tar) 45 | tar -xvzf "${arguments}" 46 | ;; 47 | 48 | tar.xz) 49 | tar -xvf "${arguments}" 50 | ;; 51 | 52 | tar.gz) 53 | tar -xvzf "${arguments}" 54 | ;; 55 | 56 | gz) 57 | gzip -dk "${arguments}" 58 | ;; 59 | 60 | rar) 61 | unrar e "${arguments}" 62 | ;; 63 | 64 | 7z) 65 | 7zip e "${arguments}" 66 | ;; 67 | 68 | *) 69 | echo "Not implemented!" 70 | ;; 71 | esac 72 | else 73 | echo "Usage: mt-archive " 74 | fi 75 | -------------------------------------------------------------------------------- /.bin/linux/mt-audio-boost: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Start pulseeffects 4 | pulseeffects --gapplication-service & 5 | -------------------------------------------------------------------------------- /.bin/linux/mt-battery-prepare-for-travel: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Disable charge thresholds temporarily 4 | mt-battery-set-charge-thresholds 96 100 5 | 6 | # Wait for user input 7 | read -n1 -r -p "Press any key when ready to stop charging..." 8 | 9 | # Set charge thresholds again 10 | mt-battery-set-charge-thresholds $1 $2 11 | -------------------------------------------------------------------------------- /.bin/linux/mt-battery-set-charge-thresholds: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | start="${1:-75}" 4 | stop="${2:-80}" 5 | 6 | # Function to set battery thresholds for newer systems 7 | set-battery-thresholds-for-newer-systems () { 8 | basepath=/sys/class/power_supply 9 | for b in `fd BAT /sys/class/power_supply`; 10 | do 11 | echo 20 | sudo tee ${basepath}/$(basename $b)/charge_start_threshold 12 | echo 100 | sudo tee ${basepath}/$(basename $b)/charge_stop_threshold 13 | echo $start | sudo tee ${basepath}/$(basename $b)/charge_start_threshold 14 | echo $stop | sudo tee ${basepath}/$(basename $b)/charge_stop_threshold 15 | done 16 | } 17 | 18 | # Function to set battery thresholds for legacy systems 19 | set-battery-thresholds-for-legacy-systems () { 20 | basepath=/sys/devices/platform/smapi 21 | for b in `fd BAT /sys/devices/platform/smapi`; 22 | do 23 | echo 20 | sudo tee ${basepath}/$(basename $b)/start_charge_thresh 24 | echo 100 | sudo tee ${basepath}/$(basename $b)/stop_charge_thresh 25 | echo $start | sudo tee ${basepath}/$(basename $b)/start_charge_thresh 26 | echo $stop | sudo tee ${basepath}/$(basename $b)/stop_charge_thresh 27 | done 28 | } 29 | 30 | # Use the appropriate power interface depending on the system 31 | if [[ -d /sys/devices/platform/smapi ]]; then 32 | set-battery-thresholds-for-legacy-systems 33 | else 34 | set-battery-thresholds-for-newer-systems 35 | fi 36 | -------------------------------------------------------------------------------- /.bin/linux/mt-bluetooth: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Query the list of known devices 7 | devices_result=$(bluetoothctl devices) 8 | 9 | # Get parsed options 10 | parsed_result=$(sbcl --script ~/.assets/parsers/bt-parser.lisp ${devices_result}) 11 | 12 | # Prompt for selection 13 | result=$(echo -e ${parsed_result}\\n[Disconnect] | ${mt_prompter}) 14 | 15 | # Check whether it's a connect or disconnect 16 | if [ "${result}" == "[Disconnect]" ]; then 17 | # Disconnect from the connected device 18 | bluetoothctl disconnect 19 | else 20 | # Split id and name 21 | result_id=$(echo ${result} | cut -d ' ' -f 1) 22 | 23 | # Connect to the selected device using id 24 | bluetoothctl connect ${result_id} 25 | fi 26 | -------------------------------------------------------------------------------- /.bin/linux/mt-brightness-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Abort for Wayland 4 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 5 | mt_message="Not implemented for Wayland!" 6 | notify-send "${mt_message}" 7 | echo ${mt_message} 8 | exit 1 9 | fi 10 | 11 | # Detect display and set prompter 12 | . ~/.assets/libs/bash/select-prompter 13 | 14 | # Check for supplied argument 15 | if [ "${1}" ]; then 16 | # Use the supplied argument 17 | mt_value="${1}" 18 | else 19 | # Prompt for a value 20 | mt_value=$(echo -e "100\n90\n80\n70\n60\n50\n40\n30\n20\n10" | ${mt_prompter}) 21 | fi 22 | 23 | # Translate input to a useable value 24 | case "${mt_value=}" in 25 | 100) 26 | mt_brightness=1.0 27 | ;; 28 | 29 | 90) 30 | mt_brightness=0.9 31 | ;; 32 | 33 | 80) 34 | mt_brightness=0.8 35 | ;; 36 | 37 | 70) 38 | mt_brightness=0.7 39 | ;; 40 | 41 | 60) 42 | mt_brightness=0.6 43 | ;; 44 | 45 | 50) 46 | mt_brightness=0.5 47 | ;; 48 | 49 | 40) 50 | mt_brightness=0.4 51 | ;; 52 | 53 | 30) 54 | mt_brightness=0.3 55 | ;; 56 | 57 | 20) 58 | mt_brightness=0.2 59 | ;; 60 | 61 | 10) 62 | mt_brightness=0.1 63 | ;; 64 | 65 | *) 66 | mt_brightness=0.5 67 | ;; 68 | esac 69 | 70 | # Gather devices info 71 | xrandr_devices=$(xrandr) 72 | 73 | # Detect primary display 74 | primary_display=$(sbcl --script ~/.assets/parsers/xrandr-parser.lisp primary $(xrandr)) 75 | 76 | # Set brightness 77 | xrandr --output "${primary_display}" --brightness ${mt_brightness} 78 | echo "Brightness set to ${mt_brightness}" 79 | -------------------------------------------------------------------------------- /.bin/linux/mt-color-temperature-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Check for supplied argument 7 | if [ "${1}" ]; then 8 | # Use the supplied argument 9 | mt_mode="${1}" 10 | else 11 | # Prompt for a value 12 | mt_mode=$(echo -e "day\nnight" | ${mt_prompter}) 13 | fi 14 | 15 | # Execute the appropriate command based on choice 16 | case "${mt_mode}" in 17 | n | night ) 18 | mt_message="Night mode" 19 | echo "${mt_message}" 20 | notify-send "${mt_message}" 21 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 22 | gammastep -O 4500 & 23 | else 24 | sct 4500 25 | fi 26 | ;; 27 | 28 | *) 29 | mt_message="Day mode" 30 | echo "${mt_message}" 31 | notify-send "${mt_message}" 32 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 33 | gammastep -x & 34 | else 35 | sct 36 | fi 37 | ;; 38 | esac 39 | -------------------------------------------------------------------------------- /.bin/linux/mt-desktop-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | case "${1}" in 4 | x | x11 | xorg) 5 | startx ~/.xinitrc 6 | ;; 7 | 8 | *) 9 | XDG_SESSION_TYPE=wayland dbus-run-session sway -c ~/.config/wm/sway 10 | ;; 11 | esac 12 | -------------------------------------------------------------------------------- /.bin/linux/mt-display-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Abort for Wayland 4 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 5 | mt_message="Not implemented for Wayland!" 6 | notify-send "${mt_message}" 7 | echo ${mt_message} 8 | exit 1 9 | fi 10 | 11 | # Detect display and set prompter 12 | . ~/.assets/libs/bash/select-prompter 13 | 14 | # Prompt for a choice 15 | mt_response=$(echo -e "Auto (3840x2160)\nMedium (2560x1440)\nLow (1920x1080)\nPrimary => External\nExternal <= Primary" | ${mt_prompter}) 16 | 17 | # Gather devices info 18 | xrandr_devices=$(xrandr) 19 | 20 | # Detect primary display 21 | primary_display=$(sbcl --script ~/.assets/parsers/xrandr-parser.lisp primary $(xrandr)) 22 | 23 | # Execute the appropriate command based on choice 24 | case "${mt_response}" in 25 | "Auto (3840x2160)") 26 | xrandr --output "${primary_display}" --auto --output "HDMI-0" --off 27 | ;; 28 | 29 | "Medium (2560x1440)") 30 | xrandr --output "${primary_display}" --mode 2560x1440 --output "HDMI-0" --off 31 | ;; 32 | 33 | "Low (1920x1080)") 34 | xrandr --output "${primary_display}" --mode 1920x1080 --output "HDMI-0" --off 35 | ;; 36 | 37 | "Primary => External") 38 | xrandr --output "${primary_display}" --auto --output "HDMI-0" --auto --right-of "${primary_display}" 39 | ;; 40 | 41 | "External <= Primary") 42 | xrandr --output "${primary_display}" --auto --output "HDMI-0" --auto --left-of "${primary_display}" 43 | ;; 44 | 45 | *) 46 | # Ignore 47 | ;; 48 | esac 49 | -------------------------------------------------------------------------------- /.bin/linux/mt-display-orientation: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Abort for Wayland 4 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 5 | mt_message="Not implemented for Wayland!" 6 | notify-send "${mt_message}" 7 | echo ${mt_message} 8 | exit 1 9 | fi 10 | 11 | # Detect display and set prompter 12 | . ~/.assets/libs/bash/select-prompter 13 | 14 | # Prompt for a choice 15 | mt_response=$(echo -e "normal\nleft\nright\ninverted" | ${mt_prompter}) 16 | 17 | # Gather devices info 18 | xrandr_devices=$(xrandr) 19 | 20 | # Detect primary display 21 | primary_display=$(sbcl --script ~/.assets/parsers/xrandr-parser.lisp primary $(xrandr)) 22 | 23 | # Rotate the screen based on selection 24 | xrandr --output "${primary_display}" --rotate "${mt_response}" 25 | -------------------------------------------------------------------------------- /.bin/linux/mt-flatpak: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: Evaluate retiring in favor of /var/lib/flatpak/exports/bin/ 4 | 5 | case "${1}" in 6 | i | install | a | add) 7 | # Install flatpak 8 | sudo flatpak install -y ${3} 9 | 10 | # Create symlink for direct launch 11 | echo "#!/usr/bin/env bash 12 | dbus-run-session flatpak run ${3} & disown" | sudo tee /usr/local/bin/${2} 13 | sudo chmod 755 /usr/local/bin/${2} 14 | 15 | ;; 16 | 17 | u | uninstall | r | remove) 18 | # Remove flatpak 19 | sudo flatpak remove -y ${3} 20 | 21 | # Remove symlink 22 | sudo rm /usr/local/bin/${2} 23 | ;; 24 | 25 | *) 26 | echo "Not implemented!" 27 | ;; 28 | esac 29 | 30 | -------------------------------------------------------------------------------- /.bin/linux/mt-gpu-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Abort for Wayland 4 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 5 | mt_message="Not implemented for Wayland!" 6 | notify-send "${mt_message}" 7 | echo ${mt_message} 8 | exit 1 9 | fi 10 | 11 | # Detect display and set prompter 12 | . ~/.assets/libs/bash/select-prompter 13 | 14 | # Check for supplied argument 15 | if [ "${1}" ]; then 16 | # Use the supplied argument 17 | mt_mode="${1}" 18 | else 19 | # Prompt for a value 20 | mt_mode=$(echo -e "intel\nhybrid\nnvidia" | ${mt_prompter}) 21 | fi 22 | 23 | # Execute the appropriate command based on choice 24 | case "${mt_mode}" in 25 | i | integrated | intel ) 26 | echo "Switching to integrated GPU..." 27 | optimus-manager --switch intel --no-confirm 28 | ;; 29 | 30 | o | h | hybrid ) 31 | echo "Switching to hybrid mode..." 32 | optimus-manager --switch hybrid --no-confirm 33 | ;; 34 | 35 | p | d | dedicated | n | nvidia ) 36 | echo "Switching to dedicated GPU..." 37 | optimus-manager --switch nvidia --no-confirm 38 | ;; 39 | 40 | *) 41 | echo "Option not specified" 42 | ;; 43 | esac 44 | -------------------------------------------------------------------------------- /.bin/linux/mt-hardware: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Prompt for a choice 7 | mt_menu=$(echo -e "bluetooth\nbrightness\ndisplay orientation\ncolor-temperature\nproject screen\ngpu\nrestart network" | ${mt_prompter}) 8 | 9 | # Spawn the appropriate menu based on choice 10 | case "${mt_menu}" in 11 | "bluetooth") 12 | mt-bluetooth 13 | ;; 14 | 15 | "brightness") 16 | mt-brightness-mode 17 | ;; 18 | 19 | "color-temperature") 20 | mt-color-temperature-mode 21 | ;; 22 | 23 | "display orientation") 24 | mt-display-orientation 25 | ;; 26 | 27 | "project screen") 28 | mt-display-mode 29 | ;; 30 | 31 | "gpu") 32 | mt-gpu-mode 33 | ;; 34 | 35 | "restart network") 36 | mt-network-reset 37 | ;; 38 | 39 | *) 40 | echo "Not implemented!" 41 | ;; 42 | esac 43 | -------------------------------------------------------------------------------- /.bin/linux/mt-media: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $# -lt 2 ]]; then 4 | echo "Usage: mt-media [path]" 5 | exit 1 6 | fi 7 | 8 | case "${1}" in 9 | m | mount) 10 | if [[ $# -lt 3 ]]; then 11 | echo "Usage: mt-media (m|mount) " 12 | exit 1 13 | fi 14 | 15 | # Create media directory for user 16 | sudo mkdir /run/media/${USER}/$3 17 | 18 | # Grant permission to user 19 | sudo chown ${USER}:${USER} /run/media/${USER}/$3 20 | 21 | # Mount the media 22 | sudo mount $2 /run/media/${USER}/$3 23 | ;; 24 | 25 | u | unmount) 26 | if [[ $# -lt 3 ]]; then 27 | echo "Usage: mt-media (u|unmount) " 28 | exit 1 29 | fi 30 | 31 | # Unmount media 32 | sudo umount $2 33 | 34 | # Remove user directory 35 | sudo rm -rf /run/media/${USER}/$3 36 | ;; 37 | 38 | p | poweroff | r | remove) 39 | udisksctl power-off -b $2 40 | ;; 41 | 42 | a | analyze ) 43 | sudo smartctl -A -d sat $2 44 | ;; 45 | 46 | *) 47 | echo "Not implemented!" 48 | ;; 49 | esac 50 | -------------------------------------------------------------------------------- /.bin/linux/mt-network-cloak: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ "${1}" = "start" ]; then 4 | sudo mkdir -p /etc/NetworkManager/conf.d 5 | echo " 6 | [connection-mac-randomization] 7 | ethernet.cloned-mac-address=random 8 | wifi.cloned-mac-address=random 9 | " | sudo tee /etc/NetworkManager/conf.d/network_rand_mac.conf 10 | else 11 | sudo rm /etc/NetworkManager/conf.d/network_rand_mac.conf 12 | fi 13 | 14 | sudo sv restart NetworkManager 15 | -------------------------------------------------------------------------------- /.bin/linux/mt-network-reset: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect init system 4 | . ~/.assets/libs/bash/detect-init-system 5 | 6 | # Use the appropriate implementation based on the active init system 7 | case "${mt_init_system}" in 8 | SystemD) 9 | sudo systemctl restart NetworkManager.service 10 | ;; 11 | 12 | Runit) 13 | sudo sv restart NetworkManager 14 | ;; 15 | 16 | *) 17 | echo "Not implemented!" 18 | ;; 19 | esac 20 | -------------------------------------------------------------------------------- /.bin/linux/mt-power-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Detect init system 7 | . ~/.assets/libs/bash/detect-init-system 8 | 9 | # Check for supplied argument 10 | if [ "${1}" ]; then 11 | # Use the supplied argument 12 | mt_mode="${1}" 13 | else 14 | # Prompt for a choice 15 | mt_mode=$(echo -e "lock\nindoor\noutdoor\nquit\nsuspend\nhibernate\nshutdown\nrestart\nawake\nsleepy" | ${mt_prompter}) 16 | fi 17 | 18 | # Function to switch power using systemd 19 | switch-power-mode-with-systemd () { 20 | case "${mt_mode}" in 21 | "lock") 22 | mt-session-lock-desktop 23 | ;; 24 | 25 | "indoor") 26 | mt-session-lock disable 27 | ;; 28 | 29 | "outdoor") 30 | mt-session-lock enable 31 | ;; 32 | 33 | "quit") 34 | mt-session-quit 35 | ;; 36 | 37 | "sleep" | "suspend") 38 | systemctl suspend 39 | ;; 40 | 41 | "hibernate") 42 | systemctl hibernate 43 | ;; 44 | 45 | "shutdown" | "poweroff") 46 | systemctl poweroff 47 | ;; 48 | 49 | "restart" | "reboot") 50 | systemctl reboot 51 | ;; 52 | 53 | "awake") 54 | systemctl mask sleep.target suspend.target 55 | ;; 56 | 57 | "sleepy") 58 | systemctl unmask sleep.target suspend.target 59 | ;; 60 | 61 | *) 62 | echo "Not implemented!" 63 | ;; 64 | esac 65 | } 66 | 67 | # Function to switch power using runit 68 | switch-power-mode-with-runit () { 69 | case "${mt_mode}" in 70 | "lock") 71 | mt-session-lock-desktop 72 | ;; 73 | 74 | "indoor") 75 | mt-session-lock disable 76 | ;; 77 | 78 | "outdoor") 79 | mt-session-lock enable 80 | ;; 81 | 82 | "quit") 83 | mt-session-quit 84 | ;; 85 | 86 | "sleep" | "suspend") 87 | loginctl suspend 88 | ;; 89 | 90 | "hibernate") 91 | loginctl hibernate 92 | ;; 93 | 94 | "shutdown" | "poweroff") 95 | loginctl poweroff 96 | ;; 97 | 98 | "restart" | "reboot") 99 | loginctl reboot 100 | ;; 101 | 102 | "awake") 103 | echo "Not implemented!" 104 | ;; 105 | 106 | "sleepy") 107 | echo "Not implemented!" 108 | ;; 109 | 110 | *) 111 | echo "Not implemented!" 112 | ;; 113 | esac 114 | } 115 | 116 | # Use the appropriate implementation based on the active init system 117 | case "${mt_init_system}" in 118 | SystemD) 119 | switch-power-mode-with-systemd 120 | ;; 121 | 122 | Runit) 123 | switch-power-mode-with-runit 124 | ;; 125 | 126 | *) 127 | echo "Not implemented!" 128 | ;; 129 | esac 130 | -------------------------------------------------------------------------------- /.bin/linux/mt-run-if-not-running: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cmd="$1" 4 | 5 | if ! pgrep -x "$cmd" > /dev/null; then 6 | "$cmd" & 7 | fi 8 | -------------------------------------------------------------------------------- /.bin/linux/mt-session-lock: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $# -lt 1 ]]; then 4 | echo "Usage: mt-session-lock " 5 | exit 1 6 | fi 7 | 8 | case "${1}" in 9 | enable | activate) 10 | # Start xss-lock 11 | xss-lock --transfer-sleep-lock -- mt-session-lock-desktop --nofork & 12 | ;; 13 | 14 | disable | deactivate) 15 | # Disable session lock 16 | killall xss-lock 17 | ;; 18 | 19 | *) 20 | echo "Not implemented!" 21 | ;; 22 | esac 23 | -------------------------------------------------------------------------------- /.bin/linux/mt-session-lock-desktop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Enable session lock and lock instantly 4 | 5 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 6 | fd . ~/_store/Vault/media/lockscreens/ -t f -0 | shuf -n1 -z | xargs -0 swaylock -t -i 7 | else 8 | mt-session-lock enable & 9 | fd . ~/_store/Vault/media/lockscreens/ -t f -0 | shuf -n1 -z | xargs -0 i3lock -t -i 10 | fi 11 | -------------------------------------------------------------------------------- /.bin/linux/mt-session-quit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 4 | sway exit 5 | else 6 | i3-msg exit 7 | fi 8 | -------------------------------------------------------------------------------- /.bin/linux/mt-set-random-wallpaper: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 4 | fd . ~/_store/Vault-Mobile/media/wallpapers/ -t f -0 | shuf -n1 -z | xargs -0 swaybg -m fill -i 5 | else 6 | fd . ~/_store/Vault-Mobile/media/wallpapers/ -t f -0 | shuf -n1 -z | xargs -0 feh --bg-fill 7 | fi 8 | -------------------------------------------------------------------------------- /.bin/linux/mt-system-update: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Run update through the primary package manager 4 | . ~/.assets/libs/bash/detect-platform 5 | case "${mt_platform}" in 6 | Arch) 7 | sudo pacman -Syu 8 | ;; 9 | 10 | Debian | Pop) 11 | sudo apt update -y && sudo apt upgrade -y 12 | ;; 13 | 14 | Void) 15 | sudo xbps-install -Syu xbps 16 | sudo xbps-install -Syu 17 | ;; 18 | esac 19 | 20 | # Update snaps, if available 21 | if [ $(command -v snap) ]; then 22 | sudo snap refresh 23 | fi 24 | 25 | # Update flatpaks, if available 26 | if [ $(command -v flatpak) ]; then 27 | sudo flatpak update 28 | fi 29 | -------------------------------------------------------------------------------- /.bin/linux/mt-timezone-switch: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Prompt for a timezone and set it 7 | sudo ln -sf $(find /usr/share/zoneinfo | ${mt_prompter} --prompt "Choose a location: ") /etc/localtime 8 | -------------------------------------------------------------------------------- /.bin/mac/mt-power-mode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $# -lt 1 ]]; then 4 | echo "Usage: mt-power-mode " 5 | exit 1 6 | fi 7 | 8 | case "${1}" in 9 | "shutdown" | "poweroff" ) 10 | sudo shutdown 11 | ;; 12 | 13 | "restart" | "reboot" ) 14 | sudo reboot 15 | ;; 16 | 17 | *) 18 | echo "Not implemented!" 19 | ;; 20 | esac 21 | -------------------------------------------------------------------------------- /.bin/mac/mt-system-update: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | brew update && brew upgrade 4 | 5 | -------------------------------------------------------------------------------- /.bin/mt-connect-ssh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ssh $(mt-get-machine) 4 | -------------------------------------------------------------------------------- /.bin/mt-find-duplicates: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* global require process console */ 4 | 5 | const { argv: [program, thisFile, inputDir] } = process; 6 | const { log } = console; 7 | 8 | const { inflateInput, getFileStats, getVerticalList } = require('../.assets/libs/node'); 9 | 10 | const files = inflateInput([inputDir]); 11 | 12 | const fileMap = {}; 13 | for (let i = 0; i < files.length; i++) { 14 | const [filePath, fileName, fileSize] = getFileStats(files[i]); 15 | 16 | const entry = fileMap[fileName]; 17 | 18 | if (entry && entry[0] === fileSize) { 19 | entry.push(filePath); 20 | } else { 21 | fileMap[fileName] = [fileSize, filePath]; 22 | } 23 | } 24 | 25 | const duplicates = Object.keys(fileMap) 26 | .filter(k => fileMap[k].length > 2) 27 | .map(k => `${k}: ${fileMap[k].join(', ')}`); 28 | 29 | const listOfDuplicates = getVerticalList(duplicates); 30 | 31 | log(listOfDuplicates); 32 | -------------------------------------------------------------------------------- /.bin/mt-find-duplicates-obvious: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | find "${1}" | rg "(\(1\)|\(2\)|\(3\)\(4\)\(5\)\(6\)\(7\)\(8\)\(9\))" 4 | -------------------------------------------------------------------------------- /.bin/mt-get-machine: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CONFIG_FILE="/home/ismail/_store/Vault/machines.conf" 4 | 5 | # Detect display and set prompter 6 | . ~/.assets/libs/bash/select-prompter 7 | 8 | # Prompt the user for the machine name 9 | selected_machine=$(cat $CONFIG_FILE | ${mt_prompter}) 10 | 11 | # Fetch the IP address associated with the machine name 12 | ip_address=$(grep "$selected_machine" "$CONFIG_FILE" | cut -d'=' -f2) 13 | 14 | # Return the IP addres of the selected machine 15 | echo $ip_address 16 | -------------------------------------------------------------------------------- /.bin/mt-list-contents: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* global require process console */ 4 | 5 | const { argv: [program, thisFile, inputDir] } = process; 6 | const { log } = console; 7 | 8 | const { inflateInput, getVerticalList } = require('../.assets/libs/node'); 9 | 10 | const listOfFiles = getVerticalList(inflateInput([inputDir])); 11 | 12 | log(listOfFiles); 13 | -------------------------------------------------------------------------------- /.bin/mt-llm-generate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | if [ ! -t 0 ]; then 7 | # Read from stdin 8 | input=$(cat -) 9 | elif [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then 10 | # Print accepted syntax 11 | echo -e "Please provide an input either as a file, arbitrary text, or through stdin. 12 | Examples: 13 | 1) mt-llm-generate ./filename.txt 14 | 2) mt-llm-generate Is the earth flat? 15 | 3) echo \"Divide infinity by zero.\" | mt-llm-generate" 16 | exit 0 17 | elif [ -f "$1" ]; then 18 | # Read from specified file 19 | input=$(cat "$1") 20 | else [ -n "$1" ]; 21 | # Use the arbitrary text from argument 22 | input="$@" 23 | fi 24 | 25 | # Prompt the user for a pattern 26 | pattern_to_use=$(fabric -l | ${mt_prompter}) 27 | 28 | # Run fabric 29 | echo "$input" | fabric -p "$pattern_to_use" 30 | -------------------------------------------------------------------------------- /.bin/mt-llm-query: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | if [ ! -t 0 ]; then 7 | # Read from stdin 8 | input=$(cat -) 9 | elif [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then 10 | # Print accepted syntax 11 | echo -e "Please provide an input either as a file, arbitrary text, or through stdin. 12 | Examples: 13 | 1) mt-llm-query ./filename.txt 14 | 2) mt-llm-query Is the earth flat? 15 | 3) echo \"Divide infinity by zero.\" | mt-llm-query" 16 | exit 0 17 | elif [ -f "$1" ]; then 18 | # Read from specified file 19 | input=$(cat "$1") 20 | else [ -n "$1" ]; 21 | # Use the arbitrary text from argument 22 | input="$@" 23 | fi 24 | 25 | # Prompt the user for a pattern 26 | pattern_to_use=$(fabric -l | ${mt_prompter}) 27 | 28 | # Run fabric 29 | echo "$input" | fabric -s -p "$pattern_to_use" 30 | -------------------------------------------------------------------------------- /.bin/mt-llm-transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Validate input from std 7 | if [ ! -t 0 ]; then 8 | # Read from stdin 9 | input=$(cat -) 10 | fi 11 | 12 | if [ $# -eq 0 ] || [ -z "$input" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then 13 | # Print accepted syntax 14 | echo -e "Please provide a transform, either as a file, or arbitrary text. A query can needs to be provided through stdin. 15 | Examples: 16 | 1) echo \"...super long text...\" mt-llm-transform ./transform.txt 17 | 2) echo \"...super long text...\" | mt-llm-transform \"Make concise\"" 18 | exit 0 19 | elif [ -f "$1" ]; then 20 | # Read from specified file 21 | prompt=$(cat "$1") 22 | else [ -n "$1" ]; 23 | # Use the arbitrary text from argument 24 | prompt="$@" 25 | fi 26 | 27 | # Run fabric 28 | fabric -p "raw_query" "${prompt}: ${input}" 29 | -------------------------------------------------------------------------------- /.bin/mt-llm-youtube: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Detect display and set prompter 4 | . ~/.assets/libs/bash/select-prompter 5 | 6 | # Prompt the user for a pattern 7 | pattern_to_use=$(fabric -l | ${mt_prompter}) 8 | 9 | # Run fabric 10 | fabric -y "$1" -s -p "$pattern_to_use" 11 | -------------------------------------------------------------------------------- /.bin/mt-ollama-remote: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | socat -d -d TCP-LISTEN:11434,reuseaddr,fork TCP:$(mt-get-machine):11434 4 | -------------------------------------------------------------------------------- /.bin/mt-purchase-max-bid: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env cl 2 | 3 | (let ((args (cdr *posix-argv*))) 4 | (if (= (length args) 5 | 2) 6 | (let ((shipping-cost (parse-integer (car args) :junk-allowed t)) 7 | (max-budget (parse-integer (cadr args) :junk-allowed t)) 8 | (sales-tax 0.07)) 9 | (princ (round (- (/ max-budget (+ 1 sales-tax)) 10 | shipping-cost)))) 11 | (princ "Need shipping cost and max budget!"))) 12 | -------------------------------------------------------------------------------- /.bin/mt-purchase-total-cost: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env cl 2 | 3 | (let ((args (cdr *posix-argv*))) 4 | (if (= (length args) 5 | 2) 6 | (let ((selling-price (parse-integer (car args) :junk-allowed t)) 7 | (shipping-cost (parse-integer (cadr args) :junk-allowed t)) 8 | (sales-tax 0.07)) 9 | (princ (round (* (+ selling-price shipping-cost) 10 | (+ 1 sales-tax))))) 11 | (princ "Need item price and shipping cost!"))) 12 | -------------------------------------------------------------------------------- /.bin/mt-repeat: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $# -lt 2 ]]; then 4 | echo "Usage: mt-repeat " 5 | exit 1 6 | fi 7 | 8 | interval="$1" 9 | shift 10 | 11 | while true; do 12 | clear 13 | "${@}" 14 | sleep "$interval" 15 | done 16 | -------------------------------------------------------------------------------- /.bin/mt-speak: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ ! -t 0 ]; then 4 | # Read from stdin 5 | input=$(cat -) 6 | elif [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then 7 | # Print accepted syntax 8 | echo -e "Please provide an input either as a file, arbitrary text, or through stdin. 9 | Examples: 10 | 1) mt-speak ./filename.txt 11 | 2) mt-speak Hello! How are you? 12 | 3) echo \"Here, take this.\" | mt-speak" 13 | exit 0 14 | elif [ -f "$1" ]; then 15 | # Read from specified file 16 | input=$(cat "$1") 17 | else [ -n "$1" ]; 18 | # Use the arbitrary text from argument 19 | input="$@" 20 | fi 21 | 22 | # Run piper over the input text 23 | echo "$input" | ~/_store/Vault/binaries/piper/piper --model ~/_store/Vault/binaries/piper/voices/en_US-bryce-medium.onnx --output_file - | mpv - 24 | -------------------------------------------------------------------------------- /.bin/mt-sync-projects: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $# -lt 1 ]]; then 4 | echo "Usage: mt-sync-projects " 5 | exit 1 6 | fi 7 | 8 | count=0 9 | projects=`ls -A $1` 10 | 11 | echo "Found $(ls -A $1 | wc -l) projects." 12 | 13 | cd $1 14 | 15 | for i in $projects; 16 | do 17 | if [ -d $i ] 18 | then 19 | cd $i 20 | echo "" 21 | echo + $i 22 | git pull 23 | ((count++)) 24 | cd ..; 25 | fi 26 | done 27 | 28 | echo "" 29 | echo "Done updating" $count "projects." 30 | echo "" 31 | -------------------------------------------------------------------------------- /.config/bash/config: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Update PATH for custom shell scripts 4 | export PATH=$PATH:~/.bin 5 | 6 | # Set custom environment variables 7 | export MT_PATH_STORE=~/_store 8 | export MT_PATH_WORKSPACE=~/_workspace 9 | export MT_PATH_WORKSPACE_GITHUB=$MT_PATH_WORKSPACE/github 10 | 11 | # Load private keys, if they exist 12 | if [ -f "${MT_PATH_STORE}/Vault/.private-keys" ]; then 13 | . "${MT_PATH_STORE}/Vault/.private-keys" 14 | fi 15 | 16 | # Set up common aliases 17 | alias cl="clear" 18 | alias gt="clear && git" 19 | alias mt-sync-github="mt-sync-projects ${MT_PATH_WORKSPACE_GITHUB}" 20 | alias lo="lsd -l --group-dirs first" 21 | alias po="bat" 22 | 23 | # Load configs for the current OS 24 | if [ $(uname) = 'Linux' ]; then 25 | . ~/.config/bash/config-linux 26 | elif [ $(uname) = 'Darwin' ]; then 27 | . ~/.config/bash/config-mac 28 | fi 29 | 30 | # Start a tmux session if appropriate 31 | if [[ ! "screen eterm-color dumb" =~ "${TERM}" ]]; then 32 | tmux 33 | fi 34 | 35 | # Define functions 36 | cx() { 37 | clear && cd "$1" && lo . 38 | } 39 | -------------------------------------------------------------------------------- /.config/bash/config-linux: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Configure prompt 4 | PS1='\u@\h:\w\$ ' 5 | 6 | # Update PATH 7 | export PATH=$PATH:~/.bin/linux 8 | export PATH=$PATH:$HOME/.local/bin:$HOME/bin 9 | export PATH=$PATH:$HOME/_store/Vault/binaries/_links 10 | 11 | # Set up aliases 12 | alias mt-copy="xsel --clipboard --input" 13 | alias mt-paste="xsel --clipboard --output" 14 | 15 | # TODO: Implement aliases with wl-clipboard for Wayland 16 | -------------------------------------------------------------------------------- /.config/bash/config-mac: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Update PATH for custom shell scripts for Mac 4 | export PATH=$PATH:~/.bin/mac 5 | 6 | # Update PATH 7 | export PATH=$PATH:/opt/homebrew/bin 8 | 9 | # Set up aliases 10 | # (None for now) 11 | -------------------------------------------------------------------------------- /.config/emacs/ellama-sessions: -------------------------------------------------------------------------------- 1 | /home/ismail/_store/Vault/ellama-sessions -------------------------------------------------------------------------------- /.config/emacs/init.el: -------------------------------------------------------------------------------- 1 | (if (or (null (cdr command-line-args)) 2 | (null (seq-filter #'file-exists-p (cdr command-line-args)))) 3 | (let ((configs (if (file-directory-p "~/.config/emacs/configs") 4 | (directory-files "~/.config/emacs/configs" 5 | nil 6 | "^\\([^.]\\|\\.[^.]\\|\\.\\..\\)")))) 7 | (if (null configs) 8 | (message "No configuration found!") 9 | (load (expand-file-name (concat "configs/" 10 | (cond ((cdr configs) (ido-completing-read 11 | "Select a configuration: " 12 | configs)) 13 | (t (car configs))) 14 | "/init") 15 | (file-name-directory load-file-name)))))) 16 | 17 | (load (concat (file-name-directory user-init-file) 18 | "user") 19 | t) 20 | -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/alhamd: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-hamd 3 | # key: /alhamd 4 | # -- 5 | Al-Hamdu-Lillah! -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/date: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-date 3 | # key: /date 4 | # -- 5 | `(format-time-string "%Y%m%d")` -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/insha: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-insha 3 | # key: /insha 4 | # -- 5 | Insha-Allah! -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/jazak: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-jazak 3 | # key: /jazak 4 | # -- 5 | Jazak-Allah! -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/masha: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-masha 3 | # key: /masha 4 | # -- 5 | Masha-Allah! -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/salaam: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-salam 3 | # key: /salaam 4 | # -- 5 | As-Salamu-Alaikum! -------------------------------------------------------------------------------- /.config/emacs/snippets/fundamental-mode/wasalaam: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-wasalaam 3 | # key: /wasalaam 4 | # -- 5 | Wa-Alaikum-As-Salaam! -------------------------------------------------------------------------------- /.config/emacs/snippets/org-mode/chapter: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-tex-chapter 3 | # key: /mt-tex-chapter 4 | # -- 5 | #+LATEX: \chapter{${1:Chapter Name}} -------------------------------------------------------------------------------- /.config/emacs/snippets/org-mode/part: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-tex-part 3 | # key: /mt-tex-part 4 | # -- 5 | #+LATEX: \part{${1:Part Name}} -------------------------------------------------------------------------------- /.config/emacs/snippets/org-mode/section: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: mt-tex-section 3 | # key: /mt-tex-section 4 | # -- 5 | #+LATEX: \section{${1:Section Name}} -------------------------------------------------------------------------------- /.config/emacs/user.el: -------------------------------------------------------------------------------- 1 | (setq user-full-name 2 | "Mohammed Ismail Ansari") 3 | (setq user-mail-address 4 | "team.terminal@gmail.com") 5 | 6 | (if (featurep 'theme-looper) 7 | (theme-looper-set-favorite-themes '(overcast 8 | material 9 | green-phosphor 10 | hemisu-dark 11 | leuven))) 12 | (if (featurep 'zone-quotes) ; TODO: Fix 13 | (load "zone-quotes-masseffect")) 14 | (if (featurep 'perspective) 15 | (customize-set-variable 'persp-state-default-file 16 | (concat "~/_store/Vault/" 17 | "super-emacs-persp-session-file"))) 18 | -------------------------------------------------------------------------------- /.config/emacs/zone-quotes-masseffect.el: -------------------------------------------------------------------------------- 1 | (zone-quotes-set-quotes (list "'You humans have a saying. An eye for an eye; a life for a life. Well he owes me ten lives and I plan to collect.' - Garrus Vakarian" 2 | "'Stand in the ashes of a trillion dead souls and ask the ghosts if honor matters. The silence is your answer.' - Javik" 3 | "'I don't need luck. I have ammo.' - Urdnot Grunt" 4 | "'Shepard is my battlemaster. He has no match.' - Urdnot Grunt" 5 | "'Anyone who fights us is either stupid or on Saren's payroll. Killing the latter is business. Killing the former is a favor to the universe.' - Urdnot Wrex" 6 | "'I am the very model of a Scientist Salarian. I've studies species Turian, Asari, and Batarian. I'm quite good a genetics. It's a subset of biology because I am an expert, which I know is a tautology. My xenoscience studies range from urban to agrarian. I am the very model of a Scientist Salarian!' - Mordin Solus" 7 | "'Had to be me. Someone else might have gotten it wrong.' - Mordin Solus" 8 | "'Your time is precious. Spend it wisely and with those who care for you.' - Samara" 9 | "'Is submission not preferable to extinction?' - Saren Arterius" 10 | "'You've lost. You know that don't you. Everyone you know and love. Everyone you've ever met. YOU WILL ALL DIE!' - Saren Arterius" 11 | "'Years ago it was the Illusive man that ordered my creation. Jeff was the one that allowed me to think for myself. But only now do I feel alive. That is your influence.' - EDI" 12 | "'Before Legion sacrificed himself. He referred to himself as I instead of we....The singular pronoun indicates that Legion's independent personality had fully actualized. In his final moments....he was no longer an avatar of the Geth consensus.....He was a person....' - EDI" 13 | "'This is all Joker's fault! What a tool he was! Now I have to spend all day computing Pi because he plugged in the overlord.' - Joker 'Jeff' Moreau" 14 | "'There is a realm of existence so far beyond your own you cannot even imagine it. I am beyond your comprehension.' - Sovereign" 15 | "'The time of our return is coming. Our numbers will darken the sky of every world. You cannot escape your doom. Your words are as empty as your future. I am the Vanguard of your destruction. This exchange is over...' - Sovereign" 16 | "'There is a reason the Council chose you to be a Spectre. They saw something special in you. The best of what humanity has to offer. There is something compelling about you Shepard.' - Liara T'Soni" 17 | "'After time adrift among open stars, among tides of light and to shoals of dust, I will return to where I began.' - Tali'Zorah vas Rayya" 18 | "'An assassin is a weapon to be used. A tool. If a person were to kill a man would you hold the gun responsible?' - Thane Krios" 19 | "'Amonkira lord of hunters, grant that hands be steady, my aim be true, and my feet swift, and should the worst come to past grant me forgiveness.' - Thane Krios" 20 | "'You are now the Avatar of this cycle. The examplar of victory. Not just for Humans or Turians or Protheans, but for all life. Every soul that has ever lived is watching this moment. But I know you will see this through to the end for all of us, no matter the cost.' - Javik" 21 | "'I just want you to know that no matter what happens, you've been a champion to the Krogan people, a friend of clan Urdnot, and a brother to me. To every Krogan born after this day the name Shepard will mean hero! Now let's show them why!' - Urdnot Wrex" 22 | "'I'm Garrus Vakarian and this is now my favorite spot on the Citadel.' - Garrus Vakarian" 23 | "'Human history is written in a litany of blood shed over differing opinions of government and afterlife.' - Legion" 24 | "'The Old Machines offered to give us our future. A short cut to our objective. We rejected it. The Geth will build our own future. The process is as important as the result.' - Legion" 25 | "'I don't know what we're gonna find in there, but I'm not going to lie to you, it's not going to be easy. We've lost good people. We may lose more. We do not know how many the collectors have stolen. Thousands? Hundreds of thousands? It doesn't matter. What matters is this: Not. One. More. That's what we can do here today! It ends with us! They want to know what we're made of? I say we show them, on our terms. Let's bring our people home.' - Commander Shepard" 26 | "'The Collectors, the Reapers. They aren't a threat to us. They're a threat to everything. Everyone. Those are the lives we're fighting for. That's the scale. It's been a long journey and no one is coming out without scars. But it all comes down to this moment. We win or lose it all in the next few minutes. Make me proud. Make yourselves proud.' - Commander Shepard" 27 | "'This war has brought us pain, and suffering, and loss. But its also brought us together as soldiers, allies, friends. This bond that ties us together is something the reapers will never understand. It's more powerful than any weapon. Stronger than any ship. It can't be taken or destroyed. The next few hours will decide the fate of everyone in the galaxy. Every mother, every son, every unborn child. They're trusting you. Depending on you to win them their future. A future free from the threat of the reapers. But take heart. Look around you. You're not in this fight alone. We face our enemy together and together we will defeat them.' - Commander Shepard" 28 | "'Maybe you're right. Maybe we can't win this. But we'll fight you regardless! Just like we did Sovereign. Just like I'm doing now! However insignificant we may be. We will fight! We will sacrifice! And we will find a way! That's what humans do!' - Commander Shepard" 29 | "'The Collectors attacked our ship. They took our crew, our friends. They think we're helpless. They're wrong. They started a war, but we're not here to finish it. We're here to make them regret -- to show them and everyone else what happens when you go too far. No more running, no more waiting. Let's hit them where they live.' - Commanded Shepard" 30 | "'I'm Commander Shepard and this is my favorite store on the Citadel.' - Commander Shepard" 31 | "'We don't know how many the Collectors have stolen. Thousands, hundreds of thousands. It's not important. What matters is this: Not. One. More. That's what we can do here, today. It ends with us. They want to know what we're made of? I say we show them, on our terms. Let's bring our people home.' - Commander Shepard" 32 | "'I don't trust anyone who makes more than I do.' - Joker 'Jeff' Moreau" 33 | "'We need a leader. And surround him with the brightest, the toughest, the deadliest allies we can find.' - The Illusive Man" 34 | "'An assassin is a weapon. A weapon does not choose to kill. The one who wields it does.' - Thane Krios" 35 | "'By the code, I will serve you, Shepard. Your choices are my choices. Your morals are my morals. Your wishes are my code.' - Samara" 36 | "'I'm a quarian. Give me a hunk of metal, some element zero, a circuit board, and I'll have it making precision jumps.' - Tali'Zorah vas Rayya" 37 | "'Commander can you believe this?! It's my baby, she's better than new, fits me like a glove! And leather seats!' - Joker 'Jeff' Moreau" 38 | "'You’ve done more than I could. Despite everything my father did to make me perfect, you’re... you’re the best humanity has to offer.' - Miranda Lawson" 39 | "'Good deeds are like pissing yourself in dark pants. Warm feelings, but no one notices.' - Jacob Taylor" 40 | "'I figure, every time someone dies and it's not me, my chances of survival go up.' - Jack" 41 | "'It's so much easier to see the world in black and white. Gray? I don't know what to do with gray...' - Garrus Vakarian" 42 | "'You are Shepard. Commander. Alliance. Human. Fought heretics. Killed by Collectors. Rediscovered on the Old Machine.' - Legion" 43 | "'You fight against inevitability, dust struggling against cosmic winds. This seems a victory to you, a star system sacrificed. But even now, your greatest civilizations are doomed to fall. Your leaders will beg to serve us.' - Harbinger" 44 | "'Doesn't matter who you are - you got a gun in your face, chances are good you'll do what the other man says. Only two types don't buckle at that point: trained killers and psychopaths. Lot of people can't tell the difference.' - Zaeed Massani" 45 | "'I'm the best thief in the business, not the most famous. Need to watch my step to keep it that way.' - Kasumi Goto" 46 | "'I have intel of the entire galaxy at my finger tips. Give me 10 minutes and I could start a war.' - Liara T'Soni" 47 | "'The next few hours will decide the fate of everyone in the galaxy. Every mother. Every son. Every unborn child. They're trusting you. Depending on you to win them their future. A future free from the threat of the Reapers!' - Commander Shepard" 48 | "'But take heart! Look around you! You're not in this fight alone. We face our enemy together, and together, we will defeat them!' - Commander Shepard" 49 | "'Forgive the insubordination, but this old friend has an order for you... Go out there and give them hell. You were born to do this.' - Garrus Vakarian" 50 | "'Never before have so many come together from all quarters of the galaxy. But never before have we faced an enemy such as this. The Reapers will show us no mercy. We must give them no quarter. They will terrorize our populations. We must stand fast in the face of that terror. They will advance until our last city falls, but we will not fall. We will prevail. Each of us will be defined by our actions in the coming battle. Stand fast. Stand strong. Stand together. Hackett out.' - Admiral Hackett" 51 | "'That's why I love hanging out with you guys. Why shoot something once, when you can shoot it 46 more times?!' - Urdnot Wrex" 52 | "'Commander, didn't you tell Cerberus to go to hell after you destroyed the Collector Base?' - James Vega" 53 | "'Shepard's right. Humanity is ready to do its part. United with the rest of the Council, we have the strength to overcome any obstacle. When the Reapers come, we must stand side by side. We must fight against them as one. And together we can drive them back into dark space!' - David Anderson" 54 | "'Human, you’ve changed nothing. Your species has the attention of those infinitely your greater. That which you know as Reapers are your salvation through destruction.' - Harbinger" 55 | "'Just because I can drill you between the eyes at a hundred meters, doesn't mean I can't like sensitive stuff.' - Ashley Williams" 56 | "'But sometimes the way things go down does matter, Shepard. Later, when you have to live with yourself. Knowing that you acted with integrity -- then it matters.' - Kaiden Alenko" 57 | )) 58 | -------------------------------------------------------------------------------- /.config/fish/config-linux.fish: -------------------------------------------------------------------------------- 1 | # Update PATH 2 | add-to-path ~/.bin/linux 3 | add-to-path $HOME/bin 4 | add-to-path $HOME/.local/bin 5 | add-to-path $HOME/_store/Vault/binaries/_links 6 | 7 | # Set up aliases 8 | alias mt-copy="xsel --clipboard --input" 9 | alias mt-paste="xsel --clipboard --output" 10 | 11 | # TODO: Implement aliases with wl-clipboard for Wayland 12 | -------------------------------------------------------------------------------- /.config/fish/config-mac.fish: -------------------------------------------------------------------------------- 1 | # Update PATH for custom shell scripts for Mac 2 | add-to-path ~/.bin/mac 3 | 4 | # Update PATH 5 | add-to-path /opt/homebrew/bin 6 | 7 | # Set up aliases 8 | # (None for now) -------------------------------------------------------------------------------- /.config/fish/config.fish: -------------------------------------------------------------------------------- 1 | # Run startup script(s), for a login shell 2 | status is-login 3 | and test -f ~/.mt-tag 4 | and ~/.scripts/linux/startup/cli 5 | 6 | # Update PATH for custom shell scripts 7 | add-to-path ~/.bin 8 | 9 | # Set custom environment variables 10 | set -x MT_PATH_STORE ~/_store 11 | set -x MT_PATH_WORKSPACE ~/_workspace 12 | set -x MT_PATH_WORKSPACE_GITHUB $MT_PATH_WORKSPACE/github 13 | 14 | # Set a few variables for fish 15 | set fish_greeting "" 16 | 17 | # Load private keys, if they exist 18 | if test -e "$MT_PATH_STORE/Vault/.private-keys" 19 | . "$MT_PATH_STORE/Vault/.private-keys" 20 | end 21 | 22 | # Set up common aliases 23 | alias cl="clear" 24 | alias gt="clear; git" 25 | alias mt-sync-github="mt-sync-projects $MT_PATH_WORKSPACE_GITHUB" 26 | alias lo="lsd -l --group-dirs first" 27 | alias po="bat" 28 | 29 | # Load configs for the current OS 30 | if test (uname) = "Linux" 31 | . ~/.config/fish/config-linux.fish 32 | else if test (uname) = "Darwin" 33 | . ~/.config/fish/config-mac.fish 34 | end 35 | 36 | # Start a tmux session if appropriate 37 | if not contains $TERM "screen" "screen-256color" "eterm-color" "dumb" 38 | tmux 39 | end 40 | -------------------------------------------------------------------------------- /.config/fish/functions/add-to-path.fish: -------------------------------------------------------------------------------- 1 | function add-to-path 2 | if not contains $argv $PATH 3 | set -gx PATH $PATH $argv 4 | end 5 | end -------------------------------------------------------------------------------- /.config/fish/functions/cx.fish: -------------------------------------------------------------------------------- 1 | function cx 2 | clear && cd $argv && lo 3 | end -------------------------------------------------------------------------------- /.config/fish/functions/fish_prompt.fish: -------------------------------------------------------------------------------- 1 | function fish_prompt 2 | # This prompt shows: 3 | # - green lines if the last return command is OK, red otherwise 4 | # - your user name, in red if root or yellow otherwise 5 | # - your hostname, in cyan if ssh or blue otherwise 6 | # - the current path (with prompt_pwd) 7 | # - date +%X 8 | # - the current virtual environment, if any 9 | # - the current git status, if any, with fish_git_prompt 10 | # - the current battery state, if any, and if your power cable is unplugged, and if you have "acpi" 11 | # - current background jobs, if any 12 | 13 | # It goes from: 14 | # ┬─[nim@Hattori:~]─[11:39:00] 15 | # ╰─>$ echo here 16 | 17 | # To: 18 | # ┬─[nim@Hattori:~/w/dashboard]─[11:37:14]─[V:django20]─[G:master↑1|●1✚1…1]─[B:85%, 05:41:42 remaining] 19 | # │ 2 15054 0% arrêtée sleep 100000 20 | # │ 1 15048 0% arrêtée sleep 100000 21 | # ╰─>$ echo there 22 | 23 | set -l retc red 24 | test $status = 0; and set retc green 25 | 26 | set -q __fish_git_prompt_showupstream 27 | or set -g __fish_git_prompt_showupstream auto 28 | 29 | function _nim_prompt_wrapper 30 | set retc $argv[1] 31 | set -l field_name $argv[2] 32 | set -l field_value $argv[3] 33 | 34 | set_color normal 35 | set_color $retc 36 | echo -n '─' 37 | set_color -o green 38 | echo -n '[' 39 | set_color normal 40 | test -n $field_name 41 | and echo -n $field_name: 42 | set_color $retc 43 | echo -n $field_value 44 | set_color -o green 45 | echo -n ']' 46 | end 47 | 48 | set_color $retc 49 | echo -n '┬─' 50 | set_color -o green 51 | echo -n [ 52 | 53 | if functions -q fish_is_root_user; and fish_is_root_user 54 | set_color -o red 55 | else 56 | set_color -o yellow 57 | end 58 | 59 | echo -n $USER 60 | set_color -o white 61 | echo -n @ 62 | 63 | if test -z "$SSH_CLIENT" 64 | set_color -o blue 65 | else 66 | set_color -o cyan 67 | end 68 | 69 | echo -n (prompt_hostname) 70 | set_color -o white 71 | echo -n :(prompt_pwd) 72 | set_color -o green 73 | echo -n ']' 74 | 75 | # Date 76 | _nim_prompt_wrapper $retc '' (date +%X) 77 | 78 | # Vi-mode 79 | # The default mode prompt would be prefixed, which ruins our alignment. 80 | function fish_mode_prompt 81 | end 82 | 83 | if test "$fish_key_bindings" = fish_vi_key_bindings 84 | or test "$fish_key_bindings" = fish_hybrid_key_bindings 85 | set -l mode 86 | switch $fish_bind_mode 87 | case default 88 | set mode (set_color --bold red)N 89 | case insert 90 | set mode (set_color --bold green)I 91 | case replace_one 92 | set mode (set_color --bold green)R 93 | echo '[R]' 94 | case replace 95 | set mode (set_color --bold cyan)R 96 | case visual 97 | set mode (set_color --bold magenta)V 98 | end 99 | set mode $mode(set_color normal) 100 | _nim_prompt_wrapper $retc '' $mode 101 | end 102 | 103 | 104 | # Virtual Environment 105 | set -q VIRTUAL_ENV_DISABLE_PROMPT 106 | or set -g VIRTUAL_ENV_DISABLE_PROMPT true 107 | set -q VIRTUAL_ENV 108 | and _nim_prompt_wrapper $retc V (basename "$VIRTUAL_ENV") 109 | 110 | # git 111 | set -l prompt_git (fish_git_prompt '%s') 112 | test -n "$prompt_git" 113 | and _nim_prompt_wrapper $retc G $prompt_git 114 | 115 | # Battery status 116 | type -q acpi 117 | and test (acpi -a 2> /dev/null | string match -r off) 118 | and _nim_prompt_wrapper $retc B (acpi -b | cut -d' ' -f 4-) 119 | 120 | # New line 121 | echo 122 | 123 | # Background jobs 124 | set_color normal 125 | 126 | for job in (jobs) 127 | set_color $retc 128 | echo -n '│ ' 129 | set_color brown 130 | echo $job 131 | end 132 | 133 | set_color normal 134 | set_color $retc 135 | echo -n '╰─>' 136 | set_color -o red 137 | echo -n '$ ' 138 | set_color normal 139 | end 140 | -------------------------------------------------------------------------------- /.config/foot/foot.ini: -------------------------------------------------------------------------------- 1 | # -*- conf -*- 2 | 3 | # shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) 4 | # term=foot (or xterm-256color if built with -Dterminfo=disabled) 5 | # login-shell=no 6 | 7 | # app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode 8 | # title=foot 9 | # locked-title=no 10 | 11 | font=robotomono:size=14 12 | # font-bold= 13 | # font-italic= 14 | # font-bold-italic= 15 | # font-size-adjustment=0.5 16 | # line-height= 17 | # letter-spacing=0 18 | # horizontal-letter-offset=0 19 | # vertical-letter-offset=0 20 | # underline-offset= 21 | # underline-thickness= 22 | # box-drawings-uses-font-glyphs=no 23 | # dpi-aware=no 24 | 25 | # initial-window-size-pixels=700x500 # Or, 26 | # initial-window-size-chars= 27 | # initial-window-mode=windowed 28 | # pad=0x0 # optionally append 'center' 29 | # resize-delay-ms=100 30 | 31 | # notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} 32 | 33 | # bold-text-in-bright=no 34 | # word-delimiters=,│`|:"'()[]{}<> 35 | # selection-target=primary 36 | # workers= 37 | # utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux) 38 | # utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD) 39 | 40 | [environment] 41 | # name=value 42 | 43 | [bell] 44 | # urgent=no 45 | # notify=no 46 | # visual=no 47 | # command= 48 | # command-focused=no 49 | 50 | [scrollback] 51 | # lines=1000 52 | # multiplier=3.0 53 | # indicator-position=relative 54 | # indicator-format="" 55 | 56 | [url] 57 | # launch=xdg-open ${url} 58 | # label-letters=sadfjklewcmpgh 59 | # osc8-underline=url-mode 60 | # protocols=http, https, ftp, ftps, file, gemini, gopher 61 | # uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[] 62 | 63 | [cursor] 64 | # style=block 65 | # color= 66 | blink=yes 67 | # beam-thickness=1.5 68 | # underline-thickness= 69 | 70 | [mouse] 71 | # hide-when-typing=no 72 | # alternate-scroll-mode=yes 73 | 74 | [touch] 75 | # long-press-delay=400 76 | 77 | [colors] 78 | # alpha=1.0 79 | # background=242424 80 | # foreground=ffffff 81 | # flash=7f7f00 82 | # flash-alpha=0.5 83 | 84 | ## Normal/regular colors (color palette 0-7) 85 | # regular0=242424 # black 86 | # regular1=f62b5a # red 87 | # regular2=47b413 # green 88 | # regular3=e3c401 # yellow 89 | # regular4=24acd4 # blue 90 | # regular5=f2affd # magenta 91 | # regular6=13c299 # cyan 92 | # regular7=e6e6e6 # white 93 | 94 | ## Bright colors (color palette 8-15) 95 | # bright0=616161 # bright black 96 | # bright1=ff4d51 # bright red 97 | # bright2=35d450 # bright green 98 | # bright3=e9e836 # bright yellow 99 | # bright4=5dc5f8 # bright blue 100 | # bright5=feabf2 # bright magenta 101 | # bright6=24dfc4 # bright cyan 102 | # bright7=ffffff # bright white 103 | 104 | ## dimmed colors (see foot.ini(5) man page) 105 | # dim0= 106 | # ... 107 | # dim7= 108 | 109 | ## The remaining 256-color palette 110 | # 16 = <256-color palette #16> 111 | # ... 112 | # 255 = <256-color palette #255> 113 | 114 | ## Misc colors 115 | # selection-foreground= 116 | # selection-background= 117 | # jump-labels= # black-on-yellow 118 | # scrollback-indicator= # black-on-bright-blue 119 | # search-box-no-match= # black-on-red 120 | # search-box-match= # black-on-yellow 121 | # urls= 122 | 123 | [csd] 124 | # preferred=server 125 | # size=26 126 | # font= 127 | # color= 128 | # hide-when-maximized=no 129 | # double-click-to-maximize=yes 130 | # border-width=0 131 | # border-color= 132 | # button-width=26 133 | # button-color= 134 | # button-minimize-color= 135 | # button-maximize-color= 136 | # button-close-color= 137 | 138 | [key-bindings] 139 | # scrollback-up-page=Shift+Page_Up 140 | # scrollback-up-half-page=none 141 | # scrollback-up-line=none 142 | # scrollback-down-page=Shift+Page_Down 143 | # scrollback-down-half-page=none 144 | # scrollback-down-line=none 145 | # scrollback-home=none 146 | # scrollback-end=none 147 | # clipboard-copy=Control+Shift+c XF86Copy 148 | # clipboard-paste=Control+Shift+v XF86Paste 149 | # primary-paste=Shift+Insert 150 | # search-start=Control+Shift+r 151 | # font-increase=Control+plus Control+equal Control+KP_Add 152 | # font-decrease=Control+minus Control+KP_Subtract 153 | # font-reset=Control+0 Control+KP_0 154 | # spawn-terminal=Control+Shift+n 155 | # minimize=none 156 | # maximize=none 157 | # fullscreen=none 158 | # pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none 159 | # pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none 160 | # pipe-selected=[xargs -r firefox] none 161 | # show-urls-launch=Control+Shift+o 162 | # show-urls-copy=none 163 | # show-urls-persistent=none 164 | # prompt-prev=Control+Shift+z 165 | # prompt-next=Control+Shift+x 166 | # unicode-input=Control+Shift+u 167 | # noop=none 168 | 169 | [search-bindings] 170 | # cancel=Control+g Control+c Escape 171 | # commit=Return 172 | # find-prev=Control+r 173 | # find-next=Control+s 174 | # cursor-left=Left Control+b 175 | # cursor-left-word=Control+Left Mod1+b 176 | # cursor-right=Right Control+f 177 | # cursor-right-word=Control+Right Mod1+f 178 | # cursor-home=Home Control+a 179 | # cursor-end=End Control+e 180 | # delete-prev=BackSpace 181 | # delete-prev-word=Mod1+BackSpace Control+BackSpace 182 | # delete-next=Delete 183 | # delete-next-word=Mod1+d Control+Delete 184 | # extend-char=Shift+Right 185 | # extend-to-word-boundary=Control+w Control+Shift+Right 186 | # extend-to-next-whitespace=Control+Shift+w 187 | # extend-line-down=Shift+Down 188 | # extend-backward-char=Shift+Left 189 | # extend-backward-to-word-boundary=Control+Shift+Left 190 | # extend-backward-to-next-whitespace=none 191 | # extend-line-up=Shift+Up 192 | # clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste 193 | # primary-paste=Shift+Insert 194 | # unicode-input=none 195 | # scrollback-up-page=Shift+Page_Up 196 | # scrollback-up-half-page=none 197 | # scrollback-up-line=none 198 | # scrollback-down-page=Shift+Page_Down 199 | # scrollback-down-half-page=none 200 | # scrollback-down-line=none 201 | # scrollback-home=none 202 | # scrollback-end=none 203 | 204 | [url-bindings] 205 | # cancel=Control+g Control+c Control+d Escape 206 | # toggle-url-visible=t 207 | 208 | [text-bindings] 209 | # \x03=Mod4+c # Map Super+c -> Ctrl+c 210 | 211 | [mouse-bindings] 212 | # scrollback-up-mouse=BTN_BACK 213 | # scrollback-down-mouse=BTN_FORWARD 214 | # selection-override-modifiers=Shift 215 | # primary-paste=BTN_MIDDLE 216 | # select-begin=BTN_LEFT 217 | # select-begin-block=Control+BTN_LEFT 218 | # select-extend=BTN_RIGHT 219 | # select-extend-character-wise=Control+BTN_RIGHT 220 | # select-word=BTN_LEFT-2 221 | # select-word-whitespace=Control+BTN_LEFT-2 222 | # select-quote = BTN_LEFT-3 223 | # select-row=BTN_LEFT-4 224 | 225 | # vim: ft=dosini 226 | -------------------------------------------------------------------------------- /.config/gtk-3.0/bookmarks: -------------------------------------------------------------------------------- 1 | file:///home/ismail/Downloads 2 | file:///home/ismail/_store 3 | file:///home/ismail/_store/Camera 4 | file:///home/ismail/_store/Vault 5 | file:///home/ismail/_store/Vault-Mobile 6 | -------------------------------------------------------------------------------- /.config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-theme-name=Obsidian-2-Gray 3 | gtk-icon-theme-name=Obsidian-Sand 4 | gtk-font-name=Open Sans Light 11 5 | gtk-cursor-theme-name=Bibata-Original-Classic 6 | gtk-cursor-theme-size=48 7 | gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ 8 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 9 | gtk-button-images=0 10 | gtk-menu-images=0 11 | gtk-enable-event-sounds=1 12 | gtk-enable-input-feedback-sounds=0 13 | gtk-xft-antialias=1 14 | gtk-xft-hinting=1 15 | gtk-xft-hintstyle=hintslight 16 | gtk-xft-rgba=none 17 | gtk-modules=canberra-gtk-module 18 | gtk-application-prefer-dark-theme=0 19 | -------------------------------------------------------------------------------- /.config/rofi/config.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | /* modi: "window,run,ssh";*/ 3 | font: "Liberation Mono 15"; 4 | /* location: 0;*/ 5 | /* yoffset: 0;*/ 6 | /* xoffset: 0;*/ 7 | /* fixed-num-lines: true;*/ 8 | show-icons: true; 9 | /* terminal: "rofi-sensible-terminal";*/ 10 | /* ssh-client: "ssh";*/ 11 | /* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/ 12 | /* run-command: "{cmd}";*/ 13 | /* run-list-command: "";*/ 14 | /* run-shell-command: "{terminal} -e {cmd}";*/ 15 | /* window-command: "wmctrl -i -R {window}";*/ 16 | /* window-match-fields: "all";*/ 17 | /* icon-theme: ;*/ 18 | /* drun-match-fields: "name,generic,exec,categories,keywords";*/ 19 | /* drun-categories: ;*/ 20 | /* drun-show-actions: false;*/ 21 | /* drun-display-format: "{name} [({generic})]";*/ 22 | /* drun-url-launcher: "xdg-open";*/ 23 | /* disable-history: false;*/ 24 | /* ignored-prefixes: "";*/ 25 | /* sort: false;*/ 26 | /* sorting-method: "normal";*/ 27 | /* case-sensitive: false;*/ 28 | /* cycle: true;*/ 29 | sidebar-mode: true; 30 | /* hover-select: false;*/ 31 | /* eh: 1;*/ 32 | /* auto-select: false;*/ 33 | /* parse-hosts: false;*/ 34 | /* parse-known-hosts: true;*/ 35 | /* combi-modi: "window,run";*/ 36 | /* matching: "normal";*/ 37 | /* tokenize: true;*/ 38 | /* m: "-5";*/ 39 | /* filter: ;*/ 40 | /* dpi: -1;*/ 41 | /* threads: 0;*/ 42 | /* scroll-method: 0;*/ 43 | /* window-format: "{w} {c} {t}";*/ 44 | /* click-to-exit: true;*/ 45 | /* theme: ;*/ 46 | /* max-history-size: 25;*/ 47 | /* combi-hide-mode-prefix: false;*/ 48 | /* matching-negate-char: '-' /* unsupported */;*/ 49 | /* cache-dir: ;*/ 50 | /* window-thumbnail: false;*/ 51 | /* drun-use-desktop-cache: false;*/ 52 | /* drun-reload-desktop-cache: false;*/ 53 | /* normalize-match: false;*/ 54 | /* steal-focus: false;*/ 55 | /* application-fallback-icon: ;*/ 56 | /* pid: "/run/user/1000/rofi.pid";*/ 57 | /* display-window: ;*/ 58 | /* display-windowcd: ;*/ 59 | /* display-run: ;*/ 60 | /* display-ssh: ;*/ 61 | /* display-drun: ;*/ 62 | /* display-combi: ;*/ 63 | /* display-keys: ;*/ 64 | /* display-filebrowser: ;*/ 65 | /* kb-primary-paste: "Control+V,Shift+Insert";*/ 66 | /* kb-secondary-paste: "Control+v,Insert";*/ 67 | /* kb-clear-line: "Control+w";*/ 68 | /* kb-move-front: "Control+a";*/ 69 | /* kb-move-end: "Control+e";*/ 70 | /* kb-move-word-back: "Alt+b,Control+Left";*/ 71 | /* kb-move-word-forward: "Alt+f,Control+Right";*/ 72 | /* kb-move-char-back: "Left,Control+b";*/ 73 | /* kb-move-char-forward: "Right,Control+f";*/ 74 | /* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/ 75 | /* kb-remove-word-forward: "Control+Alt+d";*/ 76 | /* kb-remove-char-forward: "Delete,Control+d";*/ 77 | /* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/ 78 | /* kb-remove-to-eol: "Control+k";*/ 79 | /* kb-remove-to-sol: "Control+u";*/ 80 | /* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/ 81 | /* kb-accept-custom: "Control+Return";*/ 82 | /* kb-accept-custom-alt: "Control+Shift+Return";*/ 83 | /* kb-accept-alt: "Shift+Return";*/ 84 | /* kb-delete-entry: "Shift+Delete";*/ 85 | /* kb-mode-next: "Shift+Right,Control+Tab";*/ 86 | /* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/ 87 | /* kb-mode-complete: "Control+l";*/ 88 | /* kb-row-left: "Control+Page_Up";*/ 89 | /* kb-row-right: "Control+Page_Down";*/ 90 | /* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/ 91 | /* kb-row-down: "Down,Control+n";*/ 92 | /* kb-row-tab: "Tab";*/ 93 | /* kb-page-prev: "Page_Up";*/ 94 | /* kb-page-next: "Page_Down";*/ 95 | /* kb-row-first: "Home,KP_Home";*/ 96 | /* kb-row-last: "End,KP_End";*/ 97 | /* kb-row-select: "Control+space";*/ 98 | /* kb-screenshot: "Alt+S";*/ 99 | /* kb-ellipsize: "Alt+period";*/ 100 | /* kb-toggle-case-sensitivity: "grave,dead_grave";*/ 101 | /* kb-toggle-sort: "Alt+grave";*/ 102 | /* kb-cancel: "Escape,Control+g,Control+bracketleft";*/ 103 | /* kb-custom-1: "Alt+1";*/ 104 | /* kb-custom-2: "Alt+2";*/ 105 | /* kb-custom-3: "Alt+3";*/ 106 | /* kb-custom-4: "Alt+4";*/ 107 | /* kb-custom-5: "Alt+5";*/ 108 | /* kb-custom-6: "Alt+6";*/ 109 | /* kb-custom-7: "Alt+7";*/ 110 | /* kb-custom-8: "Alt+8";*/ 111 | /* kb-custom-9: "Alt+9";*/ 112 | /* kb-custom-10: "Alt+0";*/ 113 | /* kb-custom-11: "Alt+exclam";*/ 114 | /* kb-custom-12: "Alt+at";*/ 115 | /* kb-custom-13: "Alt+numbersign";*/ 116 | /* kb-custom-14: "Alt+dollar";*/ 117 | /* kb-custom-15: "Alt+percent";*/ 118 | /* kb-custom-16: "Alt+dead_circumflex";*/ 119 | /* kb-custom-17: "Alt+ampersand";*/ 120 | /* kb-custom-18: "Alt+asterisk";*/ 121 | /* kb-custom-19: "Alt+parenleft";*/ 122 | /* kb-select-1: "Super+1";*/ 123 | /* kb-select-2: "Super+2";*/ 124 | /* kb-select-3: "Super+3";*/ 125 | /* kb-select-4: "Super+4";*/ 126 | /* kb-select-5: "Super+5";*/ 127 | /* kb-select-6: "Super+6";*/ 128 | /* kb-select-7: "Super+7";*/ 129 | /* kb-select-8: "Super+8";*/ 130 | /* kb-select-9: "Super+9";*/ 131 | /* kb-select-10: "Super+0";*/ 132 | /* ml-row-left: "ScrollLeft";*/ 133 | /* ml-row-right: "ScrollRight";*/ 134 | /* ml-row-up: "ScrollUp";*/ 135 | /* ml-row-down: "ScrollDown";*/ 136 | /* me-select-entry: "MousePrimary";*/ 137 | /* me-accept-entry: "MouseDPrimary";*/ 138 | /* me-accept-custom: "Control+MouseDPrimary";*/ 139 | timeout { 140 | action: "kb-cancel"; 141 | delay: 0; 142 | } 143 | filebrowser { 144 | directories-first: true; 145 | sorting-method: "name"; 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /.config/waybar/config: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "layer": "bottom", 4 | "position": "top", 5 | "height": 30, 6 | "spacing": 4, 7 | "modules-left": [ 8 | "sway/workspaces", 9 | "sway/mode" 10 | ], 11 | "modules-center": [ 12 | "sway/window" 13 | ], 14 | "modules-right": [ 15 | "idle_inhibitor", 16 | "network", 17 | "clock#kolkata", 18 | "clock#chicago", 19 | "clock", 20 | "tray" 21 | ], 22 | "sway/mode": { 23 | "format": "{}" 24 | }, 25 | "idle_inhibitor": { 26 | "format": "{icon}", 27 | "format-icons": { 28 | "activated": "", 29 | "deactivated": "" 30 | } 31 | }, 32 | "network": { 33 | "format-wifi": " {essid} ({signalStrength}%)", 34 | "format-ethernet": " {ipaddr}/{cidr}", 35 | "tooltip-format": " {ifname} via {gwaddr}", 36 | "format-linked": " {ifname} (No IP)", 37 | "format-disconnected": "⚠ Disconnected", 38 | "format-alt": "{ifname}: {ipaddr}/{cidr}  {bandwidthUpBytes},  {bandwidthDownBytes}" 39 | }, 40 | "clock": { 41 | "format": "Local  {:%Y-%m-%d; %H:%M}", 42 | "tooltip-format": "{calendar}" 43 | }, 44 | "clock#kolkata": { 45 | "timezone": "Asia/Kolkata", 46 | "format": "K ", 47 | "format-alt": "Kolkata  {:%H:%M}" 48 | }, 49 | "clock#chicago": { 50 | "timezone": "America/Chicago", 51 | "format": "C ", 52 | "format-alt": "Chicago  {:%H:%M}" 53 | }, 54 | "tray": { 55 | "icon-size": 24, 56 | "spacing": 10 57 | } 58 | }, 59 | { 60 | "layer": "bottom", 61 | "position": "bottom", 62 | "height": 30, 63 | "spacing": 4, 64 | "modules-left": [ 65 | "custom/session", 66 | "wlr/taskbar" 67 | ], 68 | "modules-center": [], 69 | "modules-right": [ 70 | "temperature", 71 | "cpu#load", 72 | "cpu#usage", 73 | "memory", 74 | "disk#root", 75 | "disk#home", 76 | "backlight", 77 | "keyboard-state", 78 | "pulseaudio", 79 | "battery", 80 | "battery#bat1", 81 | "battery#bat2" 82 | ], 83 | "custom/session": { 84 | "exec": "echo ${USER} @ $(cat /etc/hostname)", 85 | "format": "{}" 86 | }, 87 | "wlr/taskbar": { 88 | "format": "{icon}", 89 | "icon-size": 20, 90 | "icon-theme": "Numix-Circle", 91 | "tooltip-format": "{title}", 92 | "on-click": "activate", 93 | "on-click-middle": "close", 94 | "ignore-list": [ 95 | "foot" 96 | ] 97 | }, 98 | "temperature": { 99 | "critical-threshold": 70, 100 | "format": "{icon} {temperatureC}°C", 101 | "format-critical": " {temperatureC}°C", 102 | "format-icons": ["", "", ""] 103 | }, 104 | "cpu#load": { 105 | "format": " {load}", 106 | "tooltip": false 107 | }, 108 | "cpu#usage": { 109 | "format": " {usage}% @ {avg_frequency}GHz", 110 | "tooltip": false 111 | }, 112 | "memory": { 113 | "format": " {}%" 114 | }, 115 | "disk#root": { 116 | "interval": 30, 117 | "format": " {path}: {percentage_used}%", 118 | "format-alt": " {path}: {percentage_used}% (Free: {free})", 119 | "path": "/" 120 | }, 121 | "disk#home": { 122 | "interval": 30, 123 | "format": " {path}: {percentage_used}%", 124 | "format-alt": " {path}: {percentage_used}% (Free: {free})", 125 | "path": "/home" 126 | }, 127 | "backlight": { 128 | // "device": "acpi_video1", 129 | "format": "{icon} {percent}%", 130 | "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"] 131 | }, 132 | "keyboard-state": { 133 | "numlock": true, 134 | "capslock": true, 135 | "format": "{icon} {name}", 136 | "format-icons": { 137 | "locked": "", 138 | "unlocked": "" 139 | } 140 | }, 141 | "pulseaudio": { 142 | // "scroll-step": 1, // %, can be a float 143 | "format": "{icon} {volume}% {format_source}", 144 | "format-bluetooth": "{icon} {volume}%  {format_source}", 145 | "format-bluetooth-muted": " {icon}  {format_source}", 146 | "format-muted": " {format_source}", 147 | "format-source": " {volume}%", 148 | "format-source-muted": "", 149 | "format-icons": { 150 | "headphone": "", 151 | "hands-free": "", 152 | "headset": "", 153 | "phone": "", 154 | "portable": "", 155 | "car": "", 156 | "default": ["", "", ""] 157 | }, 158 | "on-click": "pavucontrol" 159 | }, 160 | "battery": { 161 | "states": { 162 | // "good": 95, 163 | "warning": 30, 164 | "critical": 15 165 | }, 166 | "format": "{icon} {capacity}% ({power}W)", 167 | "format-charging": " {capacity}% ({power}W)", 168 | "format-plugged": " {capacity}%", 169 | "format-alt": "{icon} {time}", 170 | // "format-good": "", // An empty format will hide the module 171 | // "format-full": "", 172 | "format-icons": ["", "", "", "", ""] 173 | }, 174 | "battery#bat1": { 175 | "bat": "BAT1" 176 | }, 177 | "battery#bat2": { 178 | "bat": "BAT2" 179 | } 180 | } 181 | ] 182 | -------------------------------------------------------------------------------- /.config/waybar/style.css: -------------------------------------------------------------------------------- 1 | 2 | @keyframes blink-warning { 3 | 70% { 4 | color: white; 5 | } 6 | 7 | to { 8 | color: white; 9 | background-color: orange; 10 | } 11 | } 12 | 13 | @keyframes blink-critical { 14 | 70% { 15 | color: white; 16 | } 17 | 18 | to { 19 | color: white; 20 | background-color: red; 21 | } 22 | } 23 | 24 | * { 25 | border: none; 26 | border-radius: 0; 27 | min-height: 0; 28 | margin: 0; 29 | padding: 0; 30 | } 31 | 32 | #waybar { 33 | background: #000000; 34 | color: #dddddd; 35 | font-family: "Open Sans"; 36 | font-size: 13pt; 37 | } 38 | 39 | #custom-session { 40 | margin: 3px 0; 41 | padding: 0 10px; 42 | border-right: 2px solid #323232; 43 | } 44 | 45 | #window { 46 | padding: 0 10px; 47 | } 48 | 49 | #idle_inhibitor, 50 | #network, 51 | #clock, 52 | #tray, 53 | #temperature, 54 | #cpu, 55 | #memory, 56 | #disk, 57 | #backlight, 58 | #pulseaudio, 59 | #battery { 60 | border-left: 2px solid #323232; 61 | } 62 | 63 | #idle_inhibitor, 64 | #network, 65 | #clock, 66 | #tray, 67 | #taskbar, 68 | #temperature, 69 | #cpu, 70 | #memory, 71 | #disk, 72 | #backlight, 73 | #pulseaudio, 74 | #battery { 75 | margin: 3px 0; 76 | padding: 0 10px; 77 | } 78 | 79 | #mode { 80 | background: #ff8800; 81 | color: #ffffff; 82 | font-weight: bold; 83 | border: 2px solid white; 84 | padding: 0 10px; 85 | } 86 | 87 | #window { 88 | font-weight: bold; 89 | } 90 | 91 | #workspaces button { 92 | border-top: 2px solid transparent; 93 | padding-bottom: 2px; 94 | padding-left: 10px; 95 | padding-right: 10px; 96 | background-color: #323232; 97 | color: #cccccc; 98 | } 99 | 100 | #workspaces button.focused { 101 | border-color: #83d0c9; 102 | background-color: #83d0c9; 103 | } 104 | 105 | #workspaces button.focused > * { 106 | color: #000000; 107 | } 108 | 109 | #workspaces button.urgent { 110 | border-color: #ffffff; 111 | background-color: #c9545d; 112 | color: #ffffff; 113 | } 114 | 115 | #network.disconnected { 116 | color: orange; 117 | } 118 | 119 | #cpu.warning { 120 | color: orange; 121 | } 122 | 123 | #cpu.critical { 124 | color: red; 125 | } 126 | 127 | #taskbar > * { 128 | padding: 0 5px; 129 | } 130 | 131 | #temperature.critical { 132 | color: red; 133 | } 134 | 135 | #memory { 136 | animation-timing-function: linear; 137 | animation-iteration-count: infinite; 138 | animation-direction: alternate; 139 | } 140 | 141 | #memory.warning { 142 | color: orange; 143 | } 144 | 145 | #memory.critical { 146 | color: red; 147 | animation-name: blink-critical; 148 | animation-duration: 2s; 149 | } 150 | 151 | #battery { 152 | animation-timing-function: linear; 153 | animation-iteration-count: infinite; 154 | animation-direction: alternate; 155 | } 156 | 157 | #battery.warning { 158 | color: orange; 159 | } 160 | 161 | #battery.critical { 162 | color: red; 163 | } 164 | 165 | #battery.warning.discharging { 166 | animation-name: blink-warning; 167 | animation-duration: 3s; 168 | } 169 | 170 | #battery.critical.discharging { 171 | animation-name: blink-critical; 172 | animation-duration: 2s; 173 | } 174 | -------------------------------------------------------------------------------- /.config/wm/common: -------------------------------------------------------------------------------- 1 | # This file has been auto-generated by i3-config-wizard(1). 2 | # It will not be overwritten, so edit it as you like. 3 | # 4 | # Should you change your keyboard layout some time, delete 5 | # this file and re-run i3-config-wizard(1). 6 | # 7 | 8 | # i3 config file (v4) 9 | # 10 | # Please see https://i3wm.org/docs/userguide.html for a complete reference! 11 | 12 | set $mod Mod4 13 | 14 | # Font for window titles. Will also be used by the bar unless a different font 15 | # is used in the bar {} block below. 16 | font pango:Open Sans, FontAwesome 13 17 | 18 | # NetworkManager is the most popular way to manage wireless networks on Linux, 19 | # and nm-applet is a desktop environment-independent system tray GUI for it. 20 | exec --no-startup-id nm-applet 21 | 22 | # Use pactl to adjust volume in PulseAudio. 23 | set $refresh_i3status killall -SIGUSR1 i3status 24 | bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status 25 | bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status 26 | bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status 27 | bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status 28 | 29 | # Bind screen-brightness controls 30 | bindsym XF86MonBrightnessUp exec brightnessctl s +5% 31 | bindsym XF86MonBrightnessDown exec brightnessctl s 5%- 32 | 33 | # Media player controls 34 | bindsym XF86AudioPlay exec clementine --play-pause 35 | bindsym XF86AudioPause exec clementine --pause 36 | bindsym XF86AudioNext exec clementine --next 37 | bindsym XF86AudioPrev exec clementine --previous 38 | 39 | # Use Mouse+$mod to drag floating windows to their wanted position 40 | floating_modifier $mod 41 | 42 | # kill focused window 43 | bindsym $mod+Shift+q kill 44 | 45 | # change focus 46 | bindsym $mod+j focus left 47 | bindsym $mod+k focus down 48 | bindsym $mod+l focus up 49 | bindsym $mod+semicolon focus right 50 | 51 | # alternatively, you can use the cursor keys: 52 | bindsym $mod+Left focus left 53 | bindsym $mod+Down focus down 54 | bindsym $mod+Up focus up 55 | bindsym $mod+Right focus right 56 | 57 | # move focused window 58 | bindsym $mod+Shift+j move left 59 | bindsym $mod+Shift+k move down 60 | bindsym $mod+Shift+l move up 61 | bindsym $mod+Shift+semicolon move right 62 | 63 | # alternatively, you can use the cursor keys: 64 | bindsym $mod+Shift+Left move left 65 | bindsym $mod+Shift+Down move down 66 | bindsym $mod+Shift+Up move up 67 | bindsym $mod+Shift+Right move right 68 | 69 | # split in horizontal orientation 70 | bindsym $mod+h split h 71 | 72 | # split in vertical orientation 73 | bindsym $mod+v split v 74 | 75 | # enter fullscreen mode for the focused container 76 | bindsym $mod+f fullscreen toggle 77 | 78 | # change container layout (stacked, tabbed, toggle split) 79 | bindsym $mod+s layout stacking 80 | bindsym $mod+w layout tabbed 81 | bindsym $mod+e layout toggle split 82 | 83 | # toggle tiling / floating 84 | bindsym $mod+Shift+space floating toggle 85 | 86 | # change focus between tiling / floating windows 87 | bindsym $mod+space focus mode_toggle 88 | 89 | # focus the parent container 90 | bindsym $mod+a focus parent 91 | 92 | # focus the child container 93 | #bindsym $mod+d focus child 94 | 95 | # reload the configuration file 96 | bindsym $mod+Shift+c reload 97 | # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) 98 | bindsym $mod+Shift+r restart 99 | 100 | # resize window (you can also use the mouse for that) 101 | mode "resize" { 102 | # These bindings trigger as soon as you enter the resize mode 103 | 104 | # Pressing left will shrink the window’s width. 105 | # Pressing right will grow the window’s width. 106 | # Pressing up will shrink the window’s height. 107 | # Pressing down will grow the window’s height. 108 | bindsym j resize shrink width 10 px or 10 ppt 109 | bindsym k resize grow height 10 px or 10 ppt 110 | bindsym l resize shrink height 10 px or 10 ppt 111 | bindsym semicolon resize grow width 10 px or 10 ppt 112 | 113 | # same bindings, but for the arrow keys 114 | bindsym Left resize shrink width 10 px or 10 ppt 115 | bindsym Down resize grow height 10 px or 10 ppt 116 | bindsym Up resize shrink height 10 px or 10 ppt 117 | bindsym Right resize grow width 10 px or 10 ppt 118 | 119 | # back to normal: Enter or Escape or q or $mod+r 120 | bindsym Return mode "default" 121 | bindsym Escape mode "default" 122 | bindsym q mode "default" 123 | bindsym $mod+r mode "default" 124 | } 125 | 126 | bindsym $mod+r mode "resize" 127 | 128 | # Launch mode for program sets 129 | set $mode_launcher "Launch mode: (E)xpress / (F)ull / (G)aming" 130 | mode $mode_launcher { 131 | bindsym e \ 132 | exec ~/.scripts/linux/startup/launch-apps express; \ 133 | mode "default" 134 | bindsym f \ 135 | exec ~/.scripts/linux/startup/launch-apps full; \ 136 | mode "default" 137 | bindsym g \ 138 | exec ~/.scripts/linux/startup/launch-apps gaming; \ 139 | mode "default" 140 | 141 | # back to normal: Enter or Escape or q or $mod+Shift+a 142 | bindsym Return mode "default" 143 | bindsym Escape mode "default" 144 | bindsym q mode "default" 145 | bindsym $mod+Shift+a mode "default" 146 | } 147 | 148 | bindsym $mod+Shift+a mode $mode_launcher 149 | 150 | # Launch mode for quick adjustments 151 | set $mode_adjust "Adjust mode: Sound (Left/Right), Brightness (Down/Up)" 152 | mode $mode_adjust { 153 | # Bindings for sound volume 154 | bindsym Left exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status 155 | bindsym Right exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status 156 | 157 | # Bindings for screen brightness 158 | bindsym Down exec brightnessctl s 5%- 159 | bindsym Up exec brightnessctl s +5% 160 | 161 | # back to normal: Enter or Escape or q or $mod+Shift+a 162 | bindsym Return mode "default" 163 | bindsym Escape mode "default" 164 | bindsym q mode "default" 165 | bindsym $mod+Shift+p mode "default" 166 | } 167 | 168 | bindsym $mod+Shift+p mode $mode_adjust 169 | 170 | # Enable focus warping when a window opens, regardless of the workspace 171 | focus_on_window_activation focus 172 | 173 | # Set auto back and forth 174 | workspace_auto_back_and_forth yes 175 | 176 | # Bind mouse events 177 | bindsym $mod+button1 fullscreen toggle 178 | bindsym $mod+button2 floating toggle 179 | bindsym --release $mod+button3 kill 180 | 181 | # Bind moving through workspaces 182 | bindsym $mod+Control+Right workspace next 183 | bindsym $mod+Control+Left workspace prev 184 | 185 | # Bind custom switch scripts 186 | bindsym $mod+Shift+w exec ~/.bin/linux/mt-set-random-wallpaper 187 | bindsym $mod+Shift+x exec ~/.bin/linux/mt-power-mode 188 | bindsym $mod+Shift+z exec ~/.bin/linux/mt-hardware 189 | 190 | # Bind session lock 191 | bindsym Control+Shift+l exec mt-session-lock-desktop 192 | -------------------------------------------------------------------------------- /.config/wm/i3: -------------------------------------------------------------------------------- 1 | include ~/.config/wm/common 2 | 3 | set $mod Mod4 4 | 5 | # Define names for default workspaces for which we configure key bindings later on 6 | set $ws1 "1: Home" 7 | set $ws2 "2: People" 8 | set $ws3 "3: Code" 9 | set $ws4 "4: Web" 10 | set $ws5 "5: Files" 11 | set $ws6 "6: Play" 12 | set $ws7 "7: Studio" 13 | set $ws8 "8: Notes" 14 | set $ws9 "9: Emails" 15 | set $ws10 "10: Auth" 16 | 17 | # switch to workspace 18 | bindsym $mod+1 workspace $ws1 19 | bindsym $mod+2 workspace $ws2 20 | bindsym $mod+3 workspace $ws3 21 | bindsym $mod+4 workspace $ws4 22 | bindsym $mod+5 workspace $ws5 23 | bindsym $mod+6 workspace $ws6 24 | bindsym $mod+7 workspace $ws7 25 | bindsym $mod+8 workspace $ws8 26 | bindsym $mod+9 workspace $ws9 27 | bindsym $mod+0 workspace $ws10 28 | 29 | # move focused container to workspace 30 | bindsym $mod+Shift+1 move container to workspace $ws1 31 | bindsym $mod+Shift+2 move container to workspace $ws2 32 | bindsym $mod+Shift+3 move container to workspace $ws3 33 | bindsym $mod+Shift+4 move container to workspace $ws4 34 | bindsym $mod+Shift+5 move container to workspace $ws5 35 | bindsym $mod+Shift+6 move container to workspace $ws6 36 | bindsym $mod+Shift+7 move container to workspace $ws7 37 | bindsym $mod+Shift+8 move container to workspace $ws8 38 | bindsym $mod+Shift+9 move container to workspace $ws9 39 | bindsym $mod+Shift+0 move container to workspace $ws10 40 | 41 | # Assign programs to workspaces 42 | assign [class="SchildiChat"] $ws2 43 | assign [class="Signal"] $ws2 44 | assign [class="TelegramDesktop"] $ws2 45 | assign [class="Emacs"] $ws3 46 | assign [class="Firefox"] $ws4 47 | assign [class="Mullvad Browser"] $ws4 48 | assign [class="Chromium"] $ws4 49 | assign [class="Thunar"] $ws5 50 | assign [class="Steam"] $ws6 51 | assign [class="Clementine"] $ws6 52 | assign [class="Darktable"] $ws7 53 | assign [class="Gimp"] $ws7 54 | assign [class="Audacity"] $ws7 55 | assign [class="obs"] $ws7 56 | assign [class="Blender"] $ws7 57 | assign [class="Logseq"] $ws8 58 | assign [class="eu.betterbird.Betterbird"] $ws9 59 | assign [class="KeePassXC"] $ws10 60 | 61 | # Define colors 62 | set $c_primary_lightest "#83d0c9" 63 | set $c_primary_light "#009688" 64 | set $c_primary_dark "#005555" 65 | set $c_mono_lightest "#ffffff" 66 | set $c_mono_light "#cccccc" 67 | set $c_mono_dark "#555555" 68 | set $c_darkest "#000000" 69 | set $c_warning "#ff8800" 70 | set $c_error "#ff3333" 71 | 72 | # Set window colors 73 | # class border bgcolor text indicator child_border 74 | client.focused $c_primary_light $c_primary_lightest $c_darkest $c_warning $c_primary_lightest 75 | client.focused_inactive $c_primary_light $c_primary_light $c_darkest $c_darkest $c_primary_light 76 | client.unfocused $c_darkest $c_mono_dark $c_mono_light $c_darkest $c_darkest 77 | client.urgent $c_darkest $c_error $c_mono_lightest $c_darkest $c_mono_lightest 78 | client.placeholder $c_darkest $c_darkest $c_primary_light $c_darkest $c_darkest 79 | client.background $c_darkest 80 | 81 | # Start i3bar to display a workspace bar (plus the system information i3status 82 | # finds out, if available) 83 | bar { 84 | status_command i3status -c ~/.config/wm/i3status-1.conf 85 | position top 86 | separator_symbol " | " 87 | strip_workspace_numbers yes 88 | 89 | colors { 90 | background $c_darkest 91 | statusline $c_mono_light 92 | separator $c_mono_dark 93 | 94 | # class border background text 95 | focused_workspace $c_primary_lightest $c_primary_lightest $c_darkest 96 | active_workspace $c_primary_light $c_primary_light $c_darkest 97 | inactive_workspace $c_mono_dark $c_darkest $c_mono_light 98 | urgent_workspace $c_mono_lightest $c_error $c_mono_lightest 99 | binding_mode $c_darkest $c_warning $c_darkest 100 | } 101 | } 102 | 103 | bar { 104 | status_command i3status -c ~/.config/wm/i3status-2.conf 105 | position bottom 106 | separator_symbol " | " 107 | workspace_buttons no 108 | tray_output none 109 | 110 | colors { 111 | background $c_darkest 112 | statusline $c_mono_light 113 | separator $c_mono_dark 114 | 115 | # class border background text 116 | focused_workspace $c_primary_lightest $c_primary_lightest $c_darkest 117 | active_workspace $c_primary_light $c_primary_light $c_darkest 118 | inactive_workspace $c_mono_dark $c_darkest $c_mono_light 119 | urgent_workspace $c_mono_lightest $c_error $c_mono_lightest 120 | binding_mode $c_darkest $c_warning $c_darkest 121 | } 122 | } 123 | 124 | # move tiling windows via drag & drop by left-clicking into the title bar, 125 | # or left-clicking anywhere into the window while holding the floating modifier. 126 | tiling_drag modifier titlebar 127 | 128 | # Use picom as a compositor 129 | exec picom -i 0.95 -m 1.0 -D 0 130 | 131 | # start a terminal 132 | bindsym $mod+Return exec urxvt 133 | 134 | # Bind rofi 'windows' menu 135 | bindsym $mod+z exec \ 136 | rofi \ 137 | -show window 138 | 139 | # Bind rofi 'run' menu 140 | bindsym $mod+x exec \ 141 | rofi \ 142 | -show run 143 | 144 | # Set key-bindings for flameshot 145 | bindsym $mod+Shift+comma exec flameshot gui 146 | bindsym $mod+Shift+period exec flameshot full -p ~/Desktop 147 | 148 | # exit i3 (logs you out of your X session) 149 | bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" 150 | 151 | # Set other key-bindings 152 | bindsym $mod+Shift+Control+e exec i3-msg exit 153 | -------------------------------------------------------------------------------- /.config/wm/i3status-1.conf: -------------------------------------------------------------------------------- 1 | # i3status configuration file. 2 | # see "man i3status" for documentation. 3 | 4 | # It is important that this file is edited as UTF-8. 5 | # The following line should contain a sharp s: 6 | # ß 7 | # If the above line is not correctly displayed, fix your editor first! 8 | 9 | general { 10 | output_format = "i3bar" 11 | colors = true 12 | color_good = "#cccccc" 13 | color_degraded = "#ff8800" 14 | color_bad = "#ff3333" 15 | interval = 5 16 | } 17 | 18 | order += "wireless _first_" 19 | order += "ethernet _first_" 20 | order += "tztime chicago" 21 | order += "tztime kolkata" 22 | order += "tztime local" 23 | 24 | wireless _first_ { 25 | format_up = " (%quality at %essid) %ip" 26 | format_down = "" 27 | } 28 | 29 | ethernet _first_ { 30 | format_up = " %ip (%speed)" 31 | format_down = "" 32 | } 33 | 34 | tztime chicago { 35 | format = "Chicago  %Y-%m-%d %H:%M" 36 | timezone = "America/Chicago" 37 | hide_if_equals_localtime = true 38 | } 39 | 40 | tztime kolkata { 41 | format = "Kolkata  %Y-%m-%d %H:%M" 42 | timezone = "Asia/Kolkata" 43 | hide_if_equals_localtime = true 44 | } 45 | 46 | tztime local { 47 | format = "Local  %Y-%m-%d %H:%M" 48 | } 49 | -------------------------------------------------------------------------------- /.config/wm/i3status-2.conf: -------------------------------------------------------------------------------- 1 | # i3status configuration file. 2 | # see "man i3status" for documentation. 3 | 4 | # It is important that this file is edited as UTF-8. 5 | # The following line should contain a sharp s: 6 | # ß 7 | # If the above line is not correctly displayed, fix your editor first! 8 | 9 | general { 10 | output_format = "i3bar" 11 | colors = true 12 | color_good = "#cccccc" 13 | color_degraded = "#ff8800" 14 | color_bad = "#ff3333" 15 | interval = 5 16 | } 17 | 18 | order += "read_file hostname" 19 | order += "cpu_temperature 0" 20 | order += "load" 21 | order += "cpu_usage" 22 | order += "memory" 23 | order += "disk /" 24 | order += "disk /home" 25 | order += "volume master" 26 | order += "battery 0" 27 | order += "battery 1" 28 | 29 | read_file hostname { 30 | format = "${USER} @ %content" 31 | path = "/etc/hostname" 32 | } 33 | 34 | cpu_temperature 0 { 35 | format = " %degrees°C" 36 | } 37 | 38 | load { 39 | format = " %1min" 40 | } 41 | 42 | cpu_usage { 43 | format = " %usage" 44 | } 45 | 46 | memory { 47 | format = " %percentage_used" 48 | threshold_degraded = "30%" 49 | format_degraded = " < %available" 50 | threshold_critical = "10%" 51 | } 52 | 53 | disk "/" { 54 | format = " /: %percentage_used (Free: %free)" 55 | low_threshold = "10" 56 | threshold_type = "percentage_avail" 57 | format_below_threshold = " /root: only %avail free" 58 | } 59 | 60 | disk "/home" { 61 | format = " /home: %percentage_used (Free: %free)" 62 | low_threshold = "10" 63 | threshold_type = "percentage_avail" 64 | format_below_threshold = " /home: only %avail free" 65 | } 66 | 67 | volume master { 68 | format = " %volume" 69 | format_muted = " Muted" 70 | } 71 | 72 | battery 0 { 73 | format = "%status %percentage (%consumption) %remaining" 74 | format_down = "" 75 | status_chr = "" 76 | status_bat = "" 77 | status_unk = "" 78 | status_full = "" 79 | low_threshold = "30" 80 | threshold_type = "percentage" 81 | last_full_capacity = true 82 | integer_battery_capacity = true 83 | } 84 | 85 | battery 1 { 86 | format = "%status %percentage (%consumption) %remaining" 87 | format_down = "" 88 | status_chr = "" 89 | status_bat = "" 90 | status_unk = "" 91 | status_full = "" 92 | low_threshold = "20" 93 | threshold_type = "percentage" 94 | last_full_capacity = true 95 | integer_battery_capacity = true 96 | } 97 | -------------------------------------------------------------------------------- /.config/wm/sway: -------------------------------------------------------------------------------- 1 | include ~/.config/wm/common 2 | 3 | set $mod Mod4 4 | 5 | # Define names for default workspaces for which we configure key bindings later on 6 | set $ws1 "1: Home" 7 | set $ws2 "2: People" 8 | set $ws3 "3: Code" 9 | set $ws4 "4: Web" 10 | set $ws5 "5: Files" 11 | set $ws6 "6: Play" 12 | set $ws7 "7: Studio" 13 | set $ws8 "8: Notes" 14 | set $ws9 "9: Emails" 15 | set $ws10 "10: Auth" 16 | 17 | # switch to workspace 18 | bindsym $mod+1 workspace $ws1 19 | bindsym $mod+2 workspace $ws2 20 | bindsym $mod+3 workspace $ws3 21 | bindsym $mod+4 workspace $ws4 22 | bindsym $mod+5 workspace $ws5 23 | bindsym $mod+6 workspace $ws6 24 | bindsym $mod+7 workspace $ws7 25 | bindsym $mod+8 workspace $ws8 26 | bindsym $mod+9 workspace $ws9 27 | bindsym $mod+0 workspace $ws10 28 | 29 | # move focused container to workspace 30 | bindsym $mod+Shift+1 move container to workspace $ws1 31 | bindsym $mod+Shift+2 move container to workspace $ws2 32 | bindsym $mod+Shift+3 move container to workspace $ws3 33 | bindsym $mod+Shift+4 move container to workspace $ws4 34 | bindsym $mod+Shift+5 move container to workspace $ws5 35 | bindsym $mod+Shift+6 move container to workspace $ws6 36 | bindsym $mod+Shift+7 move container to workspace $ws7 37 | bindsym $mod+Shift+8 move container to workspace $ws8 38 | bindsym $mod+Shift+9 move container to workspace $ws9 39 | bindsym $mod+Shift+0 move container to workspace $ws10 40 | 41 | # Assign programs to workspaces 42 | assign [class="SchildiChat"] $ws2 43 | assign [class="Signal"] $ws2 44 | assign [app_id="org.telegram.desktop"] $ws2 45 | assign [class="Emacs"] $ws3 46 | assign [app_id="Firefox"] $ws4 47 | assign [class="Mullvad Browser"] $ws4 48 | assign [class="Chromium"] $ws4 49 | assign [app_id="[Tt]hunar"] $ws5 50 | assign [class="steam"] $ws6 51 | assign [app_id="org.clementine_player.Clementine"] $ws6 52 | assign [class="Darktable"] $ws7 53 | assign [app_id="gimp"] $ws7 54 | assign [class="Audacity"] $ws7 55 | assign [app_id="com.obsproject.Studio"] $ws7 56 | assign [app_id="blender"] $ws7 57 | assign [class="Logseq"] $ws8 58 | assign [app_id="eu.betterbird.Betterbird"] $ws9 59 | assign [app_id="org.keepassxc.KeePassXC"] $ws10 60 | 61 | # Define colors 62 | set $c_primary_lightest "#83d0c9" 63 | set $c_primary_light "#009688" 64 | set $c_primary_dark "#005555" 65 | set $c_mono_lightest "#ffffff" 66 | set $c_mono_light "#cccccc" 67 | set $c_mono_dark "#555555" 68 | set $c_darkest "#000000" 69 | set $c_warning "#ff8800" 70 | set $c_error "#ff3333" 71 | 72 | # Set window colors 73 | # class border bgcolor text indicator child_border 74 | client.focused $c_primary_light $c_primary_lightest $c_darkest $c_warning $c_primary_lightest 75 | client.focused_inactive $c_primary_light $c_primary_light $c_darkest $c_darkest $c_primary_light 76 | client.unfocused $c_darkest $c_mono_dark $c_mono_light $c_darkest $c_darkest 77 | client.urgent $c_darkest $c_error $c_mono_lightest $c_darkest $c_mono_lightest 78 | client.placeholder $c_darkest $c_darkest $c_primary_light $c_darkest $c_darkest 79 | client.background $c_darkest 80 | 81 | bar { 82 | swaybar_command waybar 83 | } 84 | 85 | # start a terminal 86 | bindsym $mod+Return exec foot 87 | 88 | # Bind fuzzel 'run' menu 89 | bindsym $mod+x exec \ 90 | fuzzel 91 | 92 | # Set key-bindings for screenshots 93 | bindsym $mod+Shift+comma exec grim -g "$(slurp)" - | swappy -f - 94 | bindsym $mod+Shift+period exec grim - | swappy -f - 95 | 96 | # exit i3 (logs you out of your Wayland session) 97 | # TODO: Fix 98 | # bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" 99 | 100 | # Set other key-bindings 101 | bindsym $mod+Shift+Control+e exec sway exit 102 | 103 | # Start xdg-desktop-portal and company 104 | exec --no-startup-id /usr/libexec/xdg-desktop-portal & 105 | exec --no-startup-id /usr/libexec/xdg-desktop-portal-gnome & 106 | exec --no-startup-id /usr/libexec/xdg-desktop-portal-gtk & 107 | 108 | # Run desktop startup scripts 109 | exec_always bash ~/.scripts/linux/startup/desktop/run 110 | -------------------------------------------------------------------------------- /.face: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myTerminal/dotfiles/9e64cf089e1a3bfa12692295276b8c7a26965686/.face -------------------------------------------------------------------------------- /.face.icon: -------------------------------------------------------------------------------- 1 | /home/ismail/.face -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [core] 2 | excludesfile = ~/.gitignore_global 3 | visual = 'emacs' --no-splash -q -nw 4 | editor = 'emacs' --no-splash -q -nw 5 | [user] 6 | name = myTerminal 7 | email = team.terminal@gmail.com 8 | [pull] 9 | rebase = false 10 | [alias] 11 | st = status 12 | sd = "!f() { git status; read -n1 -r -p \"Continue to diffs...\"; git diff; }; f" 13 | ad = "!f() { git add \"$@\"; git status; }; f" 14 | lg = "log --format=\"%as %Cgreen%h%Creset %Cblue%s%Creset (by %Cred%cN%Creset, %ar)\" -n 20" 15 | find = "!f() { git log --all --grep \"$@\"; }; f" 16 | overwrite = "!f() { git reset HEAD~\"$@\"; git checkout .; git pull; }; f" 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | !/.gitconfig 4 | !/.gitignore_global 5 | !/.gitignore 6 | 7 | !/.Xresources 8 | 9 | !/.config 10 | /.config/* 11 | !/.config/bash 12 | !/.config/fish 13 | /.config/fish/* 14 | !/.config/fish/functions 15 | !/.config/fish/*.fish 16 | !/.config/emacs 17 | /.config/emacs/* 18 | !/.config/emacs/init.el 19 | !/.config/emacs/user.el 20 | !/.config/emacs/zone-quotes-masseffect.el 21 | !/.config/emacs/snippets 22 | !/.config/emacs/ellama-sessions 23 | !/.config/foot 24 | /.config/foot/* 25 | !/.config/foot/foot.ini 26 | !/.config/wm 27 | !/.config/waybar 28 | !/.config/rofi 29 | !/.config/gtk-3.0 30 | /.config/gtk-3.0/* 31 | !/.config/gtk-3.0/bookmarks 32 | !/.config/gtk-3.0/settings.ini 33 | !/.gtkrc-2.0 34 | !/.xinitrc 35 | !/.tmux.conf 36 | !/.bash_profile 37 | !/.bashrc 38 | !/.mew.el 39 | !/bootstrap 40 | 41 | !/.setup 42 | !/.scripts 43 | !/.bin 44 | !/.assets 45 | 46 | !/.face* 47 | 48 | !/LICENSE 49 | !/README.org 50 | -------------------------------------------------------------------------------- /.gitignore_global: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db -------------------------------------------------------------------------------- /.gtkrc-2.0: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This file will be overwritten by LXAppearance. 2 | # Any customization should be done in ~/.gtkrc-2.0.mine instead. 3 | 4 | include "/home/ismail/.gtkrc-2.0.mine" 5 | gtk-theme-name="Obsidian-2-Gray" 6 | gtk-icon-theme-name="Obsidian-Sand" 7 | gtk-font-name="Open Sans Light 11" 8 | gtk-cursor-theme-name="Bibata-Original-Classic" 9 | gtk-cursor-theme-size=48 10 | gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ 11 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 12 | gtk-button-images=0 13 | gtk-menu-images=0 14 | gtk-enable-event-sounds=1 15 | gtk-enable-input-feedback-sounds=0 16 | gtk-xft-antialias=1 17 | gtk-xft-hinting=1 18 | gtk-xft-hintstyle="hintslight" 19 | gtk-xft-rgba="none" 20 | gtk-modules="canberra-gtk-module" 21 | -------------------------------------------------------------------------------- /.mew.el: -------------------------------------------------------------------------------- 1 | (autoload 'mew "mew" nil t) 2 | (autoload 'mew-send "mew" nil t) 3 | 4 | (setq read-mail-command 'mew) 5 | (autoload 'mew-user-agent-compose "mew" nil t) 6 | (if (boundp 'mail-user-agent) 7 | (setq mail-user-agent 'mew-user-agent)) 8 | (if (fboundp 'define-mail-user-agent) 9 | (define-mail-user-agent 10 | 'mew-user-agent 11 | 'mew-user-agent-compose 12 | 'mew-draft-send-message 13 | 'mew-draft-kill 14 | 'mew-send-hook)) 15 | 16 | ;ismail.ansari@citustech.com 17 | (setq mew-name "Ismail Ansari") 18 | (setq mew-user "ismail.ansari@citiustech.com") 19 | (setq mew-mail-domain "secure.emailsrvr.com") 20 | 21 | (setq mew-smtp-user "ismail.ansari@citiustech.com") 22 | (setq mew-smtp-server "secure.emailsrvr.com") 23 | 24 | (setq mew-proto "%") 25 | (setq mew-imap-user "ismail.ansari@citiustech.com") 26 | (setq mew-imap-server "secure.emailsrvr.com") 27 | 28 | (setq mew-use-cached-passwd t) 29 | -------------------------------------------------------------------------------- /.scripts/linux/startup/cli: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Start pipewire if not already running 4 | if [[ ! $(pgrep -u $(id -u) pipewire) ]]; then 5 | dbus-run-session pipewire &> /dev/null & 6 | fi 7 | 8 | # Start applications 9 | udiskie & 10 | -------------------------------------------------------------------------------- /.scripts/linux/startup/desktop/apps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ~/.bin/linux/mt-run-if-not-running pCloud 4 | 5 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 6 | ~/.bin/linux/mt-run-if-not-running mako 7 | fi 8 | -------------------------------------------------------------------------------- /.scripts/linux/startup/desktop/audio: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Start bluetooth applet for Wayland 4 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 5 | ~/.bin/linux/mt-run-if-not-running blueman-applet 6 | fi 7 | 8 | # Play startup sound 9 | mpv ~/.assets/sounds/car-revving-sound.mp3 & 10 | -------------------------------------------------------------------------------- /.scripts/linux/startup/desktop/display: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ~/.bin/linux/mt-set-random-wallpaper 4 | 5 | if [ "$XDG_SESSION_TYPE" == "wayland" ]; then 6 | gsettings set org.gnome.desktop.interface gtk-theme 'Obsidian-2-Gray' 7 | gsettings set org.gnome.desktop.interface icon-theme 'Obsidian-Sand' 8 | gsettings set org.gnome.desktop.interface cursor-theme 'Bibata-Original-Classic' 9 | gsettings set org.gnome.desktop.interface font-name 'Open Sans 10' 10 | fi 11 | -------------------------------------------------------------------------------- /.scripts/linux/startup/desktop/input: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Turn ON the Numlock 4 | if [ $(command -v numlockx) ]; then 5 | numlockx 6 | fi 7 | -------------------------------------------------------------------------------- /.scripts/linux/startup/desktop/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | BASE_PATH=~/.scripts/linux/startup/desktop 4 | 5 | if [ -f ~/.configure-input-devices ]; then 6 | . ~/.configure-input-devices 7 | fi 8 | 9 | if [ -f ~/.configure-output-devices ]; then 10 | . ~/.configure-output-devices 11 | fi 12 | 13 | ${BASE_PATH}/display & 14 | ${BASE_PATH}/input & 15 | ${BASE_PATH}/audio & 16 | ${BASE_PATH}/apps & 17 | -------------------------------------------------------------------------------- /.scripts/linux/startup/launch-apps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | command=$1 4 | 5 | case "${1}" in 6 | e | express ) 7 | exec logseq & disown 8 | exec emacs & disown 9 | exec chromium & disown 10 | exec keepassxc & disown 11 | ;; 12 | 13 | g | gaming ) 14 | exec steam & disown 15 | ;; 16 | 17 | *) 18 | exec logseq & disown 19 | exec emacs & disown 20 | exec schildi & disown 21 | exec signal-desktop & disown 22 | exec Telegram & disown 23 | exec firefox & disown 24 | exec thunar & disown 25 | exec better-bird & disown 26 | exec keepassxc & disown 27 | ;; 28 | esac 29 | -------------------------------------------------------------------------------- /.setup/docs/install-void.md: -------------------------------------------------------------------------------- 1 | # Void Linux installation (XBPS method) 2 | 3 | ## Pre-installation setup 4 | 5 | ### Switching to root 6 | 7 | su -s /bin/bash 8 | 9 | ### Connecting to a network 10 | 11 | nmtui 12 | 13 | ### Updating the host system 14 | 15 | Update `xbps` itself 16 | 17 | xbps-install -Su xbps 18 | 19 | Update all packages 20 | 21 | xbps-install -u 22 | 23 | > In case of errors about expired certificates, use the following before the command to set an environment variable: SSL_NO_VERIFY_PEER=true 24 | 25 | ## Partitions - Part 1 26 | 27 | ### Creating partitions 28 | 29 | Perform partitioning with `cfdisk` and verify with `lsblk` before proceeding. 30 | 31 | ### Preparing partitions 32 | 33 | Format the first partition as EFI 34 | 35 | mkfs.fat -F32 /dev/nvme0n1p1 36 | 37 | Create a swap partition 38 | 39 | mkswap /dev/nvme0n1p2 40 | 41 | Prepare the main encrypted partition 42 | 43 | cryptsetup -y -v luksFormat --type luks1 /dev/nvme0n1p3 44 | 45 | Respond with a "YES" and enter a passphrase twice. 46 | 47 | Open the main partition with the name "mirage" 48 | 49 | cryptsetup open /dev/nvme0n1p3 mirage 50 | 51 | 52 | Format the main partition as `btrfs` 53 | 54 | mkfs.btrfs /dev/mapper/mirage 55 | 56 | ## Partitions - Part 2 57 | 58 | ### Creating BTRFS subvolumes 59 | 60 | Mount main partition temporarily 61 | 62 | mount /dev/mapper/mirage /mnt 63 | 64 | Create subvolumes for root, home, var and snapshots 65 | 66 | btrfs su cr /mnt/@ 67 | btrfs su cr /mnt/@home 68 | btrfs su cr /mnt/@var 69 | btrfs su cr /mnt/@store 70 | btrfs su cr /mnt/@snapshots 71 | 72 | Unmount the partition 73 | 74 | umount /mnt 75 | 76 | ### Re-mounting subvolumes as partitions 77 | 78 | mount -o noatime,nodiratime,compress=lzo,space_cache=v2,subvol=@ /dev/mapper/mirage /mnt 79 | mkdir -p /mnt/{boot,home,var,store,.snapshots} 80 | mkdir /mnt/boot/efi 81 | mount /dev/nvme0n1p1 /mnt/boot/efi 82 | mount -o noatime,nodiratime,compress=lzo,space_cache=v2,subvol=@home /dev/mapper/mirage /mnt/home 83 | mount -o noatime,nodiratime,compress=lzo,space_cache=v2,subvol=@var /dev/mapper/mirage /mnt/var 84 | mount -o noatime,nodiratime,compress=lzo,space_cache=v2,subvol=@store /dev/mapper/mirage /mnt/store 85 | mount -o noatime,nodiratime,compress=lzo,space_cache=v2,subvol=@snapshots /dev/mapper/mirage /mnt/.snapshots 86 | swapon /dev/nvme0n1p2 87 | 88 | ## Base installation 89 | 90 | ### Setting `REPO` and `ARCH` 91 | 92 | REPO=https://repo-default.voidlinux.org/current 93 | ARCH=x86_64 94 | 95 | ### Bootstrapping a base-system 96 | 97 | XBPS_ARCH=$ARCH xbps-install -S -r /mnt -R "$REPO" base-system elogind polkit dbus chrony grub-x86_64-efi cryptsetup vim git wget curl make 98 | 99 | ### Mounting the pseudo-filesystems for chroot 100 | 101 | mount --rbind /sys /mnt/sys && mount --make-rslave /mnt/sys 102 | mount --rbind /dev /mnt/dev && mount --make-rslave /mnt/dev 103 | mount --rbind /proc /mnt/proc && mount --make-rslave /mnt/proc 104 | 105 | ### Copying the DNS configuration to the new system 106 | 107 | cp /etc/resolv.conf /mnt/etc 108 | 109 | ### Rooting into the new system 110 | 111 | chroot /mnt /bin/bash 112 | 113 | ## Configuration 114 | 115 | ### Setting the timezone 116 | 117 | ln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime 118 | 119 | ### Selecting locale 120 | 121 | Uncomment the desired locales in `/etc/default/libc-locales` 122 | 123 | vim /etc/default/libc-locales 124 | 125 | Generate locales 126 | 127 | xbps-reconfigure -f glibc-locales 128 | 129 | ### Setting `HOSTNAME` 130 | 131 | echo "titan" > /etc/hostname 132 | 133 | ### Configuring hosts file 134 | 135 | Place below content in the file `/etc/hosts` 136 | 137 | 127.0.0.1 localhost 138 | ::1 localhost 139 | 127.0.1.1 titan.localdomain titan 140 | 141 | ### Installing network-related packages 142 | 143 | xbps-install -Sy NetworkManager 144 | 145 | ## Creating users and groups 146 | 147 | ### Setting root password 148 | 149 | passwd 150 | 151 | ### Creating a non-root user 152 | 153 | Create user 154 | 155 | useradd ismail -m -c "Mohammed Ismail Ansari" -s /bin/bash 156 | 157 | Set password for user 158 | 159 | passwd ismail 160 | 161 | Add user to wheel group 162 | 163 | usermod -aG wheel,audio,video,optical,storage ismail 164 | 165 | Configure sudo for 'wheel' group 166 | 167 | visudo 168 | 169 | ## Filesystem 170 | 171 | ### Creating `/etc/fstab` 172 | 173 | Copy the file `/proc/mounts` as the starting point for `/etc/fstab` (or append it to save some time) 174 | 175 | cat /proc/mounts >> /etc/fstab 176 | 177 | Remove unnecessary lines, replace references with their respective UUIDs and change the last zero for `/` and everything else as "1" and "2" respectively. Note that BTRFS subvolumes may need to have the last column as "0". 178 | 179 | Add an entry for `/tmp` 180 | 181 | tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 182 | 183 | Add an entry for SWAP 184 | 185 | UUID=[....] swap swap rw,noatime,discard 0 0 186 | 187 | ## Setting up bootloader 188 | 189 | ### Blacklist nouveau 190 | 191 | Add an entry `blacklist nouveau` in file `/usr/lib/modprobe.d/blacklist.conf` 192 | 193 | ### Setting up encryption parameters for boot 194 | 195 | Create a key 196 | 197 | dd bs=1 count=64 if=/dev/urandom of=/boot/volume.key 198 | 199 | Add the key for the encrypted volume 200 | 201 | cryptsetup luksAddKey /dev/nvme0n1p3 /boot/volume.key 202 | 203 | Restrict access to the key (and `/boot`) 204 | 205 | chmod 000 /boot/volume.key 206 | chmod -R g-rwx,o-rwx /boot 207 | 208 | Use `blkid` to get the `UUID` of the encrypted partition 209 | 210 | Create an entry in the `/etc/crypttab` file 211 | 212 | mirage UUID=[uuid-of-encrypted-partition] /boot/volume.key luks 213 | 214 | Make GRUB aware of the encrypted partition 215 | 216 | vim /etc/default/grub 217 | 218 | Set `GRUB_CMDLINE_LINUX` = "rd.luks=1 rd.luks.uuid=[UUID-of-encrypted-partition] root=/dev/mapper/mirage rootflags=subvol=@" 219 | 220 | Also, set `GRUB_ENABLE_CRYPTODISK=y` to allow us to install GRUB on an encrytped boot. 221 | 222 | To enable `os-prober` (could be temporary), add the following 223 | 224 | GRUB_DISABLE_OS_PROBER=FALSE 225 | 226 | Add an entry in `/etc/dracut.conf.d/10-crypt.conf 227 | 228 | install_items+=" /boot/volume.key /etc/crypttab " 229 | 230 | ### Running a `grub-install` 231 | 232 | grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=VOID 233 | 234 | ### Generating GRUB config 235 | 236 | update-grub 237 | 238 | ### Update `initramfs` 239 | 240 | xbps-reconfigure -fa 241 | 242 | ## End with a clean up 243 | 244 | Exit chroot 245 | 246 | exit 247 | 248 | Unmount all mounted partitions 249 | 250 | umount -a 251 | 252 | Reboot 253 | 254 | reboot now 255 | 256 | ## Post installation 257 | 258 | ### Enabling RTC service 259 | 260 | ln -s /etc/sv/chronyd /var/service/ 261 | 262 | ### Enabling network-related services 263 | 264 | ln -s /etc/sv/{dhcpcd,NetworkManager} /var/service/ 265 | 266 | ### Enabling services for seat 267 | 268 | ln -srf /etc/sv/{dbus,polkitd,elogind} /var/service 269 | -------------------------------------------------------------------------------- /.setup/docs/releasing-a-machine.org: -------------------------------------------------------------------------------- 1 | #+TITLE: Releasing a machine 2 | #+AUTHOR: Mohammed Ismail Ansari 3 | 4 | - Disable battery charge thresholds 5 | - Delete EFI variables from the firmware interface 6 | 7 | #+BEGIN_SRC CLI 8 | efibootmgr -Bb 9 | #+END_SRC 10 | 11 | - Remove references from the following: 12 | - KeePass database as a key 13 | - Element/Schildi for Matrix 14 | - Linked device with Signal Messenger 15 | - Linked device from Telegram 16 | - Sync device in Firefox 17 | - Syncthing as a node 18 | - GitHub and GitLab (SSH keys) 19 | - Home network as a known device 20 | - Static IP assignment 21 | - Remove maintenance tasks from TickTick 22 | - Remove entry from machines.conf 23 | - Update entry in *machines* spreadsheet 24 | 25 | # Local Variables: 26 | # eval: (visual-line-mode) 27 | # End: 28 | -------------------------------------------------------------------------------- /.setup/docs/setting-up-a-new-machine.org: -------------------------------------------------------------------------------- 1 | #+TITLE: Setting up a new machine 2 | #+AUTHOR: Mohammed Ismail Ansari 3 | 4 | - Re-partition the storage drive with a GPT partition table and the following high-level partitions: 5 | 1) EFI (FAT32) 6 | 2) SWAP 7 | 3) Linux (BTRFS) 8 | 4) /(Optional)/ MSFT Reserved 9 | 5) /(Optional)/ Windows NTFS 10 | - /(Optional)/ Install Windows with absolute basic settings and minimal software, run updates a few tens of times 11 | - Install and configure Firefox 12 | - Install Linux 13 | - If installing from within a LIVE environment, create an SSH key and add it to my GitHub and GitLab account 14 | - Init [[https://github.com/myTerminal/dotfiles][dotfiles]] using [[../../bootstrap][the bootstrap script]] and trigger forge 15 | - Create an add-on setup script for the specific hardware: 16 | - Test/Fix display scaling 17 | - Install graphics drivers 18 | - Test/Fix bluetooth connectivity 19 | - Test/Fix Sound 20 | - Test/Fix Microphone 21 | - Test/Fix mouse and trackpad 22 | - Test/Fix camera 23 | - Configure power management 24 | - Configure software and services 25 | - Keepass 26 | - Firefox 27 | - Login to Firefox account 28 | - Configure containers using Multi-account containers extension 29 | - Set "Device Name" under "Sync" 30 | - Set custom search engine to Brave search 31 | - Login to other extensions 32 | - Configure toolbar 33 | - Restore Cryptowallet on [[https://metamask.io][MetaMask]] 34 | - Set up connection with KeePassXC 35 | - Restore session from one of the other machines 36 | - Login to frequent websites in appropriate containers 37 | - Element/Schildi 38 | - Signal Messenger 39 | - Betterbird 40 | - Configure Email 41 | - Configure Calendars 42 | - Configure Addressbooks 43 | - LogSeq 44 | - Thunar (may not be needed anymore) 45 | - Darktable 46 | - Steam 47 | - pCloud 48 | - Bluetooth 49 | - Calibre 50 | - KePub Input 51 | KePub Metadata Reader 52 | KePub Metadata Writer 53 | KePub Output 54 | KoboTouchExtended 55 | - Verify software packages 56 | - Test/Improve scripts under [[../hardware][~/.setup/hardware]] and [[../../.bin][~/.bin]] 57 | - Verify reference of the machine at/under the following: 58 | - Home network as a new device 59 | - Static IP assignment 60 | - GitHub and GitLab (SSH keys) 61 | - Syncthing as a node 62 | - KeePass database as a key 63 | - Sync device for Firefox 64 | - Element/Schildi for Matrix 65 | - Signal Messenger as a linked device 66 | - Telegram 67 | - Create maintenance tasks in TickTick 68 | - Add entry in machines.conf 69 | - Add entry in *machines* spreadsheet 70 | 71 | # Local Variables: 72 | # eval: (visual-line-mode) 73 | # End: 74 | -------------------------------------------------------------------------------- /.setup/docs/switching-to-a-new-platform.org: -------------------------------------------------------------------------------- 1 | #+TITLE: Switching to a new platform 2 | #+AUTHOR: Mohammed Ismail Ansari 3 | 4 | - Create installation instructions as [[https://gist.github.com/myTerminal][a GitHub Gist]] 5 | - Extend [[https://github.com/myTerminal/twiner][twiner]] for the new platform 6 | - Add a switch in [[https://github.com/myTerminal/forge][setup]], create stubs for the new platform 7 | - Extend platform dependent scripts under [[../.scripts][~/.scripts]] and [[../.bin][~/.bin]] to cover the new platform 8 | - Create alternate scripts for elements like a new init system, if applicable 9 | - Create package install scripts 10 | - Implement rest of the installation scripts 11 | - Create other utility scripts for the new platform 12 | - Run a test installation through virtualization 13 | - Run lots of tests and fix the identified issues 14 | - Install the new platform on bare metal alongside the primary system 15 | - Run lots of tests and fix the identified issues 16 | - Create a script for add-on setup for the new platform for respective hardware 17 | - Switch to the new platform as the primary system 18 | - Run a final set of tests to conclude the migration 19 | - Remove obsolete BTRFS subvolumes 20 | 21 | # Local Variables: 22 | # eval: (visual-line-mode) 23 | # End: 24 | -------------------------------------------------------------------------------- /.setup/forge-config.lisp: -------------------------------------------------------------------------------- 1 | ( 2 | (:void :mac) 3 | ( 4 | ("cryptsetup" (:mac)) 5 | "cryfs" 6 | ("polkit" (:mac)) 7 | ("dbus" (:mac)) 8 | ("efibootmgr" (:mac)) 9 | "tmux" 10 | ("fish" (:xbps "fish-shell")) 11 | "fd" 12 | "lsd" 13 | "bat" 14 | "ncdu" 15 | "ripgrep" 16 | "fzf" 17 | ("emacs" (:xbps "emacs-gtk3") (:cask "emacs")) 18 | ("vim" (:mac)) 19 | "mpv" 20 | ("aspell" (:xbps "aspell" "aspell-en") (:mac)) 21 | "make" 22 | "git" 23 | "tig" 24 | ("zip" (:mac)) 25 | ("unzip" (:mac)) 26 | "7zip" 27 | "unrar" 28 | "btop" 29 | ("psmisc" (:mac)) 30 | ("udisks2" (:cask "mounty")) 31 | "smartmontools" 32 | ("network-manager" (:xbps "NetworkManager") (:mac)) 33 | ("bind-utils" (:mac)) 34 | "tailscale" 35 | "weechat" 36 | ("nodejs" (:brew "node")) 37 | "sbcl" 38 | ("brightnessctl" (:mac)) 39 | ("acpi" (:mac)) 40 | ("fprintd" (:mac)) 41 | ("chrony" (:mac)) 42 | ("btrfs-progs" (:mac)) 43 | ("ntfs-3g" (:mac)) 44 | ("dosfstools" (:mac)) 45 | ("mtools" (:mac)) 46 | ("exfat-utils" (:mac)) 47 | ("android-tools" (:cask "android-platform-tools")) 48 | ("cronie" (:mac)) 49 | ("ollama" (:cask "ollama") (:void)) 50 | ("fabric" (:mac) (:void)) 51 | "rlwrap" 52 | ("sed" (:brew "gnu-sed")) 53 | "jq" 54 | "neofetch" 55 | "wget" 56 | "curl" 57 | ("openssh" (:mac)) 58 | "avahi" 59 | ("xdg-utils" (:mac)) 60 | ("xdg-desktop-portal" (:xbps "xdg-desktop-portal" "xdg-desktop-portal-gnome") (:mac)) 61 | ("xorg" (:mac)) 62 | ("sct" (:mac)) 63 | ("gammastep" (:mac)) 64 | ("onboard" (:mac)) 65 | ("picom" (:mac)) 66 | ("i3" (:xbps "i3" "i3status" "i3lock") (:mac)) 67 | ("sway" (:mac)) 68 | ("Waybar" (:mac)) 69 | ("xrandr" (:mac)) 70 | ("wlr-randr" (:mac)) 71 | ("wdisplays" (:mac)) 72 | ("xss-lock" (:mac)) 73 | ("swaylock" (:mac)) 74 | ("feh" (:mac)) 75 | ("swaybg" (:mac)) 76 | ("rofi" (:mac)) 77 | ("fuzzel" (:mac)) 78 | ("rxvt-unicode" (:cask "alacritty")) 79 | ("foot" (:mac)) 80 | ("xsel" (:mac)) 81 | ("wl-clipboard" (:mac)) 82 | ("dunst" (:mac)) 83 | ("mako" (:mac)) 84 | ("udiskie" (:mac)) 85 | ("gparted" (:mac)) 86 | "gsmartcontrol" 87 | ("thunar" (:xbps "Thunar") (:mac)) 88 | ("gvfs" (:mac)) 89 | ("syncthing" (:xbps "syncthing-gtk")) 90 | ("meld" (:cask "meld")) 91 | ("logseq" (:flatpak ("com.logseq.Logseq" "logseq")) (:cask "loqseq")) 92 | ("firefox" (:cask "firefox")) 93 | ("mullvad-browser" (:void) (:mac)) 94 | ("tor-browser" (:void) (:mac)) 95 | ("chromium" (:cask "chromium")) 96 | ("keepassxc" (:cask "keepasxc")) 97 | ("betterbird" (:flatpak ("eu.betterbird.Betterbird" "logseq")) (:mac)) 98 | ("calibre" (:cask "calibre")) 99 | ("schildi" (:flatpak ("chat.schildi.desktop" "schildi")) (:cask "schildichat")) 100 | ("signal-messenger" (:xbps "Signal-Desktop") (:cask "signal")) 101 | ("telegram" (:xbps "telegram-desktop") (:cask "telegram-desktop")) 102 | ("pcloud" (:void) (:mac)) 103 | ("transmission" (:xbps "transmission-gtk") (:cask "transmission")) 104 | ("postman" (:flatpak ("com.getpostman.Postman" "postman")) (:cask "postman")) 105 | ("virt-manager" (:xbps "qemu" "virt-manager")) 106 | ("libreoffice" (:cask "libreoffice")) 107 | ("blueman" (:mac)) 108 | ("krita" (:cask "krita")) 109 | ("shotwell" (:cask "xnviewmp")) 110 | ("gimp" (:cask "gimp")) 111 | ("darktable" (:cask "darktable")) 112 | ("clementine" (:cask "clementine")) 113 | ("pavucontrol" (:mac)) 114 | ("gstreamer" (:xbps "gstreamer1") (:mac)) 115 | ("pipewire" (:xbps "pipewire" "alsa-pipewire" "libspa-bluetooth") (:mac)) 116 | ("easyeffects" (:mac)) 117 | ("audacity" (:mac)) 118 | ("vlc" (:cask "vlc")) 119 | ("handbrake" (:cask "handbrake")) 120 | ("blender" (:cask "blender")) 121 | ("yt-dlp" (:void) (:mac)) 122 | ("kodi" (:cask "kodi")) 123 | ("flameshot" (:mac)) 124 | ("grim" (:mac)) 125 | ("slurp" (:mac)) 126 | ("swappy" (:mac)) 127 | ("obs" (:flatpak ("com.obsproject.Studio" "obs")) (:cask "obs")) 128 | ("obs-plugin-waveform" (:flatpak ("com.obsproject.Studio.Plugin.waveform" "obs-plugin-waveform")) (:mac)) 129 | ("peek" (:cask "licecap")) 130 | ("keymon" (:void) (:cask "keycastr")) 131 | ("balena-etcher" (:void) (:cask "balenaetcher")) 132 | ("steam" (:cask "steam")) 133 | ("lutris" (:mac)) 134 | ("origin" (:void) (:cask "origin")) 135 | ("gamehub" (:mac)) 136 | ("sony-remote-play" (:void) (:cask "sony-ps4-remote-play")) 137 | ("numlockx" (:mac)) 138 | ("qFlipper" (:flatpak ("one.flipperzero.qFlipper" "qFlipper")) (:cask "qflipper")) 139 | ("font-open-sans" (:void) (:cask "font-open-sans")) 140 | ("font-inconsolata" (:void) (:cask "font-inconsolata")) 141 | ("font-roboto-mono" (:void) (:cask "font-roboto-mono")) 142 | ("font-fira-code" (:void) (:cask "font-fira-code")) 143 | ("font-liberation" (:void) (:cask "font-liberation")) 144 | ) 145 | ( 146 | "Install flatpak packages the conventional way" 147 | nil 148 | (:void ("~/.bin/linux/mt-flatpak install logseq com.logseq.Logseq" 149 | "~/.bin/linux/mt-flatpak install postman com.getpostman.Postman" 150 | "~/.bin/linux/mt-flatpak install schildi chat.schildi.desktop" 151 | "~/.bin/linux/mt-flatpak install obs-studio com.obsproject.Studio" 152 | "~/.bin/linux/mt-flatpak install qFlipper one.flipperzero.qFlipper")) 153 | ) 154 | ( 155 | "Enable hidden items in Finder" 156 | nil 157 | (:mac ("defaults write com.apple.Finder AppleShowAllFiles YES" 158 | "killall Finder")) 159 | ) 160 | ( 161 | "Change user shell" 162 | t 163 | (:void ("sudo usermod -s /bin/fish ismail")) 164 | (:mac ("echo \"/opt/homebrew/bin/fish\" | sudo tee -a /etc/shells" 165 | "chsh -s /opt/homebrew/bin/fish")) 166 | ) 167 | ( 168 | "Install Mesa Drivers" 169 | t 170 | (:void ("~/.setup/hardware/void/mesa")) 171 | ) 172 | ( 173 | "Install Graphical Theming: GTK theme" 174 | t 175 | (:void ("mkdir -p ~/.local/share/themes" 176 | "git clone https://github.com/madmaxms/theme-obsidian-2.git ~/_temp" 177 | "git -C ~/_temp checkout gray" 178 | "mv ~/_temp/Obsidian-2-Gray ~/.local/share/themes/" 179 | "rm -rf ~/_temp")) 180 | ) 181 | ( 182 | "Install Graphical Theming: Icon theme" 183 | t 184 | (:void ("mkdir -p ~/.local/share/icons" 185 | "git clone https://github.com/madmaxms/iconpack-obsidian ~/_temp" 186 | "mv ~/_temp/Obsidian* ~/.local/share/icons/" 187 | "rm -rf ~/_temp")) 188 | ) 189 | ( 190 | "Install Graphical Theming: Cursor theme" 191 | t 192 | (:void ("mkdir -p ~/.local/share/icons" 193 | "mkdir ~/_temp" 194 | "( cd ~/_temp; wget https://github.com/ful1e5/Bibata_Cursor/releases/download/v1.1.1/Bibata.tar.gz; tar -xvf Bibata.tar.gz )" 195 | "mv ~/_temp/Bibata-* ~/.local/share/icons" 196 | "rm -rf ~/_temp")) 197 | ) 198 | ( 199 | "Install Fonts" 200 | t 201 | (:void ("mkdir -p ~/.local/share/fonts" 202 | "git clone https://github.com/FortAwesome/Font-Awesome ~/_temp" 203 | "mv ~/_temp/otfs ~/.local/share/fonts/FontAwesome" 204 | "rm -rf ~/_temp" 205 | "mkdir -p ~/.local/share/fonts" 206 | "git clone https://github.com/googlefonts/opensans ~/_temp" 207 | "mv ~/_temp/fonts/ttf ~/.local/share/fonts/OpenSans" 208 | "rm -rf ~/_temp" 209 | "mkdir -p ~/.local/share/fonts" 210 | "git clone https://github.com/googlefonts/inconsolata ~/_temp" 211 | "mv ~/_temp/fonts/ttf ~/.local/share/fonts/Inconsolata" 212 | "rm -rf ~/_temp" 213 | "mkdir -p ~/.local/share/fonts" 214 | "git clone https://github.com/googlefonts/RobotoMono ~/_temp" 215 | "mv ~/_temp/fonts/ttf ~/.local/share/fonts/RobotoMono" 216 | "rm -rf ~/_temp" 217 | "mkdir -p ~/.local/share/fonts" 218 | "git clone https://github.com/grays/droid-fonts ~/_temp" 219 | "mv ~/_temp/droid ~/.local/share/fonts/Droid" 220 | "rm -rf ~/_temp" 221 | "mkdir -p ~/.local/share/fonts" 222 | "mkdir ~/_temp" 223 | "curl --fail --location --show-error https://github.com/tonsky/FiraCode/releases/download/5.2/Fira_Code_v5.2.zip --output ~/_temp/Fira_Code_v5.2.zip" 224 | "unzip -o -q -d ~/_temp ~/_temp/Fira_Code_v5.2.zip" 225 | "mv ~/_temp/ttf ~/.local/share/fonts/FiraCode" 226 | "rm -rf ~/_temp" 227 | "mkdir -p ~/.local/share/fonts" 228 | "mkdir ~/_temp" 229 | "( cd ~/_temp; wget https://github.com/liberationfonts/liberation-fonts/files/6418984/liberation-fonts-ttf-2.1.4.tar.gz; tar -xvf liberation-fonts-ttf-2.1.4.tar.gz )" 230 | "mkdir ~/.local/share/fonts/Liberation" 231 | "mv ~/_temp/liberation-fonts-ttf-2.1.4/Liberation* ~/.local/share/fonts/Liberation/" 232 | "rm -rf ~/_temp")) 233 | ) 234 | ( 235 | "Set up pipewire with wireplumber and pipewire-pulse" 236 | t 237 | (:void ("sudo mkdir -p /etc/pipewire/pipewire.conf.d" 238 | "sudo ln -s /usr/share/examples/wireplumber/10-wireplumber.conf /etc/pipewire/pipewire.conf.d/" 239 | "sudo ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf /etc/pipewire/pipewire.conf.d/")) 240 | ) 241 | ( 242 | "Fetch perl extensions for for rxvt" 243 | t 244 | (:void ("sudo xbps-install -Sy xclip" 245 | "sudo wget \"https://pastebin.com/raw/QHk1NyPS\" -O /usr/lib/urxvt/perl/clipboard" 246 | "sudo wget \"https://raw.githubusercontent.com/simmel/urxvt-resize-font/master/resize-font\" -O /usr/lib/urxvt/perl/resize-font")) 247 | ) 248 | ( 249 | "Syncthing: Prepare /store/ismail" 250 | t 251 | (:void ("sudo mkdir /store/ismail" 252 | "sudo chown -R ismail:ismail /store/ismail" 253 | "sudo chmod -R g-rwx,o-rwx /store/ismail")) 254 | ) 255 | ( 256 | "Syncthing: Prepare ~/_store" 257 | t 258 | (:void ("mkdir ~/_store" 259 | "sudo mount --rbind /store/ismail ~/_store" 260 | "echo \"/store/ismail /home/ismail/_store none bind 0 0\" | sudo tee -a /etc/fstab")) 261 | ) 262 | ( 263 | "Set up startup services" 264 | t 265 | (:void ("sudo ln -s /etc/sv/tailscale /var/service" 266 | "sudo ln -s /etc/sv/libvirtd /var/service" 267 | "sudo ln -s /etc/sv/virtlogd /var/service" 268 | "sudo ln -s /etc/sv/bluetoothd /var/service" 269 | "sudo ln -s /etc/sv/sshd /var/service" 270 | "sudo ln -s /etc/sv/avahi-daemon /var/service" 271 | "sudo ln -s /etc/sv/cronie /var/service" 272 | "mkdir ~/.services" 273 | "cp -R ~/.assets/services/syncthing ~/.services/" 274 | "sudo cp -R ~/.assets/services/runsvdir-ismail /etc/sv/" 275 | "sudo ln -s /etc/sv/runsvdir-ismail /var/service")) 276 | (:mac ("brew services start syncthing" 277 | "brew services start avahi-daemon" 278 | "brew services start ollama")) 279 | ) 280 | ( 281 | "Link /store/ismail/.syncthing to ~/.config/syncthing" 282 | t 283 | (:void ("ln -s /store/ismail/.syncthing ~/.config/syncthing")) 284 | ) 285 | ( 286 | "Perform visual tweaks (non-working)" 287 | t 288 | (:void ("wget -O - https://github.com/shvchk/fallout-grub-theme/raw/master/install.sh | bash")) 289 | ) 290 | ( 291 | "Install power-guard" 292 | t 293 | (:void ("git clone https://github.com/myTerminal/power-guard.git /tmp/power-guard" 294 | "( cd /tmp/power-guard; make install )")) 295 | ) 296 | ( 297 | "Install global NPM packages" 298 | t 299 | (:all ("sudo npm install -g lite-server nano-server stay-with-me git-getter re-write")) 300 | ) 301 | ( 302 | "Create custom Lisp parser" 303 | t 304 | (:all ("sudo cp /home/ismail/.assets/cl /usr/bin/cl")) 305 | ) 306 | ( 307 | "Create required directories" 308 | t 309 | (:all ("mkdir ~/_workspace" 310 | "mkdir ~/_workspace/github")) 311 | ) 312 | ( 313 | "Start X11 to configure SSH keys and Syncthing" 314 | t 315 | (:void ("~/.scripts/linux/startup/cli && pkill syncthing && startx")) 316 | ) 317 | ( 318 | "Next steps depend on SSH keys and Syncthing setup" 319 | t 320 | (:all ("echo \"Continuing...\"")) 321 | ) 322 | ( 323 | "Syncthing: Move Syncthing config over to /store/ismail (Needed for first-time setup)" 324 | t 325 | (:void ("mv ~/.local/state/syncthing /store/ismail/.syncthing")) 326 | ) 327 | ( 328 | "Clone public GitHub source projects for myTerminal" 329 | t 330 | (:all ("git-getter --username myTerminal --targetPath ~/_workspace/github --ssh")) 331 | ) 332 | ( 333 | "Create fallback link to .emacs.d" 334 | t 335 | (:all ("ln -s /home/ismail/.config/emacs /home/ismail/.emacs.d")) 336 | ) 337 | ( 338 | "Link myTerminal/super-emacs to myterminal/dotfiles" 339 | t 340 | (:all ("mkdir /home/ismail/.config/emacs/configs" 341 | "ln -s ~/_workspace/github/super-emacs/.emacs.d ~/.config/emacs/configs/super-emacs")) 342 | ) 343 | ( 344 | "Convert dotfiles at '~' from HTTPS to SSH" 345 | t 346 | (:all ("rm -rf ~/.git" 347 | "cp -r ~/_workspace/github/dotfiles/.git ~/.git")) 348 | ) 349 | ( 350 | "Create convenience soft-links" 351 | t 352 | (:all ("ln -s ~/_workspace/kitchen ~/_kitchen" 353 | "ln -s ~/_workspace/github ~/_github")) 354 | ) 355 | ( 356 | "Re-generate symlinks for binaries" 357 | t 358 | (:all ("~/_store/Vault/binaries/_regenerate-binary-symlinks")) 359 | ) 360 | ( 361 | "Set up Ollama" 362 | t 363 | (:void ("cp -R ~/.assets/services/ollama-runit ~/.services/ollama" 364 | "~/_store/Vault/binaries/ollama pull llama3")) 365 | ) 366 | ( 367 | "Set up Fabric Framework" 368 | t 369 | (:void ("~/_store/Vault/binaries/fabric --setup")) 370 | ) 371 | ( 372 | "Perform a few package-dependent config" 373 | nil 374 | (:void ("sudo usermod -aG libvirt ismail" 375 | "xfconf-query --channel thunar -p /default-view -s ThunarDetailsView" 376 | "xfconf-query --channel thunar -p /last-location-bar -s ThunarLocationButtons" 377 | "xfconf-query --channel thunar -p /last-show-hidden -s true" 378 | "flatpak override --user eu.betterbird.Betterbird --filesystem=home")) 379 | ) 380 | ( 381 | "Set Mullvad as the default web browser" 382 | t 383 | (:void ("sudo cp ~/.assets/mullvad-browser.desktop /usr/share/applications" 384 | "xdg-settings set default-web-browser mullvad-browser.desktop")) 385 | ) 386 | ( 387 | "Enable touch scrolling for Firefox" 388 | t 389 | (:void ("echo \" 390 | MOZ_USE_XINPUT2 DEFAULT=1 391 | \" | sudo tee -a /etc/security/pam_env.conf")) 392 | ) 393 | ( 394 | "Tag machine with ~/.mt-tag" 395 | t 396 | (:all ("touch ~/.mt-tag")) 397 | ) 398 | ) 399 | -------------------------------------------------------------------------------- /.setup/hardware/configure-default-display-brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo " 4 | brightnessctl s ${1} 5 | " >> ~/.configure-output-devices 6 | -------------------------------------------------------------------------------- /.setup/hardware/configure-default-sound-volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo " 4 | pactl set-sink-volume @DEFAULT_SINK@ ${1} 5 | " >> ~/.configure-output-devices 6 | -------------------------------------------------------------------------------- /.setup/hardware/configure-dpi-for-wayland: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo " 4 | swaymsg output '${2}' scale ${1} 5 | " >> ~/.configure-output-devices 6 | -------------------------------------------------------------------------------- /.setup/hardware/configure-dpi-for-xorg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Xft.dpi: ${1}" > ~/.Xresources_custom 4 | -------------------------------------------------------------------------------- /.setup/hardware/configure-fingerprints: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Function to augment a particular PAM file 4 | augment_file () { 5 | # Check if the backup file exists 6 | if [ -f /etc/pam.d/${1}.old ]; then 7 | echo /etc/pam.d/${1}.old exists! 8 | else 9 | # Make backup of current file 10 | sudo mv /etc/pam.d/${1} /etc/pam.d/${1}.old 11 | 12 | # Create a new file for fprintd 13 | echo " 14 | #%PAM-1.0 15 | 16 | auth required pam_env.so 17 | auth sufficient pam_fprintd.so 18 | auth sufficient pam_unix.so try_first_pass likeauth nullok 19 | auth required pam_deny.so 20 | " | sudo tee /etc/pam.d/${1} 21 | fi 22 | } 23 | 24 | # Function to register fingerprints 25 | register_fingerprints () { 26 | sudo fprintd-enroll ${USER} 27 | } 28 | 29 | # The main entry-point to the script 30 | main () { 31 | register_fingerprints 32 | augment_file vlock 33 | augment_file i3lock 34 | augment_file sudo 35 | } 36 | 37 | # Start 38 | main 39 | -------------------------------------------------------------------------------- /.setup/hardware/configure-screen-color-temp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "sct ${1}" >> ~/.configure-output-devices 4 | -------------------------------------------------------------------------------- /.setup/hardware/configure-touchpad-for-wayland: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Generate tweaks script 4 | echo " 5 | swaymsg input '${1}' accel_profile adaptive 6 | swaymsg input '${1}' pointer_accel ${2} 7 | swaymsg input '${1}' tap_button_map lrm 8 | swaymsg input '${1}' tap enabled 9 | swaymsg input '${1}' natural_scroll enabled 10 | " >> ~/.configure-input-devices 11 | -------------------------------------------------------------------------------- /.setup/hardware/configure-touchpad-for-xorg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Enable libinput events for touchpad 4 | sudo mkdir /etc/X11/xorg.conf.d 5 | echo " 6 | Section \"InputClass\" 7 | Identifier \"libinput touchpad catchall\" 8 | MatchIsTouchpad \"on\" 9 | MatchDevicePath \"/dev/input/event*\" 10 | Driver \"libinput\" 11 | EndSection 12 | " | sudo tee /etc/X11/xorg.conf.d/40-libinput.conf 13 | 14 | # Generate tweaks script 15 | echo " 16 | xinput set-prop '${1}' 'libinput Accel Speed' ${2} 17 | xinput set-prop '${1}' 'libinput Click Method Enabled' 0 1 18 | xinput set-prop '${1}' 'libinput Tapping Enabled' 1 19 | xinput set-prop '${1}' 'libinput Natural Scrolling Enabled' 1 20 | " >> ~/.configure-input-devices 21 | -------------------------------------------------------------------------------- /.setup/hardware/configure-trackpoint-for-wayland: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Generate tweaks script 4 | echo " 5 | swaymsg input '${1}' pointer_accel ${2} 6 | " >> ~/.configure-input-devices 7 | -------------------------------------------------------------------------------- /.setup/hardware/configure-trackpoint-for-xorg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Generate tweaks script 4 | echo " 5 | xinput set-prop '${1}' 'libinput Accel Speed' ${2} 6 | " >> ~/.configure-input-devices 7 | -------------------------------------------------------------------------------- /.setup/hardware/void/configure-power-management: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Install required packages 4 | sudo xbps-install -Sy $@ 5 | 6 | # Set battery charge/discharge thresholds 7 | ~/.bin/linux/mt-battery-set-charge-thresholds 8 | 9 | # Start tlp service 10 | sudo ln -s /etc/sv/tlp /var/service 11 | -------------------------------------------------------------------------------- /.setup/hardware/void/configure-pulseeffects: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo xbps-install -Sy pulseeffects-legacy 4 | pulseeffects 5 | bash -c "$(curl -fsSL https://raw.githubusercontent.com/JackHack96/PulseEffects-Presets/pulseeffects/install.sh)" 6 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/dell-precision-t3600: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Configure startup sound volume 4 | . ~/.setup/hardware/configure-default-sound-volume 70% 5 | 6 | # Install Nvidia drivers 7 | . ~/.setup/hardware/void/nvidia-latest 8 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-t15g-g2: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2021 Lenovo ThinkPad T15g Gen 2 and mostly follows 5 | # steps from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Install Nvidia drivers 8 | . ~/.setup/hardware/void/nvidia-latest 9 | 10 | # Fix audio input and output 11 | sudo xbps-install -Sy sof-firmware 12 | 13 | # Enable Dolby Atmos Effect through pulseeffects 14 | . ~/.setup/hardware/void/configure-pulseeffects 15 | 16 | # Configure startup sound volume 17 | . ~/.setup/hardware/configure-default-sound-volume 70% 18 | 19 | # Improve touchpad experience 20 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 1.0 21 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 22 | 23 | # Install tlp and more for power management 24 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 25 | 26 | # Configure fingerprint sensor 27 | . ~/.setup/hardware/configure-fingerprints 28 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-t420s: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2011 Lenovo ThinkPad X420s and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_T420s 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 82 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.85 LVDS-1 10 | 11 | # Configure startup sound volume 12 | . ~/.setup/hardware/configure-default-sound-volume 70% 13 | 14 | # Improve touchpad experience 15 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 16 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 17 | 18 | # Install tlp and more for power management 19 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 20 | 21 | # Configure fingerprint sensor 22 | . ~/.setup/hardware/configure-fingerprints 23 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-t440p: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2013 Lenovo ThinkPad T440p and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_T440p 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Improve touchpad and trackpoint experience 11 | . ~/.setup/hardware/configure-touchpad-for-xorg "Synaptics TM3053-003" 0.5 12 | . ~/.setup/hardware/configure-trackpoint-for-xorg "TPPS/2 IBM TrackPoint" 0.25 13 | . ~/.setup/hardware/configure-touchpad-for-wayland "1739:0:Synaptics_TM3053-003" 1 14 | . ~/.setup/hardware/configure-trackpoint-for-wayland "2:10:TPPS\/2_IBM_TrackPoint" 0.25 15 | 16 | # Install tlp and more for power management 17 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 18 | 19 | # Configure fingerprint sensor 20 | . ~/.setup/hardware/configure-fingerprints 21 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-t470: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2017 Lenovo ThinkPad T470 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Improve touchpad experience 11 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 12 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 13 | 14 | # Install tlp and more for power management 15 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 16 | 17 | # Configure fingerprint sensor 18 | . ~/.setup/hardware/configure-fingerprints 19 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-t61p: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2008 Lenovo ThinkPad T61p and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Improve touchpad experience 11 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 12 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 13 | 14 | # Install tlp and more for power management 15 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 16 | 17 | # Configure fingerprint sensor 18 | . ~/.setup/hardware/configure-fingerprints 19 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-w530: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2012 Lenovo ThinkPad W530 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_W530 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Set screen temperature for high-GAMUT screen 11 | . ~/.setup/hardware/configure-screen-color-temp 4500 12 | 13 | # Improve touchpad experience 14 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 15 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 16 | 17 | # Install tlp and more for power management 18 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 19 | 20 | # Configure fingerprint sensor 21 | . ~/.setup/hardware/configure-fingerprints 22 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-carbon-g5: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2017 Lenovo ThinkPad X1 Carbon and mostly follows 5 | # steps from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Improve touchpad experience 11 | . ~/.setup/hardware/configure-touchpad-for-xorg "Synaptics TM3289-002" 0.75 12 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:Synaptics TM3289-002" 1 13 | 14 | # Install tlp and more for power management 15 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 16 | 17 | # Configure fingerprint sensor 18 | . ~/.setup/hardware/configure-fingerprints 19 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-carbon-g7: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2019 Lenovo ThinkPad X1 Carbon and mostly follows 5 | # steps from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Fix audio input and output 8 | sudo xbps-install -Sy sof-firmware 9 | 10 | # Configure startup sound volume 11 | . ~/.setup/hardware/configure-default-sound-volume 70% 12 | 13 | # Improve touchpad experience 14 | . ~/.setup/hardware/configure-touchpad-for-xorg "SYNA8004:00 06CB:CD8B Touchpad" 0.75 15 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SYNA8004:00 06CB:CD8B Touchpad" 1 16 | 17 | # Install tlp and more for power management 18 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 19 | 20 | # Configure fingerprint sensor 21 | . ~/.setup/hardware/configure-fingerprints 22 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-extreme-g3: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2020 Lenovo ThinkPad X1 Extreme and mostly follows 5 | # steps from https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Extreme 6 | 7 | # Set display scaling for HiDPI 8 | . ~/.setup/hardware/configure-dpi-for-xorg 192 9 | . ~/.setup/hardware/configure-dpi-for-wayland 2 eDP-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 30% 13 | 14 | # Install Nvidia drivers 15 | . ~/.setup/hardware/void/nvidia-latest 16 | 17 | # Fix audio input and output 18 | sudo xbps-install -Sy alsa-firmware sof-firmware 19 | echo " 20 | pcm.!default { 21 | type hw 22 | card 1 23 | } 24 | ctl.!default { 25 | type hw 26 | card 1 27 | } 28 | " > .asoundrc 29 | 30 | # Enable Dolby Atmos Effect through pulseeffects 31 | . ~/.setup/hardware/void/configure-pulseeffects 32 | 33 | # Configure startup sound volume 34 | . ~/.setup/hardware/configure-default-sound-volume 70% 35 | 36 | # Improve touchpad experience 37 | . ~/.setup/hardware/configure-touchpad-for-xorg "Synaptics TM3625-010" 1.0 38 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:Synaptics TM3625-010" 1 39 | 40 | # Install tlp and more for power management 41 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 42 | 43 | # TODO: Fix display scaling 44 | 45 | # TODO: Fix display flickering on integrated mode 46 | 47 | # Configure fingerprint sensor 48 | . ~/.setup/hardware/configure-fingerprints 49 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-nano-g1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2021 Lenovo ThinkPad X1 Nano Gen 1 and mostly 5 | # follows steps from https://wiki.archlinux.org/title/Lenovo_ThinkPad_X1_Nano 6 | 7 | # Set display scaling for the smaller (but high-res) screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 120 9 | . ~/.setup/hardware/configure-dpi-for-wayland 1.25 eDP-1 10 | 11 | # Fix audio input and output 12 | sudo xbps-install -Sy sof-firmware 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Improve touchpad experience 18 | . ~/.setup/hardware/configure-touchpad-for-xorg "ELAN0670:00 04F3:3150 Touchpad" 1 19 | . ~/.setup/hardware/configure-touchpad-for-wayland "1267:12624:ELAN0670:00_04F3:3150_Touchpad" 1 20 | 21 | # Install tlp and more for power management 22 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 23 | 24 | # Configure fingerprint sensor 25 | . ~/.setup/hardware/configure-fingerprints 26 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-yoga-g1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2016 Lenovo ThinkPad X1 Yoga Gen 1 and mostly 5 | # follows steps from 6 | # https://wiki.archlinux.org/title/Lenovo_ThinkPad_X1_Yoga_(Gen_1) 7 | 8 | # Set display scaling 9 | . ~/.setup/hardware/configure-dpi-for-xorg 144 10 | . ~/.setup/hardware/configure-dpi-for-wayland 1.5 LVDS-1 11 | 12 | # Fix audio input and output 13 | sudo xbps-install -Sy alsa-firmware sof-firmware 14 | 15 | # Configure startup sound volume 16 | . ~/.setup/hardware/configure-default-sound-volume 70% 17 | 18 | # Improve touchpad experience 19 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 1.0 20 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 21 | 22 | # Install tlp and more for power management 23 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 24 | 25 | # Configure fingerprint sensor 26 | . ~/.setup/hardware/configure-fingerprints 27 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x1-yoga-g3: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2018 Lenovo ThinkPad X1 Yoga Gen 3 and mostly follows 5 | # steps from https://wiki.archlinux.org/title/Lenovo_ThinkPad_X1_Yoga_(Gen_3) 6 | 7 | # Fix audio input and output 8 | sudo xbps-install -Sy alsa-firmware sof-firmware 9 | 10 | # Configure startup sound volume 11 | . ~/.setup/hardware/configure-default-sound-volume 70% 12 | 13 | # Improve touchpad experience 14 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.75 15 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 16 | 17 | # Install tlp and more for power management 18 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 19 | 20 | # Set up orientation sensors 21 | # TODO: Fix 22 | sudo xbps-install -Sy iio-sensor-proxy 23 | sudo ln -s /etv/sv/iio-sensor-proxy /var/service 24 | 25 | # Configure fingerprint sensor 26 | # TODO: Fix this 27 | . ~/.setup/hardware/configure-fingerprints 28 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x201: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2010 Lenovo ThinkPad X201 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_X201 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 72 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.75 LVDS-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 30% 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Improve touchpad and trackpoint experience 18 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 19 | . ~/.setup/hardware/configure-trackpoint-for-xorg "TPPS/2 IBM TrackPoint" 0.25 20 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 21 | . ~/.setup/hardware/configure-trackpoint-for-wayland "2:10:TPPS/2_IBM_TrackPoint" 0.25 22 | 23 | # Install tlp and more for power management 24 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 25 | 26 | # Configure fingerprint sensor 27 | . ~/.setup/hardware/configure-fingerprints 28 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x220: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2011 Lenovo ThinkPad X220 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_X220 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 72 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.75 LVDS-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 30% 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Improve touchpad and trackpoint experience 18 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 19 | . ~/.setup/hardware/configure-trackpoint-for-xorg "TPPS/2 IBM TrackPoint" 1 20 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 21 | . ~/.setup/hardware/configure-trackpoint-for-wayland "2:10:TPPS/2_IBM_TrackPoint" 1 22 | 23 | # Install tlp and more for power management 24 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 25 | 26 | # Configure fingerprint sensor 27 | # TODO: Fix 28 | . ~/.setup/hardware/configure-fingerprints 29 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x230: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2012 Lenovo ThinkPad X230 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Lenovo_ThinkPad_X230 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 72 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.75 LVDS-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 30% 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Improve touchpad and trackpoint experience 18 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 19 | . ~/.setup/hardware/configure-trackpoint-for-xorg "TPPS/2 IBM TrackPoint" 1 20 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 21 | . ~/.setup/hardware/configure-trackpoint-for-wayland "2:10:TPPS/2_IBM_TrackPoint" 1 22 | 23 | # Install tlp and more for power management 24 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 25 | 26 | # Configure fingerprint sensor 27 | # TODO: Fix 28 | . ~/.setup/hardware/configure-fingerprints 29 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x260: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2016 Lenovo ThinkPad X260 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 72 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.75 LVDS-1 10 | 11 | # Configure startup sound volume 12 | . ~/.setup/hardware/configure-default-sound-volume 70% 13 | 14 | # Improve touchpad experience 15 | . ~/.setup/hardware/configure-touchpad-for-xorg "SynPS/2 Synaptics TouchPad" 0.5 16 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:SynPS/2_Synaptics_TouchPad" 1 17 | 18 | # Install tlp and more for power management 19 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 20 | 21 | # Configure fingerprint sensor 22 | . ~/.setup/hardware/configure-fingerprints 23 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x280: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2018 Lenovo ThinkPad X280 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Configure startup sound volume 8 | . ~/.setup/hardware/configure-default-sound-volume 70% 9 | 10 | # Improve touchpad experience 11 | . ~/.setup/hardware/configure-touchpad-for-xorg "Synaptics TM3381-002" 0.75 12 | . ~/.setup/hardware/configure-touchpad-for-wayland "2:7:Synaptics TM3381-002" 1 13 | 14 | # Install tlp and more for power management 15 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms powertop 16 | 17 | # Configure fingerprint sensor 18 | . ~/.setup/hardware/configure-fingerprints 19 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x301: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2008 Lenovo ThinkPad X301 and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 82 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.85 LVDS-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 70% 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Install tlp and more for power management 18 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 19 | 20 | # Configure fingerprint sensor 21 | . ~/.setup/hardware/configure-fingerprints 22 | -------------------------------------------------------------------------------- /.setup/hardware/void/machines/thinkpad-x61s: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is an add-on to `~/.setup/forge-config.lisp` containing 4 | # device-specific setup for 2007 Lenovo ThinkPad X61s and mostly follows steps 5 | # from https://wiki.archlinux.org/title/Laptop/Lenovo 6 | 7 | # Set display scaling for the smaller screen 8 | . ~/.setup/hardware/configure-dpi-for-xorg 72 9 | . ~/.setup/hardware/configure-dpi-for-wayland 0.75 LVDS-1 10 | 11 | # Configure default screen brightness 12 | . ~/.setup/hardware/configure-default-display-brightness 100% 13 | 14 | # Configure startup sound volume 15 | . ~/.setup/hardware/configure-default-sound-volume 70% 16 | 17 | # Install tlp and more for power management 18 | . ~/.setup/hardware/void/configure-power-management tlp acpi_call-dkms tp_smapi-dkms powertop 19 | 20 | # Configure fingerprint sensor 21 | # TODO: Fix 22 | . ~/.setup/hardware/configure-fingerprints 23 | -------------------------------------------------------------------------------- /.setup/hardware/void/mesa: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_mesa_packages=(mesa-intel-dri \ 4 | mesa-dri-32bit \ 5 | mesa-vulkan-intel-32bit) 6 | 7 | sudo xbps-install -Sy "${mt_mesa_packages[@]}" 8 | -------------------------------------------------------------------------------- /.setup/hardware/void/nvidia-latest: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_nvidia_packages=(nvidia \ 4 | nvidia-libs \ 5 | nvidia-libs-32bit \ 6 | nvidia-gtklibs \ 7 | nvidia-gtklibs-32bit \ 8 | nvidia-opencl \ 9 | nvidia-opencl-32bit) 10 | mt_more_packages=(vulkan-loader \ 11 | vulkan-loader-32bit \ 12 | libgcc-32bit \ 13 | libstdc++-32bit \ 14 | libdrm-32bit \ 15 | libglvnd-32bit \ 16 | mesa-dri-32bit) 17 | 18 | if [ "${1}" = "uninstall" ]; then 19 | sudo xbps-remove -Ry "${mt_nvidia_packages[@]}" 20 | sudo xbps-remove -Ry "${mt_more_packages[@]}" 21 | else 22 | sudo xbps-install -Sy "${mt_nvidia_packages[@]}" 23 | sudo xbps-install -Sy "${mt_more_packages[@]}" 24 | fi 25 | -------------------------------------------------------------------------------- /.setup/hardware/void/nvidia-legacy-390: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_nvidia_packages=(nvidia390 \ 4 | nvidia390-dkms \ 5 | nvidia390-libs \ 6 | nvidia390-libs-32bit \ 7 | nvidia390-gtklibs \ 8 | nvidia390-gtklibs-32bit \ 9 | nvidia390-opencl \ 10 | nvidia390-opencl-32bit) 11 | mt_more_packages=(vulkan-loader \ 12 | vulkan-loader-32bit \ 13 | libgcc-32bit \ 14 | libstdc++-32bit \ 15 | libdrm-32bit \ 16 | libglvnd-32bit \ 17 | mesa-dri-32bit) 18 | 19 | if [ "${1}" = "uninstall" ]; then 20 | sudo xbps-remove -Ry "${mt_nvidia_packages[@]}" 21 | sudo xbps-remove -Ry "${mt_more_packages[@]}" 22 | else 23 | sudo xbps-install -Sy "${mt_nvidia_packages[@]}" 24 | sudo xbps-install -Sy "${mt_more_packages[@]}" 25 | fi 26 | -------------------------------------------------------------------------------- /.setup/hardware/void/nvidia-legacy-470: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mt_nvidia_packages=(nvidia470 \ 4 | nvidia470-dkms \ 5 | nvidia470-libs \ 6 | nvidia470-libs-32bit \ 7 | nvidia470-gtklibs \ 8 | nvidia470-opencl) 9 | mt_more_packages=(vulkan-loader \ 10 | vulkan-loader-32bit \ 11 | libgcc-32bit \ 12 | libstdc++-32bit \ 13 | libdrm-32bit \ 14 | libglvnd-32bit \ 15 | mesa-dri-32bit) 16 | 17 | if [ "${1}" = "uninstall" ]; then 18 | sudo xbps-remove -Ry "${mt_nvidia_packages[@]}" 19 | sudo xbps-remove -Ry "${mt_more_packages[@]}" 20 | else 21 | sudo xbps-install -Sy "${mt_nvidia_packages[@]}" 22 | sudo xbps-install -Sy "${mt_more_packages[@]}" 23 | fi 24 | -------------------------------------------------------------------------------- /.setup/hardware/void/nvidia-optimus: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: Implement for Void 4 | echo "Not implemented!" 5 | -------------------------------------------------------------------------------- /.setup/other/macos/docker: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | brew install docker docker-machine 4 | docker-machine create --driver virtualbox default 5 | eval ${docker-machine env default} -------------------------------------------------------------------------------- /.setup/other/macos/rust: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | brew install rustup-init 4 | rustup-init 5 | -------------------------------------------------------------------------------- /.setup/other/void/docker: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo xbps-install -S docker 4 | sudo groupadd docker 5 | sudo gpasswd -a ${USER} docker 6 | sudo ln -s /etc/sv/docker /var/service -------------------------------------------------------------------------------- /.setup/other/void/rust: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo xbps-install -S rust 4 | rustup-init --default-toolchain stable --profile default -y 5 | -------------------------------------------------------------------------------- /.setup/start: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Start forge with logs, using local config 4 | ( cd ~/.forge; ./start debug ~/.setup/forge-config.lisp ) -------------------------------------------------------------------------------- /.tmux.conf: -------------------------------------------------------------------------------- 1 | set -g default-command "${SHELL}" -------------------------------------------------------------------------------- /.xinitrc: -------------------------------------------------------------------------------- 1 | xrdb -merge ~/.Xresources 2 | xrdb -merge ~/.Xresources_custom 3 | 4 | ~/.scripts/linux/startup/desktop/run 5 | 6 | exec dbus-run-session i3 -c ~/.config/wm/i3 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-NonCommercial-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International 58 | Public License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-NonCommercial-ShareAlike 4.0 International Public License 63 | ("Public License"). To the extent this Public License may be 64 | interpreted as a contract, You are granted the Licensed Rights in 65 | consideration of Your acceptance of these terms and conditions, and the 66 | Licensor grants You such rights in consideration of benefits the 67 | Licensor receives from making the Licensed Material available under 68 | these terms and conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-NC-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution, NonCommercial, and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. NonCommercial means not primarily intended for or directed towards 126 | commercial advantage or monetary compensation. For purposes of 127 | this Public License, the exchange of the Licensed Material for 128 | other material subject to Copyright and Similar Rights by digital 129 | file-sharing or similar means is NonCommercial provided there is 130 | no payment of monetary compensation in connection with the 131 | exchange. 132 | 133 | l. Share means to provide material to the public by any means or 134 | process that requires permission under the Licensed Rights, such 135 | as reproduction, public display, public performance, distribution, 136 | dissemination, communication, or importation, and to make material 137 | available to the public including in ways that members of the 138 | public may access the material from a place and at a time 139 | individually chosen by them. 140 | 141 | m. Sui Generis Database Rights means rights other than copyright 142 | resulting from Directive 96/9/EC of the European Parliament and of 143 | the Council of 11 March 1996 on the legal protection of databases, 144 | as amended and/or succeeded, as well as other essentially 145 | equivalent rights anywhere in the world. 146 | 147 | n. You means the individual or entity exercising the Licensed Rights 148 | under this Public License. Your has a corresponding meaning. 149 | 150 | 151 | Section 2 -- Scope. 152 | 153 | a. License grant. 154 | 155 | 1. Subject to the terms and conditions of this Public License, 156 | the Licensor hereby grants You a worldwide, royalty-free, 157 | non-sublicensable, non-exclusive, irrevocable license to 158 | exercise the Licensed Rights in the Licensed Material to: 159 | 160 | a. reproduce and Share the Licensed Material, in whole or 161 | in part, for NonCommercial purposes only; and 162 | 163 | b. produce, reproduce, and Share Adapted Material for 164 | NonCommercial purposes only. 165 | 166 | 2. Exceptions and Limitations. For the avoidance of doubt, where 167 | Exceptions and Limitations apply to Your use, this Public 168 | License does not apply, and You do not need to comply with 169 | its terms and conditions. 170 | 171 | 3. Term. The term of this Public License is specified in Section 172 | 6(a). 173 | 174 | 4. Media and formats; technical modifications allowed. The 175 | Licensor authorizes You to exercise the Licensed Rights in 176 | all media and formats whether now known or hereafter created, 177 | and to make technical modifications necessary to do so. The 178 | Licensor waives and/or agrees not to assert any right or 179 | authority to forbid You from making technical modifications 180 | necessary to exercise the Licensed Rights, including 181 | technical modifications necessary to circumvent Effective 182 | Technological Measures. For purposes of this Public License, 183 | simply making modifications authorized by this Section 2(a) 184 | (4) never produces Adapted Material. 185 | 186 | 5. Downstream recipients. 187 | 188 | a. Offer from the Licensor -- Licensed Material. Every 189 | recipient of the Licensed Material automatically 190 | receives an offer from the Licensor to exercise the 191 | Licensed Rights under the terms and conditions of this 192 | Public License. 193 | 194 | b. Additional offer from the Licensor -- Adapted Material. 195 | Every recipient of Adapted Material from You 196 | automatically receives an offer from the Licensor to 197 | exercise the Licensed Rights in the Adapted Material 198 | under the conditions of the Adapter's License You apply. 199 | 200 | c. No downstream restrictions. You may not offer or impose 201 | any additional or different terms or conditions on, or 202 | apply any Effective Technological Measures to, the 203 | Licensed Material if doing so restricts exercise of the 204 | Licensed Rights by any recipient of the Licensed 205 | Material. 206 | 207 | 6. No endorsement. Nothing in this Public License constitutes or 208 | may be construed as permission to assert or imply that You 209 | are, or that Your use of the Licensed Material is, connected 210 | with, or sponsored, endorsed, or granted official status by, 211 | the Licensor or others designated to receive attribution as 212 | provided in Section 3(a)(1)(A)(i). 213 | 214 | b. Other rights. 215 | 216 | 1. Moral rights, such as the right of integrity, are not 217 | licensed under this Public License, nor are publicity, 218 | privacy, and/or other similar personality rights; however, to 219 | the extent possible, the Licensor waives and/or agrees not to 220 | assert any such rights held by the Licensor to the limited 221 | extent necessary to allow You to exercise the Licensed 222 | Rights, but not otherwise. 223 | 224 | 2. Patent and trademark rights are not licensed under this 225 | Public License. 226 | 227 | 3. To the extent possible, the Licensor waives any right to 228 | collect royalties from You for the exercise of the Licensed 229 | Rights, whether directly or through a collecting society 230 | under any voluntary or waivable statutory or compulsory 231 | licensing scheme. In all other cases the Licensor expressly 232 | reserves any right to collect such royalties, including when 233 | the Licensed Material is used other than for NonCommercial 234 | purposes. 235 | 236 | 237 | Section 3 -- License Conditions. 238 | 239 | Your exercise of the Licensed Rights is expressly made subject to the 240 | following conditions. 241 | 242 | a. Attribution. 243 | 244 | 1. If You Share the Licensed Material (including in modified 245 | form), You must: 246 | 247 | a. retain the following if it is supplied by the Licensor 248 | with the Licensed Material: 249 | 250 | i. identification of the creator(s) of the Licensed 251 | Material and any others designated to receive 252 | attribution, in any reasonable manner requested by 253 | the Licensor (including by pseudonym if 254 | designated); 255 | 256 | ii. a copyright notice; 257 | 258 | iii. a notice that refers to this Public License; 259 | 260 | iv. a notice that refers to the disclaimer of 261 | warranties; 262 | 263 | v. a URI or hyperlink to the Licensed Material to the 264 | extent reasonably practicable; 265 | 266 | b. indicate if You modified the Licensed Material and 267 | retain an indication of any previous modifications; and 268 | 269 | c. indicate the Licensed Material is licensed under this 270 | Public License, and include the text of, or the URI or 271 | hyperlink to, this Public License. 272 | 273 | 2. You may satisfy the conditions in Section 3(a)(1) in any 274 | reasonable manner based on the medium, means, and context in 275 | which You Share the Licensed Material. For example, it may be 276 | reasonable to satisfy the conditions by providing a URI or 277 | hyperlink to a resource that includes the required 278 | information. 279 | 3. If requested by the Licensor, You must remove any of the 280 | information required by Section 3(a)(1)(A) to the extent 281 | reasonably practicable. 282 | 283 | b. ShareAlike. 284 | 285 | In addition to the conditions in Section 3(a), if You Share 286 | Adapted Material You produce, the following conditions also apply. 287 | 288 | 1. The Adapter's License You apply must be a Creative Commons 289 | license with the same License Elements, this version or 290 | later, or a BY-NC-SA Compatible License. 291 | 292 | 2. You must include the text of, or the URI or hyperlink to, the 293 | Adapter's License You apply. You may satisfy this condition 294 | in any reasonable manner based on the medium, means, and 295 | context in which You Share Adapted Material. 296 | 297 | 3. You may not offer or impose any additional or different terms 298 | or conditions on, or apply any Effective Technological 299 | Measures to, Adapted Material that restrict exercise of the 300 | rights granted under the Adapter's License You apply. 301 | 302 | 303 | Section 4 -- Sui Generis Database Rights. 304 | 305 | Where the Licensed Rights include Sui Generis Database Rights that 306 | apply to Your use of the Licensed Material: 307 | 308 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 309 | to extract, reuse, reproduce, and Share all or a substantial 310 | portion of the contents of the database for NonCommercial purposes 311 | only; 312 | 313 | b. if You include all or a substantial portion of the database 314 | contents in a database in which You have Sui Generis Database 315 | Rights, then the database in which You have Sui Generis Database 316 | Rights (but not its individual contents) is Adapted Material, 317 | including for purposes of Section 3(b); and 318 | 319 | c. You must comply with the conditions in Section 3(a) if You Share 320 | all or a substantial portion of the contents of the database. 321 | 322 | For the avoidance of doubt, this Section 4 supplements and does not 323 | replace Your obligations under this Public License where the Licensed 324 | Rights include other Copyright and Similar Rights. 325 | 326 | 327 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 328 | 329 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 330 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 331 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 332 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 333 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 334 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 335 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 336 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 337 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 338 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 339 | 340 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 341 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 342 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 343 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 344 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 345 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 346 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 347 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 348 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 349 | 350 | c. The disclaimer of warranties and limitation of liability provided 351 | above shall be interpreted in a manner that, to the extent 352 | possible, most closely approximates an absolute disclaimer and 353 | waiver of all liability. 354 | 355 | 356 | Section 6 -- Term and Termination. 357 | 358 | a. This Public License applies for the term of the Copyright and 359 | Similar Rights licensed here. However, if You fail to comply with 360 | this Public License, then Your rights under this Public License 361 | terminate automatically. 362 | 363 | b. Where Your right to use the Licensed Material has terminated under 364 | Section 6(a), it reinstates: 365 | 366 | 1. automatically as of the date the violation is cured, provided 367 | it is cured within 30 days of Your discovery of the 368 | violation; or 369 | 370 | 2. upon express reinstatement by the Licensor. 371 | 372 | For the avoidance of doubt, this Section 6(b) does not affect any 373 | right the Licensor may have to seek remedies for Your violations 374 | of this Public License. 375 | 376 | c. For the avoidance of doubt, the Licensor may also offer the 377 | Licensed Material under separate terms or conditions or stop 378 | distributing the Licensed Material at any time; however, doing so 379 | will not terminate this Public License. 380 | 381 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 382 | License. 383 | 384 | 385 | Section 7 -- Other Terms and Conditions. 386 | 387 | a. The Licensor shall not be bound by any additional or different 388 | terms or conditions communicated by You unless expressly agreed. 389 | 390 | b. Any arrangements, understandings, or agreements regarding the 391 | Licensed Material not stated herein are separate from and 392 | independent of the terms and conditions of this Public License. 393 | 394 | 395 | Section 8 -- Interpretation. 396 | 397 | a. For the avoidance of doubt, this Public License does not, and 398 | shall not be interpreted to, reduce, limit, restrict, or impose 399 | conditions on any use of the Licensed Material that could lawfully 400 | be made without permission under this Public License. 401 | 402 | b. To the extent possible, if any provision of this Public License is 403 | deemed unenforceable, it shall be automatically reformed to the 404 | minimum extent necessary to make it enforceable. If the provision 405 | cannot be reformed, it shall be severed from this Public License 406 | without affecting the enforceability of the remaining terms and 407 | conditions. 408 | 409 | c. No term or condition of this Public License will be waived and no 410 | failure to comply consented to unless expressly agreed to by the 411 | Licensor. 412 | 413 | d. Nothing in this Public License constitutes or may be interpreted 414 | as a limitation upon, or waiver of, any privileges and immunities 415 | that apply to the Licensor or You, including from the legal 416 | processes of any jurisdiction or authority. 417 | 418 | ======================================================================= 419 | 420 | Creative Commons is not a party to its public 421 | licenses. Notwithstanding, Creative Commons may elect to apply one of 422 | its public licenses to material it publishes and in those instances 423 | will be considered the “Licensor.” The text of the Creative Commons 424 | public licenses is dedicated to the public domain under the CC0 Public 425 | Domain Dedication. Except for the limited purpose of indicating that 426 | material is shared under a Creative Commons public license or as 427 | otherwise permitted by the Creative Commons policies published at 428 | creativecommons.org/policies, Creative Commons does not authorize the 429 | use of the trademark "Creative Commons" or any other trademark or logo 430 | of Creative Commons without its prior written consent including, 431 | without limitation, in connection with any unauthorized modifications 432 | to any of its public licenses or any other arrangements, 433 | understandings, or agreements concerning use of licensed material. For 434 | the avoidance of doubt, this paragraph does not form part of the 435 | public licenses. 436 | 437 | Creative Commons may be contacted at creativecommons.org. 438 | -------------------------------------------------------------------------------- /bootstrap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Init and fetch the git project 4 | cd ~ 5 | git init 6 | git remote add origin https://github.com/myTerminal/dotfiles.git 7 | git fetch --all 8 | rm .bash* 9 | git checkout master 10 | 11 | # Fetch/update twiner 12 | if [ -d ~/.twiner ]; then 13 | git -C ~/.twiner pull 14 | else 15 | git clone https://github.com/myTerminal/twiner.git ~/.twiner 16 | fi 17 | 18 | # Start twiner in debug mode 19 | ~/.twiner/start debug 20 | 21 | # Fetch/update forge 22 | if [ -d ~/.forge ]; then 23 | git -C ~/.forge pull 24 | else 25 | git clone https://github.com/myTerminal/forge.git ~/.forge 26 | fi 27 | 28 | # Start setup 29 | ~/.setup/start 30 | --------------------------------------------------------------------------------