#!/usr/bin/env fish

echo hello > output.txt

alias something=echo

sudo systemctl start postgresql

# Outputs 'image.png'.
echo (basename image.jpg .jpg).png

echo some text for testing

# Convert all JPEG files in the current directory to the
# PNG format using the 'convert' program.
for i in *.jpg; convert $i (basename $i .jpg).png; end

# Set the ``data`` variable to the contents of 'data.txt'
# without splitting it into a list.
begin; set -l IFS; set data (cat data.txt); end

# Set ``$data`` to the contents of data, splitting on NUL-bytes.
set data (cat data | string split0)

grep fish myanimallist1 | wc -l

command some-arg-with-dash

echo input.{c,h,txt}

echo {$dogs}dog

echo (seq 10)[1 2 3]
echo (seq 10)[2..5 1..3]
echo (seq 10)[-1..1]
set PATH $PATH[-1..1]

set foo banana
foo=gagaga echo $foo # prints gagaga, while in other shells it might print "banana"
foo=gagaga somecommand $foo # prints gagaga, while in other shells it might print "banana"

function some func
    echo 'function' with space
end

function dirs --description 'Print directory stack'
    set -l options h/help c
    argparse -n dirs --max-args=0 $options -- $argv
    or return

    if set -q _flag_help
        __fish_print_help dirs
        return 0
    end

    if set -q _flag_c
        # Clear directory stack.
        set -e -g dirstack
        return 0
    end

    # Replace $HOME with ~.
    string replace -r '^'"$HOME"'($|/)' '~$1' -- $PWD $dirstack | string join " "
end

function ytdl_files -d "Download videos from text files with youtube-dl and put them into folders"
    argparse --name=ytdl_files 's/shutdown' -- $argv

    for file in $argv
        echo "Operating on $file"
        youtube-dl -a $file -i -o (dirname $file)"/"(basename $file .txt)"/%(autonumber)s-%(title)s.%(ext)s"
    end

    if test -n "$_flag_shutdown"
        echo "poweroff"
    end
end

function cheat -d 'Get programming language cheat sheets from cheat.sh'
    if test $argv[1]
        curl https://cheat.sh/$argv[1]
    else
        curl https://cheat.sh
    end
end

function dut -d 'Get top paths with most disk usage'
    du -hs $argv[2]/* | sort -rh | head -$argv[1]
end

function m2d --description 'Move to desktop -- m2d program_name desktop_num'
    bspc node (xdo id -N $argv[1]) -d $argv[2]
end

set -x no_proxy 'localhost,127.0.0.1'

function toggle_proxy
    if not set -q HTTP_PROXY
        for proxy in HTTP_PROXY HTTPS_PROXY http_proxy https_proxy
            set -gx $proxy 'http://127.0.0.1:8118'
        end
        echo 'Proxy On'
    else
        set -e {HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy}
        echo 'proxy Off'
    end
end

function wttr -d 'Get weather info from wttr.in'
    if test $argv[1]
        curl https://wttr.in/$argv[1]
    else
        curl https://wttr.in/
    end
end

function fish_config --description "Launch fish's web based configuration"
    argparse h/help -- $argv
    or return

    if set -q _flag_help
        __fish_print_help fish_config
        return 0
    end

    set -l cmd $argv[1]
    set -e argv[1]

    set -q cmd[1]
    or set cmd browse

    # The web-based configuration UI
    # Also opened with just `fish_config` or `fish_config browse`.
    if contains -- $cmd browse
        set -lx __fish_bin_dir $__fish_bin_dir
        if set -l python (__fish_anypython)
            $python "$__fish_data_dir/tools/web_config/webconfig.py" $argv
        else
            echo (set_color $fish_color_error)Cannot launch the web configuration tool:(set_color normal)
            echo (set_color -o)"fish_config browse"(set_color normal) requires Python.
            echo Installing python will fix this, and also enable completions to be
            echo automatically generated from man pages.\n
            echo To change your prompt, use (set_color -o)"fish_config prompt"(set_color normal) or create a (set_color -o)"fish_prompt"(set_color normal) function.
                echo To list the samples use (set_color -o)"fish_config prompt show"(set_color normal).\n

                echo You can tweak your colors by setting the (set_color $fish_color_search_match)\$fish_color_\*(set_color normal) variables.
            end
            return 0
        end

        if not contains -- $cmd prompt
            echo No such subcommand: $cmd >&2
            return 1
        end
        
        # prompt - for prompt switching
        set -l cmd $argv[1]
        set -e argv[1]

        if contains -- $cmd list; and set -q argv[1]
            echo "Too many arguments" >&2
            return 1
        end

        set -l prompt_dir $__fish_data_dir/sample_prompts $__fish_data_dir/tools/web_config/sample_prompts
        switch $cmd
            case show
                set -l fish (status fish-path)
                set -l prompts $prompt_dir/$argv.fish
                set -q prompts[1]; or set prompts $prompt_dir/*.fish
                for p in $prompts
                    if not test -e "$p"
                        continue
                    end
                    set -l promptname (string replace -r '.*/([^/]*).fish$' '$1' $p)
                    echo -s (set_color --underline) $promptname (set_color normal)
                    $fish -c "functions -e fish_right_prompt; source $p;
                    false
                    fish_prompt
                    echo (set_color normal)
                    if functions -q fish_right_prompt;
                    echo right prompt: (false; fish_right_prompt)
                end"
                echo
                end
            case list ''
                string replace -r '.*/([^/]*).fish$' '$1' $prompt_dir/*.fish
                return
            case choose
                if set -q argv[2]
                    echo "Too many arguments" >&2
                    return 1
                end
                if not set -q argv[1]
                    echo "Too few arguments" >&2
                    return 1
                end

                set -l have 0
                for f in $prompt_dir/$argv[1].fish
                    if test -f $f
                        source $f
                        set have 1
                        break
                    end
                end
                if test $have -eq 0
                    echo "No such prompt: '$argv[1]'" >&2
                    return 1
                end
            case save
                read -P"Overwrite prompt? [y/N]" -l yesno
                if string match -riq 'y(es)?' -- $yesno
                    echo Overwriting
                    cp $__fish_config_dir/functions/fish_prompt.fish{,.bak}

                    if set -q argv[1]
                        set -l have 0
                        for f in $prompt_dir/$argv[1].fish
                            if test -f $f
                                set have 1
                                source $f
                                or return 2
                            end
                        end
                        if test $have -eq 0
                            echo "No such prompt: '$argv[1]'" >&2
                            return 1
                        end
                    end

                    funcsave fish_prompt
                    or return

                    functions -q fish_right_prompt
                    and funcsave fish_right_prompt

                    return
                else
                    echo Not overwriting
                    return 1
                end
        end

        return 0
    end