From bcfda473587337bc3ab569a84166c3854ed8960a Mon Sep 17 00:00:00 2001 From: D4VID Date: Fri, 15 Dec 2023 13:50:27 +0100 Subject: [PATCH] eos setup with lunarvim --- README.md | 6 + bash/.bashrc | 22 ++ eos-setup.sh | 34 +++ lvim/.config/lvim/config.lua | 25 ++ nvim/.config/nvim/init.vim | 430 +++++++++++++++++++++++++++++++++++ tmux/.tmux.conf | 46 ++++ zsh/.config/shell_aliases | 42 ++++ zsh/.zshrc | 185 +++++++++++++++ 8 files changed, 790 insertions(+) create mode 100644 README.md create mode 100644 bash/.bashrc create mode 100755 eos-setup.sh create mode 100644 lvim/.config/lvim/config.lua create mode 100644 nvim/.config/nvim/init.vim create mode 100644 tmux/.tmux.conf create mode 100644 zsh/.config/shell_aliases create mode 100644 zsh/.zshrc diff --git a/README.md b/README.md new file mode 100644 index 0000000..df081f3 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# dotfiles + +`git clone git@github.com:D4VIDB2/dotfiles.git ~/.dotfiles` + +## using 'stow' +[DONT DO THAT WITH YOUR DOTFILES (DO THIS)](https://youtu.be/tkUllCAGs3c) diff --git a/bash/.bashrc b/bash/.bashrc new file mode 100644 index 0000000..81c5bbb --- /dev/null +++ b/bash/.bashrc @@ -0,0 +1,22 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +PS1='\n\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ ' + +stty -ixon # Disable Ctrl-s and Ctrl-q +HISTSIZE=1000 + +if [ -f ~/.shell_aliases ]; then + source ~/.shell_aliases +fi + +export PATH=$PATH:$HOME/.cargo/bin +export PATH=$PATH:$HOME/.pub-cache/bin + +#source "$HOME/.cargo/env" + +tmux diff --git a/eos-setup.sh b/eos-setup.sh new file mode 100755 index 0000000..b8352ac --- /dev/null +++ b/eos-setup.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# main packages +yay -Sy vim neovim tmux zsh plasma-wayland-session plasma-systemmonitor gparted gimp htop libreoffice-fresh wireshark-qt chromium stow exa thefuck xclip --needed + +# extra packages +yay -Sy dotnet-runtime dotnet-sdk aspnet-runtime grub-customizer xournalpp rustup cargo lazygit --needed + +# autorotation on tablet +yay -Sy iio-sensor-proxy --needed + +# AUR packages +yay -Sy pazi spotify tty-clock tuxy-git members --needed + + +# oh my zsh +sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && +git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && +git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions + + +# LunarVim +yay -Sy python-pynvim +LV_BRANCH='release-1.3/neovim-0.9' bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.3/neovim-0.9/utils/installer/install.sh) + + +# dotfiles +cd ~ +git clone https://github.com:D4VIDB2/dotfiles.git .dotfiles +cd .dotfiles +rm ~/.bashrc; stow --no-filding bash +rm ~/.tmux.conf; stow --no-filding tmux +rm ~/.zshrc; stow --no-filding zsh +stow --no-filding lvim diff --git a/lvim/.config/lvim/config.lua b/lvim/.config/lvim/config.lua new file mode 100644 index 0000000..861b756 --- /dev/null +++ b/lvim/.config/lvim/config.lua @@ -0,0 +1,25 @@ +-- Read the docs: https://www.lunarvim.org/docs/configuration +-- Video Tutorials: https://www.youtube.com/watch?v=sFA9kX-Ud_c&list=PLhoH5vyxr6QqGu0i7tt_XoVK9v-KvZ3m6 +-- Forum: https://www.reddit.com/r/lunarvim/ +-- Discord: https://discord.com/invite/Xb9B4Ny + +vim.opt.shiftwidth = 4 -- the number of spaces inserted for each indentation +vim.opt.tabstop = 4 -- insert 4 spaces for a tab +vim.opt.softtabstop = 4 -- insert 4 spaces for a tab +vim.opt.relativenumber = true -- relative line numbers +vim.opt.wrap = true -- wrap lines +vim.opt.smartcase = true +vim.opt.mouse = "" + + +lvim.plugins = { + { "octol/vim-cpp-enhanced-highlight" } +} + + +-- add `svls` to `skipped_servers` list +vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "svls" }) +-- remove `svlangserver` from `skipped_servers` list +lvim.lsp.automatic_configuration.skipped_servers = vim.tbl_filter(function(server) + return server ~= "svlangserver" +end, lvim.lsp.automatic_configuration.skipped_servers) diff --git a/nvim/.config/nvim/init.vim b/nvim/.config/nvim/init.vim new file mode 100644 index 0000000..9ceba2b --- /dev/null +++ b/nvim/.config/nvim/init.vim @@ -0,0 +1,430 @@ +let mapleader=" " +set timeout timeoutlen=3000 + +set mouse= +syntax on + +set nocompatible +set noerrorbells +set number +set relativenumber +set incsearch +set ignorecase +set smartcase +set ruler +set splitright +set splitbelow +set tabstop=4 softtabstop=4 +set shiftwidth=4 +set expandtab +set smartindent +set noswapfile +set nobackup +set undodir=~/.vim/undodir +set undofile +set nohlsearch +set cursorline +set inccommand=nosplit " highlight substitude +set scrolloff=4 + + + +" PLUGINS: +call plug#begin('~/.config/nvim/autoload/plugged') + + Plug 'scrooloose/nerdcommenter' + Plug 'preservim/nerdtree' + Plug 'zhimsel/vim-stay' " Stay at my cursor + + " Colorthemes + Plug 'morhetz/gruvbox' + Plug 'navarasu/onedark.nvim' + + " Fuzzy file search + Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " fuzzy file finder + Plug 'junegunn/fzf.vim' + Plug 'chengzeyi/fzf-preview.vim' " fzf preview for more things + Plug 'airblade/vim-rooter' + + " Show git modifications to file + "Plug 'vim-scripts/vim-gitgutter' + + Plug 'duane9/nvim-rg' + + Plug 'sbdchd/vim-run' " run current file + + Plug 'octol/vim-cpp-enhanced-highlight' + Plug 'nicwest/vim-http' " Simple wrapper over curl and http syntax highlighting. + Plug 'tpope/vim-markdown' " Markdown syntax highlighting + + " LSP: + " Collection of common configurations for the Nvim LSP client + Plug 'neovim/nvim-lspconfig' + " Optional + Plug 'williamboman/nvim-lsp-installer' " Automaticlly install language server + Plug 'nvim-lua/popup.nvim' + Plug 'nvim-lua/plenary.nvim' + Plug 'nvim-treesitter/nvim-treesitter' + Plug 'nvim-telescope/telescope.nvim' + + Plug 'hrsh7th/nvim-cmp' " Autocompletion framework + Plug 'hrsh7th/cmp-nvim-lsp' " cmp LSP completion + Plug 'hrsh7th/cmp-path' " cmp Path completion + Plug 'hrsh7th/cmp-buffer' + Plug 'saadparwaiz1/cmp_luasnip' " Snippets + Plug 'L3MON4D3/LuaSnip' + + Plug 'stevearc/aerial.nvim' " Code outline window + + + " Adds extra functionality over rust analyzer + Plug 'simrat39/rust-tools.nvim' + + " Better python sytax highlighting + Plug 'numirias/semshi', { 'do': ':UpdateRemotePlugins' } + + " LaTeX support + " Plug 'vim-latex/vim-latex' + +call plug#end() + + + +" COLORSCHEME: +colorscheme gruvbox +set background=dark + + + +" PLUGIN CONFIGURATION: +" run current file plugin +let g:run_cmd_python = ['python3'] +let g:run_split = 'right' + +" HTTP +let g:vim_http_split_vertically = 1 + +" Markdown +let g:markdown_fenced_languages = ['html', 'python', 'bash=sh', 'xml', 'javascript', 'json', 'asm', 'cs', 'c', 'cpp'] +let g:markdown_minlines = 100 + +" Vim rooter +"let g:rooter_manual_only = 1 +let g:rooter_patterns = ['_darcs', '.hg', '.bzr', '.svn', '*.csproj', '*.sln', 'Makefile', 'package.json', '.git'] + +let g:python_host_prog = '/usr/bin/python2' +let g:python3_host_prog = '/usr/bin/python3' + + +" LSP: +" Set completeopt to have a better completion experience +" :help completeopt +" menuone: popup even when there's only one match +" noinsert: Do not insert text until a selection is made +" noselect: Do not select, force user to select one from the menu +set completeopt=menuone,noinsert,noselect,preview + +" Avoid showing extra messages when using completion +"set shortmess+=c + +lua <e', 'lua vim.diagnostic.open_float()', opts) +vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) +vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) +vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'vlua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + --buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + --buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + --buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', '=', 'lua vim.lsp.buf.format { async = true }', opts) + +end + +require("nvim-lsp-installer").setup { + automatic_installation = true +} + +local executors = require "rust-tools.executors" +require("rust-tools").setup { + -- dap = { + -- adapter = require('rust-tools.dap').get_codelldb_adapter( + -- codelldb_path, liblldb_path) + -- }, + -- tools = { + -- executor = executors.toggleterm, + -- runnables = { + -- use_telescope = true, + -- }, + -- autoSetHints = true, + -- inlay_hints = { show_parameter_hints = true }, + -- hover_actions = { auto_focus = true } + -- }, + server = { + -- cmd = { "~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rust-analyzer" }, + -- on_attach = function(client, bufnr) + -- require("lvim.lsp").common_on_attach(client, bufnr) + -- local rt = require "rust-tools" + -- vim.keymap.set("n", "lA", rt.code_action_group.code_action_group, { buffer = bufnr }) + -- end, + -- on_init = require("lvim.lsp").common_on_init, + settings = { + ["rust-analyzer"] = { + rustfmt = { + extraArgs = { "+nightly", }, + }, + -- diagnostics = { + -- disabled = { "unresolved-proc-macro" }, + lens = { + enable = true, + }, + checkOnSave = { + command = "clippy", + }, + }, + }, + }, +} + +-- Add additional capabilities supported by nvim-cmp +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + +-- Setup language servers +local nvim_lsp = require('lspconfig') +local servers = { 'clangd', 'rust_analyzer', 'pyright', 'omnisharp', 'html', 'cssls', 'texlab', 'gopls', 'tsserver'} +for _, server in ipairs(servers) do + local config = { + on_attach = on_attach, + capabilities = capabilities, + } + + if server == "omnisharp" then + local pid = vim.fn.getpid() + local omnisharp_bin = '~/.local/share/nvim/lsp_servers/omnisharp/omnisharp/OmniSharp' + config.cmd = { omnisharp_bin, "--languageserver" , "--hostPID", tostring(pid) } + end + + nvim_lsp[server].setup(config) +end + +-- luasnip setup +local luasnip = require 'luasnip' + +-- Setup Completion +-- See https://github.com/hrsh7th/nvim-cmp#basic-configuration +local cmp = require'cmp' +cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + -- Add tab support + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.close(), + [''] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }) + }, + + -- Installed sources + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path' }, + { name = 'buffer' }, + }, +}) + +require('aerial').setup({ + -- optionally use on_attach to set keymaps when aerial has attached to a buffer + on_attach = function(bufnr) + -- Jump forwards/backwards with '{' and '}' + vim.keymap.set('n', '[m', 'AerialPrev', {buffer = bufnr}) + vim.keymap.set('n', ']m', 'AerialNext', {buffer = bufnr}) + end +}) +-- You probably also want to set a keymap to toggle aerial +vim.keymap.set('n', 'a', 'AerialToggle!') +EOF + +" have a fixed column for the diagnostics to appear in +" this removes the jitter when warnings/errors flow in +set signcolumn=yes + + + + + +" Shebang line: +function! Hashbang(portable, permission, RemExt) + let shells = { + \ 'awk': "awk", + \ 'sh': "bash", + \ 'hs': "runhaskell", + \ 'jl': "julia", + \ 'lua': "lua", + \ 'mak': "make", + \ 'js': "node", + \ 'm': "octave", + \ 'pl': "perl", + \ 'php': "php", + \ 'py': "python3", + \ 'r': "Rscript", + \ 'rb': "ruby", + \ 'scala': "scala", + \ 'tcl': "tclsh", + \ 'tk': "wish" + \ } + + let extension = expand("%:e") + if has_key(shells,extension) + let fileshell = shells[extension] + + if a:portable + let line = "#!/usr/bin/env " . fileshell + else + let line = "#!" . system("which " . fileshell) + endif + + 0put = line + + if a:permission + :autocmd BufWritePost * :autocmd VimLeave * :!chmod u+x % + endif + if a:RemExt + :autocmd BufWritePost * :autocmd VimLeave * :!mv % "%:p:r" + endif + endif +endfunction + + + + +" Automaticly trim all trailing whitespace on save(write) +function! StripTrailingWhitespaces() + let l = line(".") + let c = col(".") + %s/\s\+$//e + call cursor(l, c) +endfun +autocmd BufWritePre * :call StripTrailingWhitespaces() + + + + + +" AUTOCMD: + +autocmd BufNewFile,BufRead *.pde set syntax=java +autocmd BufNewFile,BufRead *.pde set filetype=java +autocmd BufNewFile,BufRead *.ino set syntax=arduino +autocmd BufNewFile,BufRead *.ino set filetype=arduino + +autocmd BufNewFile *.* :call Hashbang(1,1,0) + + + +" REMAPPING: + +nnoremap rr :Run + +" disable spacebar (don't move forward) +nnoremap + +" quickly move through panes +nnoremap +nnoremap +nnoremap +nnoremap + +" resize panes +nnoremap + :vertical resize +5 +nnoremap - :vertical resize -5 +nnoremap * :resize +5 +nnoremap / :resize -5 + +nnoremap fg :GFiles +nnoremap ff :Files + +vnoremap p "_dP + + + +" MUST HAVE VIM REMAPS: + +" Number 5: Behave Vim +nnoremap Y y$ + +" Number 4: Keeping it centered +nnoremap n nzzzv +nnoremap N Nzzzv + +" Number 3: Undo break points +inoremap . .u +inoremap , ,u +inoremap ! !u +inoremap ? ?u +inoremap _ _u +inoremap - -u +inoremap u + +" Number 2: Jumplist mutations +nnoremap k (v:count > 5 ? "m'" . v:count : "") . 'k' +nnoremap j (v:count > 5 ? "m'" . v:count : "") . 'j' + +" Number 1: Moving text +vnoremap J :m '>+1gv=gv +vnoremap K :m '<-2gv=gv +nnoremap j :m .+1== +nnoremap k :m .-2== +vnoremap < >gv + diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf new file mode 100644 index 0000000..347a058 --- /dev/null +++ b/tmux/.tmux.conf @@ -0,0 +1,46 @@ +# Send prefix +set-option -g prefix C-a +unbind-key C-a +bind-key C-a send-prefix + +# Use Alt-arrow keys to switch panes +bind -n M-h select-pane -L +bind -n M-l select-pane -R +bind -n M-k select-pane -U +bind -n M-j select-pane -D + +# prefix + j/k to switch windows +bind-key j previous-window +bind-key k next-window + +# Mouse mode +setw -g mouse off + +# set vim-like keybidings in buffer mode +setw -g mode-keys vi + +# fix escape key delay in vim +set -s escape-time 0 + +set -g history-limit 20000 +set -g default-terminal screen-256color +set-option -g default-shell /usr/bin/zsh +set-option -g focus-events on + +set-option -sa terminal-overrides ',xterm-256color:RGB' + +# Set easier window split keys +bind-key h split-window -v -c "#{pane_current_path}" +bind-key v split-window -h -c "#{pane_current_path}" + +bind-key c new-window -c "#{pane_current_path}" + +# Easy config reload +bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded." + +# yank to clipboard +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' + +# Start window and pane indexes from 1 and not 0 +set -g base-index 1 +setw -g pane-base-index 1 diff --git a/zsh/.config/shell_aliases b/zsh/.config/shell_aliases new file mode 100644 index 0000000..7101ea4 --- /dev/null +++ b/zsh/.config/shell_aliases @@ -0,0 +1,42 @@ +# color +alias ls='ls --color=auto --group-directories-first' +alias grep='grep --color=auto' +alias ip='ip -color=auto' + +#alias la='ls -lahF' +alias xclip='xclip -selection clipboard' +alias xpaste='xclip -o -selection clipboard' +alias more='less' +alias ..='cd ..' +alias cp='cp -iv' +alias mv='mv -iv' +alias rm='rm -v' +alias free='free -m' + +#alias ccat="highlight --out-format=ansi" +alias p="nocorrect sudo pacman" +alias sc="sudo systemctl" +alias psg="nocorrect ps aux | grep" +#alias suod='sudo' + +# git +alias g='git' +alias gst='git status' +alias gdiff='git diff' +alias gl='git pull' +alias gp='git push' +alias gc='git commit -v' +alias gca='git commit -v -a' +alias gcm='git commit -m' +alias gcam='git commit -a -m' +alias gco='git checkout' +alias gb='git branch' +alias ga='git add' + + +alias batman="MANPAGER=\"sh -c 'col -bx | bat -l man -p'\" man" +alias la='exa -laag --group-directories-first' + +alias nvimconf='nvim ~/.config/nvim/init.vim' +alias udb='sudo updatedb' +alias wettr='curl https://wttr.in/Prague' diff --git a/zsh/.zshrc b/zsh/.zshrc new file mode 100644 index 0000000..3ab0a70 --- /dev/null +++ b/zsh/.zshrc @@ -0,0 +1,185 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. +export ZSH="/home/david/.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="intheloop" +#gentoo - jako bash +#essembeh - jako bash +#dpoggi - jako bash, ale barevnejsi +#kennethreitz - pwd na prave strane +#bira - $ na nove radce pod pwd +#rkj - old tech style +#intheloop - $ na nove radce, mezera mezi prikazy + +# 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 the following line to disable bi-weekly auto-update checks. +DISABLE_AUTO_UPDATE="true" + +# Uncomment the following line to automatically update without prompting. +# DISABLE_UPDATE_PROMPT="true" + +# Uncomment the following line to change how often to auto-update (in days). +export UPDATE_ZSH_DAYS=21 + +# 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. +# 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 zsh-autosuggestions zsh-syntax-highlighting fzf-zsh-plugin) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +#ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#666666,underline" +ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=8" + +# 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='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# 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 the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" +# + +bindkey '^ ' autosuggest-accept # accept suggestion with ctrl-space + +export EDITOR='nvim' +export TERM=screen-256color +export PATH=$PATH:/home/david/.local/bin:/home/david/.dotnet/tools + +if [ -f ~/.config/shell_aliases ]; then + source ~/.config/shell_aliases +fi + +setopt GLOBdots + +eval $(thefuck --alias) + +if command -v pazi &>/dev/null; then + eval "$(pazi init zsh)" # or 'bash' +fi +alias zf='z --pipe="fzf"' + +# Command time +function preexec() { + timer=$(($(date +%s%0N)/1000000)) +} + +function precmd() { + if [ $timer ]; then + now=$(($(date +%s%0N)/1000000)) + elapsed=$(($now-$timer)) + + ms=$(($elapsed % 1000)) + sec=$(($elapsed/1000 % 60)) + min=$(($elapsed/60000 % 60)) + hour=$(($elapsed/3600000)) + + if [ "$elapsed" -le 1000 ]; then + export RPROMPT="%F{cyan} $(printf "%d ms" $ms) %{$reset_color%}" + elif [ "$elapsed" -gt 1000 ] && [ "$elapsed" -le 60000 ]; then + export RPROMPT="%F{cyan} $(printf "%d.%03d s" $sec $ms) %{$reset_color%}" + elif [ "$elapsed" -gt 60000 ] && [ "$elapsed" -le 3600000 ]; then + export RPROMPT="%F{yellow} $(printf "%d min. %d s" $min $sec) %{$reset_color%}" + else + export RPROMPT="%F{red} $(printf "%d hours %d min. %d s" $hour $min $sec) %{$reset_color%}" + fi + + unset timer + fi +} + + +# +# # ex - archive extractor +# # usage: ex +ex () +{ + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xjvf $1 ;; + *.tar.gz) tar xzvf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar x $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xvf $1 ;; + *.tbz2) tar xjvf $1 ;; + *.tgz) tar xzvf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via ex()" ;; + esac + else + echo "'$1' is not a valid file" + fi +} +