diff --git a/.bashrc b/.bashrc index b4f9b46..5992b98 100644 --- a/.bashrc +++ b/.bashrc @@ -1,10 +1,114 @@ -# -# ~/.bashrc -# +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples # If not running interactively, don't do anything -[[ $- != *i* ]] && return +case $- in + *i*) ;; + *) return;; +esac -alias ls='ls --color=auto' -alias dotfiles='/usr/bin/git --git-dir=$HOME/.config/dotfiles/ --work-tree=$HOME' -PS1='[\u@\h \W]\$ ' +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + #alias grep='grep --color=auto' + #alias fgrep='fgrep --color=auto' + #alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +#alias ll='ls -l' +#alias la='ls -A' +#alias l='ls -CF' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi +. "$HOME/.cargo/env" diff --git a/.config/fish/completions/fisher.fish b/.config/fish/completions/fisher.fish index 4e1016a..6d23ce4 100644 --- a/.config/fish/completions/fisher.fish +++ b/.config/fish/completions/fisher.fish @@ -1,7 +1,7 @@ -complete -c fisher -x -l help -d "print usage help" -complete -c fisher -x -l version -d "print fisher version" -complete -c fisher -x -n "__fish_use_subcommand" -a install -d "install plugins" -complete -c fisher -x -n "__fish_use_subcommand" -a update -d "update installed plugins" -complete -c fisher -x -n "__fish_use_subcommand" -a remove -d "remove installed plugins" -complete -c fisher -x -n "__fish_use_subcommand" -a list -d "list installed plugins matching " -complete -c fisher -x -n "__fish_seen_subcommand_from update remove" -a "(fisher list)" \ No newline at end of file +complete --command fisher --exclusive --long help --description "Print help" +complete --command fisher --exclusive --long version --description "Print version" +complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins" +complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins" +complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins" +complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex" +complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)" diff --git a/.config/fish/conf.d/startx.fish b/.config/fish/conf.d/startx.fish index 3c998a5..b66f805 100644 --- a/.config/fish/conf.d/startx.fish +++ b/.config/fish/conf.d/startx.fish @@ -1,6 +1,6 @@ # Start X at login if status --is-login if test -z "$DISPLAY" -a $XDG_VTNR = 1 - exec startx + exec sway end end diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables index 57c7de2..144c4f5 100644 --- a/.config/fish/fish_variables +++ b/.config/fish/fish_variables @@ -1,10 +1,11 @@ # This file contains fish universal variable definitions. # VERSION: 3.0 -SETUVAR --export --path GOPATH:/home/bredow/build/go +SETUVAR --export --path GOPATH:/home/florestan/build/go SETUVAR __fish_initialized:3400 SETUVAR _fisher_danhper_2F_fish_2D_ssh_2D_agent_files:/home/bredow/\x2econfig/fish/functions/__ssh_agent_is_started\x2efish\x1e/home/bredow/\x2econfig/fish/functions/__ssh_agent_start\x2efish\x1e/home/bredow/\x2econfig/fish/conf\x2ed/fish\x2dssh\x2dagent\x2efish -SETUVAR _fisher_jorgebucaran_2F_fisher_files:/home/bredow/\x2econfig/fish/functions/fisher\x2efish\x1e/home/bredow/\x2econfig/fish/completions/fisher\x2efish +SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish SETUVAR _fisher_plugins:jorgebucaran/fisher\x1edanhper/fish\x2dssh\x2dagent +SETUVAR _fisher_upgraded_to_4_4:\x1d SETUVAR fish_color_autosuggestion:555\x1ebrblack SETUVAR fish_color_cancel:\x2dr SETUVAR fish_color_command:005fd7 diff --git a/.config/fish/functions/fisher.fish b/.config/fish/functions/fisher.fish index c79c60d..b1513d3 100644 --- a/.config/fish/functions/fisher.fish +++ b/.config/fish/functions/fisher.fish @@ -1,206 +1,240 @@ -set -g fisher_version 4.1.0 - -function fisher -a cmd -d "fish plugin manager" - set -q fisher_path || set -l fisher_path $__fish_config_dir - set -l fish_plugins $__fish_config_dir/fish_plugins +function fisher --argument-names cmd --description "A plugin manager for Fish" + set --query fisher_path || set --local fisher_path $__fish_config_dir + set --local fisher_version 4.4.4 + set --local fish_plugins $__fish_config_dir/fish_plugins switch "$cmd" case -v --version echo "fisher, version $fisher_version" case "" -h --help - echo "usage: fisher install install plugins" - echo " fisher remove remove installed plugins" - echo " fisher update update installed plugins" - echo " fisher update update all installed plugins" - echo " fisher list [] list installed plugins matching regex" - echo "options:" - echo " -v or --version print fisher version" - echo " -h or --help print this help message" + echo "Usage: fisher install Install plugins" + echo " fisher remove Remove installed plugins" + echo " fisher update Update installed plugins" + echo " fisher update Update all installed plugins" + echo " fisher list [] List installed plugins matching regex" + echo "Options:" + echo " -v, --version Print version" + echo " -h, --help Print this help message" + echo "Variables:" + echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~ case ls list string match --entire --regex -- "$argv[2]" $_fisher_plugins case install update remove - isatty || read -laz stdin && set -a argv $stdin - set -l install_plugins - set -l update_plugins - set -l remove_plugins - set -l arg_plugins $argv[2..-1] - set -l old_plugins $_fisher_plugins - set -l new_plugins + isatty || read --local --null --array stdin && set --append argv $stdin - if not set -q argv[2] - if test "$cmd" != update || test ! -e $fish_plugins - echo "fisher: not enough arguments for command: \"$cmd\"" >&2 && return 1 + set --local install_plugins + set --local update_plugins + set --local remove_plugins + set --local arg_plugins $argv[2..-1] + set --local old_plugins $_fisher_plugins + set --local new_plugins + + test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins) + + if ! set --query argv[2] + if test "$cmd" != update + echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1 + else if ! set --query file_plugins + echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1 end - set arg_plugins (string trim <$fish_plugins) + set arg_plugins $file_plugins end for plugin in $arg_plugins - test -e "$plugin" && set plugin (realpath $plugin) - contains -- "$plugin" $new_plugins || set -a new_plugins $plugin + set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin) + contains -- "$plugin" $new_plugins || set --append new_plugins $plugin end - if set -q argv[2] + if set --query argv[2] for plugin in $new_plugins if contains -- "$plugin" $old_plugins - if test "$cmd" = remove - set -a remove_plugins $plugin - else - set -a update_plugins $plugin - end - else if test "$cmd" != install - echo "fisher: plugin not installed: \"$plugin\"" >&2 && return 1 + test "$cmd" = remove && + set --append remove_plugins $plugin || + set --append update_plugins $plugin + else if test "$cmd" = install + set --append install_plugins $plugin else - set -a install_plugins $plugin + echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1 end end else for plugin in $new_plugins - if contains -- "$plugin" $old_plugins - set -a update_plugins $plugin - else - set -a install_plugins $plugin - end + contains -- "$plugin" $old_plugins && + set --append update_plugins $plugin || + set --append install_plugins $plugin end for plugin in $old_plugins - if not contains -- "$plugin" $new_plugins - set -a remove_plugins $plugin - end + contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin end end - set -l pid_list - set -l source_plugins - set -l fetch_plugins $update_plugins $install_plugins - echo -e "\x1b[1mfisher $cmd version $fisher_version\x1b[22m" + set --local pid_list + set --local source_plugins + set --local fetch_plugins $update_plugins $install_plugins + set --local fish_path (status fish-path) + + echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal) for plugin in $fetch_plugins - set -l source (command mktemp -d) - set -a source_plugins $source + set --local source (command mktemp -d) + set --append source_plugins $source - command mkdir -p $source/{completions,conf.d,functions} + command mkdir -p $source/{completions,conf.d,themes,functions} - fish -c " - if test -e $plugin - command cp -Rf $plugin/* $source - else - set temp (command mktemp -d) - set name (string split \@ $plugin) || set name[2] HEAD - set url https://codeload.github.com/\$name[1]/tar.gz/\$name[2] - set -q fisher_user_api_token && set opts -u $fisher_user_api_token - - echo -e \"fetching \x1b[4m\$url\x1b[24m\" - if command curl $opts -Ss -w \"\" \$url 2>&1 | command tar -xzf- -C \$temp 2>/dev/null - command cp -Rf \$temp/*/* $source + $fish_path --command " + if test -e $plugin + command cp -Rf $plugin/* $source else - echo fisher: invalid plugin name or host unavailable: \\\"$plugin\\\" >&2 - command rm -rf $source + set temp (command mktemp -d) + set repo (string split -- \@ $plugin) || set repo[2] HEAD + + if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1]) + set name (string split -- / \$path)[-1] + set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz + else + set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2] + end + + echo Fetching (set_color --underline)\$url(set_color normal) + + if command curl -q --silent -L \$url | command tar -xzC \$temp -f - 2>/dev/null + command cp -Rf \$temp/*/* $source + else + echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2 + command rm -rf $source + end + + command rm -rf \$temp end - command rm -rf \$temp - end - test ! -e $source && exit - command mv -f (string match --entire --regex -- \.fish\\\$ $source/*) $source/functions 2>/dev/null" & + set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files + " & - set -a pid_list (jobs --last --pid) + set --append pid_list (jobs --last --pid) end wait $pid_list 2>/dev/null for plugin in $fetch_plugins - if set -l source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source - if set -l index (contains --index -- "$plugin" $install_plugins) - set -e install_plugins[$index] + if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source + if set --local index (contains --index -- "$plugin" $install_plugins) + set --erase install_plugins[$index] else - set -e update_plugins[(contains --index -- "$plugin" $update_plugins)] + set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)] end end end for plugin in $update_plugins $remove_plugins - if set -l index (contains --index -- "$plugin" $_fisher_plugins) - set -l plugin_files_var _fisher_(string escape --style=var $plugin)_files + if set --local index (contains --index -- "$plugin" $_fisher_plugins) + set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files - if contains -- "$plugin" $remove_plugins && set --erase _fisher_plugins[$index] - for file in (string match --entire --regex -- "conf\.d/" $$plugin_files_var) - emit (string replace --all --regex -- '^.*/|\.fish$' "" $file)_uninstall + if contains -- "$plugin" $remove_plugins + for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var) + emit {$name}_uninstall end - echo -es "removing \x1b[1m$plugin\x1b[22m" \n" "$$plugin_files_var + printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ + set --erase _fisher_plugins[$index] + end + + command rm -rf (string replace -- \~ ~ $$plugin_files_var) + + functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var) + + for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var) + complete --erase --command $name end - command rm -rf $$plugin_files_var - functions --erase (string match --entire --regex -- "functions/" $$plugin_files_var \ - | string replace --all --regex -- '^.*/|\.fish$' "") set --erase $plugin_files_var end end - if set -q update_plugins[1] || set -q install_plugins[1] - command mkdir -p $fisher_path/{functions,conf.d,completions} + if set --query update_plugins[1] || set --query install_plugins[1] + command mkdir -p $fisher_path/{functions,themes,conf.d,completions} end for plugin in $update_plugins $install_plugins - set -l source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] - set -l files $source/{functions,conf.d,completions}/* - set -l plugin_files_var _fisher_(string escape --style=var $plugin)_files - set -q files[1] && set -U $plugin_files_var (string replace $source $fisher_path $files) + set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] + set --local files $source/{functions,themes,conf.d,completions}/* - for file in (string replace -- $source "" $files) - command cp -Rf $source/$file $fisher_path/$file + if set --local index (contains --index -- $plugin $install_plugins) + set --local user_files $fisher_path/{functions,themes,conf.d,completions}/* + set --local conflict_files + + for file in (string replace -- $source/ $fisher_path/ $files) + contains -- $file $user_files && set --append conflict_files $file + end + + if set --query conflict_files[1] && set --erase install_plugins[$index] + echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2 + continue + end end - contains -- $plugin $_fisher_plugins || set -Ua _fisher_plugins $plugin - contains -- $plugin $install_plugins && set -l event "install" || set -l event "update" - echo -es "installing \x1b[1m$plugin\x1b[22m" \n" "$$plugin_files_var + for file in (string replace -- $source/ "" $files) + command cp -RLf $source/$file $fisher_path/$file + end - for file in (string match --entire --regex -- "[functions/|conf\.d/].*fish\$" $$plugin_files_var) + set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files + + set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~) + + contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin + contains -- $plugin $install_plugins && set --local event install || set --local event update + + printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ + + for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~) source $file - if string match --quiet --regex -- "conf\.d/" $file - emit (string replace --all --regex -- '^.*/|\.fish$' "" $file)_$event + if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file) + emit {$name}_$event end end end command rm -rf $source_plugins - functions -q fish_prompt || source $__fish_data_dir/functions/fish_prompt.fish - set -q _fisher_plugins[1] || set -e _fisher_plugins - set -q _fisher_plugins && printf "%s\n" $_fisher_plugins >$fish_plugins || command rm -f $fish_plugins + if set --query _fisher_plugins[1] + set --local commit_plugins + + for plugin in $file_plugins + contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin + end + + for plugin in $_fisher_plugins + contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin + end + + printf "%s\n" $commit_plugins >$fish_plugins + else + set --erase _fisher_plugins + command rm -f $fish_plugins + end + + set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins) - set -l total (count $install_plugins) (count $update_plugins) (count $remove_plugins) test "$total" != "0 0 0" && echo (string join ", " ( - test $total[1] = 0 || echo "installed $total[1]") ( - test $total[2] = 0 || echo "updated $total[2]") ( - test $total[3] = 0 || echo "removed $total[3]") - ) "plugin/s" + test $total[1] = 0 || echo "Installed $total[1]") ( + test $total[2] = 0 || echo "Updated $total[2]") ( + test $total[3] = 0 || echo "Removed $total[3]") + ) plugin/s case \* - echo "fisher: unknown flag or command: \"$cmd\" (see `fisher -h`)" >&2 && return 1 + echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1 end end -## Migrations ## -if functions -q _fisher_self_update || test -e $__fish_config_dir/fishfile # 3.x - function _fisher_migrate - function _fisher_complete - fisher install jorgebucaran/fisher >/dev/null 2>/dev/null - functions --erase _fisher_complete +if ! set --query _fisher_upgraded_to_4_4 + set --universal _fisher_upgraded_to_4_4 + if functions --query _fisher_list + set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share + command rm -rf $XDG_DATA_HOME/fisher + functions --erase _fisher_{list,plugin_parse} + fisher update >/dev/null 2>/dev/null + else + for var in (set --names | string match --entire --regex '^_fisher_.+_files$') + set $var (string replace -- ~ \~ $$var) end - set -q XDG_DATA_HOME || set XDG_DATA_HOME ~/.local/share - set -q XDG_CACHE_HOME || set XDG_CACHE_HOME ~/.cache - set -q XDG_CONFIG_HOME || set XDG_CONFIG_HOME ~/.config - set -q fisher_path || set fisher_path $__fish_config_dir - test -e $__fish_config_dir/fishfile && command awk '/#|^gitlab|^ *$/ { next } $0' <$__fish_config_dir/fishfile >>$__fish_config_dir/fish_plugins - command rm -rf $__fish_config_dir/fishfile $fisher_path/{conf.d,completions}/fisher.fish {$XDG_DATA_HOME,$XDG_CACHE_HOME,$XDG_CONFIG_HOME}/fisher - functions --erase _fisher_migrate _fisher_copy_user_key_bindings _fisher_ls _fisher_fmt _fisher_self_update _fisher_self_uninstall _fisher_commit _fisher_parse _fisher_fetch _fisher_add _fisher_rm _fisher_jobs _fisher_now _fisher_help - fisher update + functions --erase _fisher_fish_postexec end - echo "upgrading to fisher $fisher_version -- learn more at" (set_color --bold --underline)"https://git.io/fisher-4"(set_color normal) - _fisher_migrate >/dev/null 2>/dev/null -else if functions -q _fisher_list # 4.0 - set -q XDG_DATA_HOME || set -l XDG_DATA_HOME ~/.local/share - test -e $XDG_DATA_HOME/fisher && command rm -rf $XDG_DATA_HOME/fisher - functions --erase _fisher_list _fisher_plugin_parse - echo -n "upgrading to fisher $fisher_version new in-memory state.." - fisher update >/dev/null 2>/dev/null - echo -ne "done\r\n" -end \ No newline at end of file +end diff --git a/.gitconfig b/.gitconfig index fcfc080..4281c5f 100644 --- a/.gitconfig +++ b/.gitconfig @@ -1,13 +1,5 @@ -[push] - default = simple [user] - email = daiko@daiko.fr + emai = daiko@daiko.fr name = Florestan Bredow -[core] - editor = nvim [pull] rebase = true -[credential] - helper = cache -[init] - defaultBranch = master diff --git a/.local/bin/self-update b/.local/bin/self-update index 1f5788e..41e8615 100755 --- a/.local/bin/self-update +++ b/.local/bin/self-update @@ -30,6 +30,8 @@ function main { # Mise à jour système sudo apt -y update && \ sudo apt -y upgrade + + fisher update # Mise à jour service languagetool update_languagetool