Console
Console
No matter from which side you approach penguins, more of them always come from behind
- A friend of mine
.profile
Environment
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_AUTO_SCREEN_SCALE_FACTOR=0
Set ripgrep config path
export RIPGREP_CONFIG_PATH=$HOME/.config/ripgrep/ripgreprc
hledger path
export LEDGER_FILE=~/Documents/org-mode/ledger/ledger.journal
Checking if running inside termux
if command -v termux-setup-storage > /dev/null; then
export IS_ANDROID=true
[[ -f ~/.android_profile ]] && . ~/.android_profile
fi
Timezone
# TZ='Asia/Karachi'; export TZ
My paths
My script folders
if [ -d "$HOME/bin" ] ; then
export PATH="$HOME/bin:$PATH"
export PATH="$HOME/bin/scripts:$PATH"
fi
if [ -d "$HOME/.local/bin" ] ; then
export PATH="$HOME/.local/bin:$PATH"
fi
Guix settings
Enable extra profiles
if [ -z "$IS_ANDROID" ]; then
GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
for i in $GUIX_EXTRA_PROFILES/*; do
profile=$i/$(basename "$i")
if [ -f "$profile"/etc/profile ]; then
GUIX_PROFILE="$profile"
. "$GUIX_PROFILE"/etc/profile
fi
if [ -d "$profile"/share/man ]; then
export MANPATH="${MANPATH:-$(manpath)}:$profile/share/man"
fi
export XDG_DATA_DIRS="$XDG_DATA_DIRS:$profile/share"
unset profile
done
fi
Set Jupyter config PATH. It defaults to readonly directory somewhere in Guix profile.
export JUPYTER_CONFIG_DIR=$HOME/.config/jupyter
Set a folder for my packages.
export GUIX_PACKAGE_PATH=~/guix-packages
Locale settings
export GUIX_LOCPATH=$HOME/.guix-extra-profiles/console/console/lib/locale
Other package managers
Using other package managers with Guix requires some extra work.
Cask
if [ -d "$HOME/.cask" ]; then
export PATH="/home/pavel/.cask/bin:$PATH"
fi
Make flatpak apps visible to launchers:
if [ -d "$HOME/.local/share/flatpak" ]; then
export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share"
fi
Enable Nix
if [ -f /run/current-system/profile/etc/profile.d/nix.sh ]; then
. /run/current-system/profile/etc/profile.d/nix.sh
fi
Use Guix fontconfig. Necessary for nix apps
if [ -d "$HOME/.guix-extra-profiles/desktop-misc" ]; then
export FONTCONFIG_PATH="$HOME/.guix-extra-profiles/desktop-misc/desktop-misc/etc/fonts"
fi
Make nix apps visible to launchers:
if [ -d "$HOME/.nix-profile" ]; then
export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.nix-profile/share/applications"
fi
npm
npm is especially cumbersome, for instance because by default it tries to install packages to /gnu/store/
.
In principle, one can set a prefix like this:
prefix=/home/pavel/.npm-packages
But I also want to use node from conda occasionally, where prefix is already set correctly. So instead of tangling the above to the ~/.npmrc
directly, I set an environment variable in the profile:
export NPM_CONFIG_USERCONFIG=$HOME/._npmrc
The variable is unset in a script in Guix.org.
Set PATH & MANPATH
NPM_PACKAGES="${HOME}/.npm-packages"
export PATH="$PATH:$NPM_PACKAGES/bin"
export MANPATH="${MANPATH:-$(manpath)}:$NPM_PACKAGES/share/man"
XResources
Guix dependency |
---|
xrdb |
if [ -z "$IS_ANDROID" ]; then
xrdb ~/.Xresources
fi
OFF (OFF) Package manager paths
Turned off for now, because probably it won’t be necessary in Guix.
LaTeX
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
Cargo (Rust)
if [ -d "$HOME/.cargo" ] ; then
export PATH="$HOME/.cargo/bin:$PATH"
fi
RVM (Ruby)
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
Go
if [ -d "$HOME/go" ] ; then
export PATH="$HOME/go/bin:$PATH"
fi
ghcup (Haskell)
[ -f "/home/pavel/.ghcup/env" ] && source "/home/pavel/.ghcup/env" # ghcup-env
Perl
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
Bash
.bash_profile
[[ -f ~/.profile ]] && . ~/.profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
.bashrc
My .bashrc
, which has pieces from the default one in Guix & Manjaro, as well some mine settings.
Startup & environment
Export ‘SHELL’ to child processes. Programs such as ‘screen’ honor it and otherwise use /bin/sh.
export SHELL
We are being invoked from a non-interactive shell. If this is an SSH session (as in “ssh host command”), source /etc/profile, so we get PATH and other essential variables.
if [[ $- != *i* ]]
then
[[ -n "$SSH_CLIENT" && -f "/etc/bashrc" ]] && source /etc/profile
return
fi
If termux-setup-storage
is available, then we’re running inside termux. It is necessary to source ~/.profile
manually.
if command -v termux-setup-storage > /dev/null; then
if [[ -z "$IS_ANDROID" ]]; then
source ~/.profile
fi
fi
Source the system-wide file
if [[ -f "/etc/bashrc" ]]; then
source /etc/bashrc
fi
Guix dependency |
---|
xhost |
Allow other users to access X server. Necessary for stuff like aw-watcher-window.
xhost +local:root > /dev/null 2>&1
Set manpager to bat
export MANPAGER="sh -c 'sed -e s/.\\\\x08//g | bat -l man -p'"
Launch fish
Launch fish shell unless bash itself is launched from fish.
use_fish=true
if [[ $(ps --no-header --pid=$PPID --format=cmd) != "fish" && ${use_fish} && $(command -v fish) ]]
then
exec fish
fi
The rest of .bashrc
is not executed if fish was launched.
Colors
Setting for colors, packed in the default .bashrc
in Manjaro
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}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs} ]] \
&& type -P dircolors >/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
Settings
Some general bash settings.
References:
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)
History control
shopt -s histappend
export HISTCONTROL=ignoredups:erasedups
HISTSIZE=
HISTFILESIZE=
Autocompletions
[ -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
Aliases
alias v="vim"
alias gg="lazygit"
alias ls="exa --icons"
alias ll="exa -lah --icons"
alias q="exit"
alias c="clear"
alias ci="init_conda"
alias ca="conda activate"
alias cii="export INIT_CONDA=true && init_conda"
if [[ ! -z "$SIMPLE" ]]; then
unalias ls
alias ll="ls -lah"
fi
Anaconda
managed by ‘conda init’ !!!
Yeah, tell this to yourself
init_conda () {
__conda_setup="$('/home/pavel/.guix-extra-profiles/dev/dev/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/pavel/.guix-extra-profiles/dev/dev/etc/profile.d/conda.sh" ]; then
. "/home/pavel/.guix-extra-profiles/dev/dev/etc/profile.d/conda.sh"
else
# export PATH="/home/pavel/Programs/miniconda3/bin:$PATH"
echo "what"
fi
fi
unset __conda_setup
}
if [[ ! -z "$INIT_CONDA" ]]; then
init_conda
fi
Starship
if [[ -z "$SIMPLE" && "$TERM" != "dumb" ]]; then
eval "$(starship init bash)"
fi
Yandex Cloud
init_yc () {
# The next line updates PATH for Yandex Cloud CLI.
if [ -f '/home/pavel/yandex-cloud/path.bash.inc' ]; then source '/home/pavel/yandex-cloud/path.bash.inc'; fi
# The next line enables shell command completion for yc.
if [ -f '/home/pavel/yandex-cloud/completion.bash.inc' ]; then source '/home/pavel/yandex-cloud/completion.bash.inc'; fi
}
Fish
Guix dependency | Description |
---|---|
fish | An alternative non POSIX-compliant shell |
Fish shell is a non-POSIX-compliant shell, which offers some fancy UI & UX features.
Launch starship
if [ "$TERM" != "dumb" ]; and type -q starship
starship init fish | source
end
Enable vi keybindings & aliases. The alias syntax is the same as in bash, so it’s just a noweb reference to .bashrc
.
fish_vi_key_bindings
<<shell-aliases>>
alias cad="conda activate (basename (pwd))"
Guix dependency |
---|
dt-colorscripts |
Launch a random DT’s colorscript unless ran inside tmux or Emacs.
if ! test -n "$TMUX"; and ! test -n "$IS_EMACS"; and type -q colorscript
colorscript random
end
Suppress fish greeting
set fish_greeting
Anaconda
First, a function to initialize anaconda.
function init_conda
eval /home/pavel/.guix-extra-profiles/dev/dev/bin/conda "shell.fish" "hook" $argv | source
end
if test -n "$INIT_CONDA";
init_conda
end
Then, check if launched from Emacs with environment activated.
if test -n "$EMACS_CONDA_ENV";
conda activate $EMACS_CONDA_ENV
end
Colors
Fish seems to have hardcoded colorcodes in some color settings. I set these to base16 colors, so they would match Xresources.
set fish_color_command cyan
set fish_color_comment green
set fish_color_end white
set fish_color_error red
set fish_color_escape yellow
set fish_color_operator yellow
set fish_color_param magenta
set fish_color_quote brwhite
set fish_color_redirection yellow
Keybindings
bind -M insert \el forward-char
bind -M insert \eh backward-char
bind -M insert \ew forward-word
bind -M insert \eb backward-word
Functions
A small function to open the file with $EDITOR
.
function e
eval $EDITOR $argv
end
direnv
direnv hook fish | source
Nushell
Guix dependency |
---|
nushell-bin |
A structured shell. I don’t use it as of now, but perhaps one day.
Starship prompt
Guix dependency | Description |
---|---|
starship-bin | my prompt of choice |
Starship is a nice cross-shell prompt, written in Rust.
References:
[character]
success_symbol = "[➤ ](bold green)"
error_symbol = "[ ](bold red)"
vicmd_symbol = "[ᐊ ](bold green)"
[aws]
symbol = " "
# [battery]
# full_symbol = ""
# charging_symbol = ""
# discharging_symbol = ""
[conda]
symbol = " "
[cmd_duration]
min_time = 500
format = " [$duration]($style) "
[docker_context]
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 = " "
Tmux
Guix dependency |
---|
tmux |
python-tmuxp |
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 statements work.
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
History limit.
set -g history-limit 20000
Keybindings
Enable vi keys and mouse.
set-window-option -g mode-keys vi
set-option -g xterm-keys on
set-option -g mouse on
set -sg escape-time 10
Change prefix from C-b
to C-a
.
unbind C-b
set -g prefix C-a
bind C-a send-prefix
Vi-like keybindings to manage panes & windows.
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
Reload the config.
bind r source-file ~/.tmux.conf
Copy to clipboard
Guix dependency |
---|
xclip |
Make tmux copy to clipboard as well
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"
UI
I generated the following with tmuxline.vim plugin and palenight theme for vim-airline
# 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]"
Source the line config:
source ~/.tmux.line.conf
Alacritty
Guix dependency |
---|
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 convenient than patches.
Once again, we have an application which doesn’t support reading Xresources, so here goes noweb.
xrdb -query all | grep "$color:" | cut -f 2
(setq-local org-confirm-babel-evaluate nil)
References:
decorations: none
font:
normal:
family: JetBrainsMono Nerd Font
style: Regular
size: 10
env:
TERM: xterm-256color
colors:
primary:
background: '<<get-xrdb(color="color0")>>'
foreground: '<<get-xrdb(color="color7")>>'
normal:
black: '<<get-xrdb(color="color0")>>'
red: '<<get-xrdb(color="color1")>>'
green: '<<get-xrdb(color="color2")>>'
yellow: '<<get-xrdb(color="color3")>>'
blue: '<<get-xrdb(color="color4")>>'
magenta: '<<get-xrdb(color="color5")>>'
cyan: '<<get-xrdb(color="color6")>>'
white: '<<get-xrdb(color="color7")>>'
bright:
Black: '<<get-xrdb(color="color8")>>'
Red: '<<get-xrdb(color="color9")>>'
Green: '<<get-xrdb(color="color10")>>'
Yellow: '<<get-xrdb(color="color11")>>'
Blue: '<<get-xrdb(color="color12")>>'
Magenta: '<<get-xrdb(color="color13")>>'
Cyan: '<<get-xrdb(color="color14")>>'
White: '<<get-xrdb(color="color15")>>'
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 }
Various console applications
Guix dependency | Description |
---|---|
ncurses | Provides stuff like clear |
exa | ls replacement, written in Rust |
bat | cat clone with syntax highlighting |
htop | Interactive process viewer |
nethogs | A tool to group processed by used bandwidth |
osync | rsync wrapper |
neofetch | Fetch system info |
fzf | fuzzy finder |
p7zip | archiver |
password-store | CLI password manager |
zip | |
unzip | |
jmtpfs | A tool to mount MTP devices (e.g. Android) |
tokei | Count lines of code |
sshfs | Mount stuff over SSH |
git-lfs | |
glibc-locales | |
direnv | |
jless | JSON viewer |
megacmd | mega.nz client |
ripgrep config
Occasionally I can’t exclude certain files from ripgrep via the VCS settings, so here is a simple config to ignore certain files globally.
--ignore-file=/home/pavel/.config/ripgrep/ripgrepignore
The ignore file:
*.ts.snap
By default, ripgrep doesn’t read any configs, so it is necessary to set the RIPGREP_CONFIG_PATH
variable in the .profile.
Misc scripts
nt
- exec command with a finished notification
Usage:
nt <command>
command="$@"
if [ ! -z "$command" ]; then
start_time="$(date -u +%s)"
$command
end_time="$(date -u +%s)"
elapsed="$(($end_time-$start_time))"
notify-send "Terminal" "Command\n$command\nexecuted in $elapsed seconds"
else
notify-send "Terminal" "Command execution complete"
fi
autocommit
A script to autocommit files in a repository. I use it to sync my org directory and password store. I guess it’s not how git is intended to be used, but it works for me.
Usage:
autocommit <repository> [-F]
Environment:
Variable | Description | Default value |
---|---|---|
TIMEOUT_MIN |
Default timeout | 60 |
Here’s more or less what the script is doing:
- If there is a merge conflict, notify
- If there are changed files in the last
TIMEOUT_MIN
minutes, commit - Fetch
- If there were changes in the last
TTMEOUT_MIN
, merge (usually the merge has to be fast-forwarded) - If the fetch was successful & the merge was either successful or delayed because of changes in the last
TIMEOUT_MIN
, push - Send a notification about the events above
- Send a separate notification if there is a merge conflict
TIMEOUT_MIN=${TIMEOUT_MIN:-60}
export DISPLAY=:0
cd "$1"
TIMESTAMP=$(date +%s)
LAST_COMMIT_TIMESTAMP=$(git log -1 --format="%at" | xargs -I{} date -d @{} +%s)
RECENTLY_CHANGED_NUM=$(find . -not -path '*/\.*' -mmin -$TIMEOUT_MIN | wc -l)
CHANGED_NUM=$(git status --porcelain | wc -l)
COMMITED="No"
PUSHED="No"
FETCHED="No"
MERGED="No"
notify () {
if command -v notify-send; then
notify-send -u ${LEVEL:-normal} "$1" "$2"
else
echo "$1" "$2"
fi
}
if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
LEVEL=critical notify "Autocommit $(pwd)" "Merge conflict!"
fi
if [[ ($RECENTLY_CHANGED_NUM -eq 0 || $2 = "-F") && $CHANGED_NUM -gt 0 ]]; then
read -r -d '' MESSAGE << EOM
Autocommit $(date -Iminutes)
Hostname: $(hostname)
EOM
git add -A
git commit -m "$MESSAGE"
COMMITED="Yes"
fi
NEED_TO_PUSH=$(git log origin/master..HEAD | wc -l)
git fetch && FETCHED="Yes" || FETCHED="No"
if [[ $RECENTLY_CHANGED_NUM -gt 0 && $2 != '-F' ]]; then
MERGED="Waiting"
fi
if [[ ($RECENTLY_CHANGED_NUM -eq 0 || $2 = "-F") && $FETCHED = "Yes" ]]; then
MERGE_OUT=$(git merge origin/master) && MERGED="Yes" || MERGED="No"
fi
if [[ $NEED_TO_PUSH -gt 0 && ($MERGED = "Yes" || $MERGED = "Waiting") ]]; then
git push origin && PUSHED="Yes" || PUSHED="No"
fi
if [[ $PUSHED = "Yes" || $COMMITED = "Yes" || ($MERGED = "Yes" && $MERGE_OUT != "Already up to date.")]]; then
read -r -d '' NOTIFICATION << EOM
Commited: $COMMITED
Fetched: $FETCHED
Merged: $MERGED
Pushed: $PUSHED
EOM
notify "Autocommit $(pwd)" "$NOTIFICATION"
fi
if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
LEVEL=critical notify "Autocommit $(pwd)" "Merge conflict!"
fi
mcron
job:
(job "0 * * * *" "autocommit ~/Documents/org-mode")
(job "0,15,30,45 * * * *" "autocommit ~/.password-store")
Guix settings
(my/format-guix-dependencies)
(specifications->manifest
'(
<<packages()>>))
Android notes
SSH instructions: https://wiki.termux.com/wiki/Remote_Access
Don’t forget to install the following termux packages:
Termux package |
---|
vim |
tmux |
starship |
fish |
exa |
bat |
git |
Also:
- cleanup
$PREFIX/etc/motd
to remove hello message. - copy the required font at
$HOME/.termux/font.ttf
and runtermux-reload-settings
.
Installation of DT’s colorscripts:
git clone https://gitlab.com/dwt1/shell-color-scripts.git
cd shell-color-scripts
Apply a patch:
--- a/colorscript.sh
+++ b/colorscript.sh
@@ -2,7 +2,7 @@
# Simple CLI for shell-color-scripts
-DIR_COLORSCRIPTS="/opt/shell-color-scripts/colorscripts"
+DIR_COLORSCRIPTS="$PREFIX/opt/shell-color-scripts/colorscripts"
LS_CMD="$(command -v ls)"
fmt_help=" %-20s\t%-54s\n"
list_colorscripts="$($LS_CMD "${DIR_COLORSCRIPTS}" | cut -d ' ' -f 1 | nl)"
sudo mkdir -p $PREFIX/opt/shell-color-scripts/colorscripts || return 1
sudo cp -rf colorscripts/* $PREFIX/opt/shell-color-scripts/colorscripts
sudo cp colorscript.sh $PREFIX/bin/colorscript