#+TITLE: Console #+TODO: TODO(t) CHECK(s) | OFF(o) #+PROPERTY: header-args :mkdirp yes #+PROPERTY: header-args:conf-space :comments link #+PROPERTY: header-args:conf-toml :comments link #+PROPERTY: header-args:sh :tangle-mode (identity #o755) :comments link :shebang "#!/bin/sh" #+PROPERTY: header-args:bash :tangle-mode (identity #o755) :comments link :shebang "#!/bin/bash" * Contents :PROPERTIES: :TOC: :include all :depth 3 :END: :CONTENTS: - [[#contents][Contents]] - [[#profile][.profile]] - [[#environment][Environment]] - [[#various-paths][Various paths]] - [[#bash][Bash]] - [[#bash_profile][.bash_profile]] - [[#bashrc][.bashrc]] - [[#startup--environment][Startup & environment]] - [[#launch-fish][Launch fish]] - [[#colors][Colors]] - [[#settings][Settings]] - [[#aliases][Aliases]] - [[#anaconda][Anaconda]] - [[#starship-prompt][Starship prompt]] - [[#fish][Fish]] - [[#starship-prompt][Starship prompt]] - [[#tmux][Tmux]] - [[#term-settings][Term settings]] - [[#keybindings][Keybindings]] - [[#copy-to-clipboard][Copy to clipboard]] - [[#ui][UI]] - [[#alacritty][Alacritty]] :END: * =.profile= :PROPERTIES: :header-args+: :tangle ./.profile :header-args:sh: :shebang "" :comments link :END: ** Environment #+begin_src sh export EDITOR=/usr/bin/vim export BROWSER=/usr/bin/firefox export QT_QPA_PLATFORMTHEME="qt5ct" export QT_AUTO_SCREEN_SCALE_FACTOR=0 export GTK2_RC_FILES="$HOME/.gtkrc-2.0" #+end_src ** Various paths My script folders #+begin_src sh if [ -d "$HOME/bin" ] ; then export PATH="$HOME/bin:$PATH" export PATH="$HOME/bin/scripts:$PATH" fi #+end_src LaTeX #+begin_src sh if [ -d "/usr/local/texlive/2020" ]; then export MANPATH="/usr/local/texlive/2020/texmf-dist/doc/man:$MANPATH" export INFOPATH="/usr/local/texlive/2020/texmf-dist/doc/info:$INFOPATH" export PATH="/usr/local/texlive/2020/bin/x86_64-linux:$PATH" fi #+end_src Cargo (Rust) #+begin_src sh if [ -d "$HOME/.cargo" ] ; then export PATH="$HOME/.cargo/bin:$PATH" fi #+end_src RVM (Ruby) #+begin_src sh if [ -d "$HOME/.rvm" ] ; then export PATH="$PATH:$HOME/.rvm/bin" fi # if [ -d "$HOME/.gem" ]; then # export PATH="$HOME/.gem/ruby/2.7.0/bin:$PATH" # fi #+end_src Go #+begin_src sh if [ -d "$HOME/go" ] ; then export PATH="$HOME/go/bin:$PATH" fi #+end_src ghcup (Haskell) #+begin_src sh [ -f "/home/pavel/.ghcup/env" ] && source "/home/pavel/.ghcup/env" # ghcup-env #+end_src Perl #+begin_src sh if [ -d "$HOME/perl5" ] ; then PATH="/home/pavel/perl5/bin${PATH:+:${PATH}}" PERL5LIB="/home/pavel/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB; PERL_LOCAL_LIB_ROOT="/home/pavel/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT; PERL_MB_OPT="--install_base \"/home/pavel/perl5\""; export PERL_MB_OPT; PERL_MM_OPT="INSTALL_BASE=/home/pavel/perl5"; export PERL_MM_OPT; fi #+end_src * Bash :PROPERTIES: :header-args:bash: :shebang "" :comments link :END: ** =.bash_profile= #+begin_src bash :tangle ./.bash_profile [[ -f ~/.profile ]] && . ~/.profile [[ -f ~/.bashrc ]] && . ~/.bashrc #+end_src ** =.bashrc= :PROPERTIES: :header-args+: :tangle ./.bashrc :END: *** Startup & environment Return if not run interactively & stuff #+begin_src bash [[ $- != *i* ]] && return xhost +local:root > /dev/null 2>&1 use_fish=true #+end_src Set manpager to bat #+begin_src bash export MANPAGER="sh -c 'sed -e s/.\\\\x08//g | bat -l man -p'" #+end_src *** Launch fish Launch fish shell unless bash itself is launched from fish. #+begin_src bash if [[ $(ps --no-header --pid=$PPID --format=cmd) != "fish" && ${use_fish} ]] then exec fish fi #+end_src The rest of =.bashrc= is not executed if fish was launched. *** Colors Setting for colors, packed in the default =.bashrc= in Manjaro #+begin_src bash use_color=true # Set colorful PS1 only on colorful terminals. # dircolors --print-database uses its own built-in database # instead of using /etc/DIR_COLORS. Try to use the external file # first to take advantage of user additions. Use internal bash # globbing instead of external grep binary. safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM match_lhs="" [[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)" [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(/dev/null \ && match_lhs=$(dircolors --print-database) [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true if ${use_color} ; then # Enable colors for ls, etc. Prefer ~/.dir_colors #64489 if type -P dircolors >/dev/null ; then if [[ -f ~/.dir_colors ]] ; then eval $(dircolors -b ~/.dir_colors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi fi if [[ ${EUID} == 0 ]] ; then PS1='\[\033[01;31m\][\h\[\033[01;36m\] \W\[\033[01;31m\]]\$\[\033[00m\] ' else PS1='\[\033[01;32m\][\u@\h\[\033[01;37m\] \W\[\033[01;32m\]]\$\[\033[00m\] ' fi alias ls='ls --color=auto' alias grep='grep --colour=auto' alias egrep='egrep --colour=auto' alias fgrep='fgrep --colour=auto' else if [[ ${EUID} == 0 ]] ; then # show root@ when we don't have colors PS1='\u@\h \W \$ ' else PS1='\u@\h \w \$ ' fi fi unset use_color safe_term match_lhs sh #+end_src *** Settings Some general bash settings. References: - [[https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html][shopt list]] #+begin_src bash complete -cf sudo # Sudo autocompletion shopt -s checkwinsize # Check windows size after each command shopt -s expand_aliases # Aliases shopt -s autocd # Cd to directory just by typing its name (without cd) #+end_src History control #+begin_src bash shopt -s histappend export HISTCONTROL=ignoredups:erasedups HISTSIZE= HISTFILESIZE= #+end_src Autocompletions #+begin_src bash [ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion if [ -d "/usr/share/fzf" ]; then source /usr/share/fzf/completion.bash source /usr/share/fzf/key-bindings.bash fi #+end_src *** Aliases #+begin_src bash :noweb-ref shell-aliases alias v="vim" alias gg="lazygit" alias ls="exa --icons" alias ll="exa -lah --icons" alias q="exit" alias c="clear" #+end_src *** Anaconda #+begin_quote managed by 'conda init' !!! #+end_quote Yeah, tell this to yourself #+begin_src bash # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/home/pavel/Programs/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/home/pavel/Programs/miniconda3/etc/profile.d/conda.sh" ]; then . "/home/pavel/Programs/miniconda3/etc/profile.d/conda.sh" else export PATH="/home/pavel/Programs/miniconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<< #+end_src *** Starship prompt #+begin_src bash eval "$(starship init bash)" #+end_src * Fish :PROPERTIES: :header-args+: :tangle ./.config/fish/config.fish :comments link :END: [[https://fishshell.com/][Fish shell]] is a non-POSIX-compliant shell, which offers some fancy UI & UX features. Launch starship #+begin_src fish starship init fish | source #+end_src Enable vi keybindings & aliases. The alias syntax is the same as in bash, so it's just a noweb reference to =.bashrc=. #+begin_src fish :noweb yes fish_vi_key_bindings <> #+end_src Anaconda #+begin_src fish # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! eval /home/pavel/Programs/miniconda3/bin/conda "shell.fish" "hook" $argv | source # <<< conda initialize <<< #+end_src Launch a random [[https://gitlab.com/dwt1/shell-color-scripts][DT's colorscript]] unless ran inside tmux or Emacs. #+begin_src fish if ! test -n "$TMUX"; and ! test -n "$IS_EMACS"; colorscript random end #+end_src * Starship prompt [[https://starship.rs/][Starship]] is a nice cross-shell prompt, written in Rust. References: - [[https://starship.rs/config/][Startship config guide]] #+begin_src conf-toml :tangle ./.config/starship.toml [character] success_symbol = "➤ " vicmd_symbol = "ᐊ " error_symbol = " " use_symbol_for_status = true [aws] symbol = " " [battery] full_symbol = "" charging_symbol = "" discharging_symbol = "" [conda] symbol = " " [cmd_duration] min_time = 500 format = " [$duration]($style) " [docker] symbol = " " [elixir] symbol = " " [elm] symbol = " " [git_branch] symbol = " " truncation_length = 20 [golang] symbol = " " [haskell] symbol = " " [hg_branch] symbol = " " [java] symbol = " " [julia] symbol = " " [memory_usage] symbol = " " [nim] symbol = " " [nix_shell] symbol = " " [nodejs] symbol = " " [package] symbol = " " disabled = true [php] symbol = " " [python] symbol = " " [ruby] symbol = " " [rust] symbol = " " #+end_src * Tmux :PROPERTIES: :header-args+: :tangle ./.tmux.conf :END: [[https://github.com/tmux/tmux][tmux]] is my terminal multiplexer of choice. It provides pretty sane defaults, so the config is not too large. I rebind the prefix to =C-a= though. ** Term settings I have no idea how and why these two work. #+begin_src conf-space set -g default-terminal "screen-256color" set -ga terminal-overrides ",*256col*:Tc" #+end_src History limit. #+begin_src conf-space set -g history-limit 20000 #+end_src ** Keybindings Enable vi keys and mouse. #+begin_src conf-space set-window-option -g mode-keys vi set-option -g xterm-keys on set-option -g mouse on set -sg escape-time 10 #+end_src Change prefix from =C-b= to =C-a=. #+begin_src conf-space unbind C-b set -g prefix C-a bind C-a send-prefix #+end_src Vi-like keybindings to manage panes & windows. #+begin_src conf-space bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R bind s split-window bind v split-window -h bind-key n new-window bind-key t next-window bind-key T previous-window #+end_src Reload the config. #+begin_src conf-space bind r source-file ~/.tmux.conf #+end_src ** Copy to clipboard Make tmux copying copy to clipboard as well #+begin_src conf-space bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i" bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i" #+end_src ** UI I generated the following with [[https://github.com/edkolev/tmuxline.vim][tmuxline.vim]] plugin and palenight theme for [[https://github.com/vim-airline/vim-airline][vim-airline]] #+begin_src conf-space :tangle ./.tmux.line.conf # This tmux statusbar config was created by tmuxline.vim # on Wed, 22 Jan 2020 set -g status-justify "centre" set -g status "on" set -g status-left-style "none" set -g message-command-style "fg=#bfc7d5,bg=#474b59" set -g status-right-style "none" set -g pane-active-border-style "fg=#939ede" set -g status-style "none,bg=#333747" set -g message-style "fg=#bfc7d5,bg=#474b59" set -g pane-border-style "fg=#474b59" set -g status-right-length "100" set -g status-left-length "100" setw -g window-status-activity-style "none,fg=#939ede,bg=#333747" setw -g window-status-separator "" setw -g window-status-style "none,fg=#bfc7d5,bg=#333747" set -g status-left "#[fg=#292D3E,bg=#939ede] #S #[fg=#939ede,bg=#474b59,nobold,nounderscore,noitalics]#[fg=#bfc7d5,bg=#474b59] #W #[fg=#474b59,bg=#333747,nobold,nounderscore,noitalics]" set -g status-right "#[fg=#333747,bg=#333747,nobold,nounderscore,noitalics]#[fg=#bfc7d5,bg=#333747] %-H:%M #[fg=#474b59,bg=#333747,nobold,nounderscore,noitalics]#[fg=#bfc7d5,bg=#474b59] %a, %b %d #[fg=#939ede,bg=#474b59,nobold,nounderscore,noitalics]#[fg=#292D3E,bg=#939ede] #H " setw -g window-status-format "#[fg=#333747,bg=#333747,nobold,nounderscore,noitalics]#[default] #I #W #[align=left] #[fg=#333747,bg=#333747,nobold,nounderscore,noitalics]" setw -g window-status-current-format "#[fg=#333747,bg=#474b59,nobold,nounderscore,noitalics]#[fg=#bfc7d5,bg=#474b59] #I #W #[fg=#474b59,bg=#333747,nobold,nounderscore,noitalics]" #+end_src Source the line config: #+begin_src conf-space source ~/.tmux.line.conf #+end_src * Alacritty :PROPERTIES: :header-args+: :tangle ./.config/alacritty/alacritty.yml :comments link :END: [[https://github.com/alacritty/alacritty][Alacritty]] is a GPU-accelerated terminal emulator. I haven't found it to be an inch faster than st, but configuration the in yml format is way more convinient than patches. Once again, we have an application which doesn't support reading Xresources, so here goes noweb. #+name: get-xrdb #+begin_src bash :var color="color0" :tangle no xrdb -query all | grep "$color:" | cut -f 2 #+end_src #+begin_src emacs-lisp :tangle no (setq-local org-confirm-babel-evaluate nil) #+end_src References: - [[https://github.com/alacritty/alacritty/blob/master/alacritty.yml][default config]] #+begin_src yaml :noweb yes decorations: none font: normal: family: JetBrainsMono Nerd Font style: Regular size: 10 env: TERM: xterm-256color colors: primary: background: '<>' foreground: '<>' normal: black: '<>' red: '<>' green: '<>' yellow: '<>' blue: '<>' magenta: '<>' cyan: '<>' white: '<>' bright: Black: '<>' Red: '<>' Green: '<>' Yellow: '<>' Blue: '<>' Magenta: '<>' Cyan: '<>' White: '<>' background_opacity: 0.80 window: padding: x: 0 y: 0 dynamic_padding: true key_bindings: - { key: Paste, action: Paste } - { key: Copy, action: Copy } - { key: L, mods: Control, action: ClearLogNotice } - { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } - { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } - { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } - { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } - { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } # Turn off vi mode - { key: Space, mods: Shift|Control, mode: ~Search, action: ReceiveChar } # (Windows, Linux, and BSD only) - { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } - { key: C, mods: Control|Shift, action: Copy } - { key: F, mods: Control|Shift, mode: ~Search, action: ReceiveChar } - { key: B, mods: Control|Shift, mode: ~Search, action: ReceiveChar } - { key: Insert, mods: Shift, action: PasteSelection } - { key: Key0, mods: Control, action: ResetFontSize } - { key: Equals, mods: Control, action: IncreaseFontSize } - { key: Plus, mods: Control, action: IncreaseFontSize } - { key: NumpadAdd, mods: Control, action: IncreaseFontSize } - { key: Minus, mods: Control, action: DecreaseFontSize } - { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } #+end_src