+++ title = "Console" author = ["Pavel"] draft = false +++ \#+TOC headlines 6 ## `.profile` {#dot-profile} ### Environment {#environment} ```sh # export EDITOR=/usr/bin/vim # export BROWSER=/usr/bin/firefox export QT_QPA_PLATFORMTHEME="qt5ct" export QT_AUTO_SCREEN_SCALE_FACTOR=0 export TZ="Asia/Yekaterinburg" # export GTK2_RC_FILES="$HOME/.gtkrc-2.0" ``` ### My paths {#my-paths} My script folders ```sh if [ -d "$HOME/bin" ] ; then export PATH="$HOME/bin:$PATH" export PATH="$HOME/bin/scripts:$PATH" fi ``` ### Guix settings {#guix-settings} Enable extra profiles ```sh 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 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. ```sh export JUPYTER_CONFIG_DIR=$HOME/.config/jupyter ``` Set a folder for my packages. ```sh export GUIX_PACKAGE_PATH=~/guix-packages ``` ### Other package managers {#other-package-managers} Using other package managers with Guix requires some extra work. Cask ```sh if [ -d "$HOME/.cask" ]; then export PATH="/home/pavel/.cask/bin:$PATH" fi ``` Make flatpak apps visible to launchers: ```sh if [ -d "$HOME/.local/share/flatpak" ]; then export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share" fi ``` Enable Nix ```sh 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 ```sh if [ -d "$HOME/.guix-extra-profiles/desktop" ]; then export FONTCONFIG_PATH="$HOME/.guix-extra-profiles/desktop/desktop/etc/fonts" fi ``` Make nix apps visible to launchers: ```sh if [ -d "$HOME/.nix-profile" ]; then export XDG_DATA_DIRS="$XDG_DATA_DIRS:$HOME/.nix-profile/share/applications" fi ``` #### npm {#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: ```conf 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: ```sh export NPM_CONFIG_USERCONFIG=$HOME/._npmrc ``` The variable is unset in a script in [Guix.org]({{< relref "Guix" >}}). Set PATH & MANPATH ```sh NPM_PACKAGES="${HOME}/.npm-packages" export PATH="$PATH:$NPM_PACKAGES/bin" export MANPATH="${MANPATH-$(manpath)}:$NPM_PACKAGES/share/man" ``` ### XResources {#xresources} | Guix dependency | |-----------------| | xrdb | ```sh if [ -z "$IS_ANDROID" ]; then xrdb ~/.Xresources fi ``` ### OFF (OFF) Package manager paths {#off--package-manager-paths} Turned off for now, because probably it won't be necessary in Guix. LaTeX ```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 ``` Cargo (Rust) ```sh if [ -d "$HOME/.cargo" ] ; then export PATH="$HOME/.cargo/bin:$PATH" fi ``` RVM (Ruby) ```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 ``` Go ```sh if [ -d "$HOME/go" ] ; then export PATH="$HOME/go/bin:$PATH" fi ``` ghcup (Haskell) ```sh [ -f "/home/pavel/.ghcup/env" ] && source "/home/pavel/.ghcup/env" # ghcup-env ``` Perl ```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 ``` ## Bash {#bash} ### `.bash_profile` {#dot-bash-profile} ```bash [[ -f ~/.profile ]] && . ~/.profile [[ -f ~/.bashrc ]] && . ~/.bashrc ``` ### `.bashrc` {#dot-bashrc} My `.bashrc`, which has pieces from the default ones in Guix & Manjaro, as well some mine settings. #### Startup & environment {#startup-and-environment} Export 'SHELL' to child processes. Programs such as 'screen' honor it and otherwise use /bin/sh. ```bash 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. ```bash if [[ $- != *i* ]] then [[ -n "$SSH_CLIENT" && -f "/etc/bashrc" ]] && source /etc/profile return fi ``` Source the system-wide file ```bash 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. ```bash xhost +local:root > /dev/null 2>&1 ``` Set manpager to bat ```bash export MANPAGER="sh -c 'sed -e s/.\\\\x08//g | bat -l man -p'" ``` #### Launch fish {#launch-fish} Launch fish shell unless bash itself is launched from fish. ```bash 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 {#colors} Setting for colors, packed in the default `.bashrc` in Manjaro ```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 ``` #### Settings {#settings} Some general bash settings. References: - [shopt list](https://www.gnu.org/software/bash/manual/html%5Fnode/The-Shopt-Builtin.html) ```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) ``` History control ```bash shopt -s histappend export HISTCONTROL=ignoredups:erasedups HISTSIZE= HISTFILESIZE= ``` Autocompletions ```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 ``` #### Aliases {#aliases} ```bash 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" ``` ```bash if [[ ! -z "$SIMPLE" ]]; then unalias ls alias ll="ls -lah" fi ``` #### Anaconda {#anaconda} > managed by 'conda init' !!! Yeah, tell this to yourself ```bash 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 prompt {#starship-prompt} ```bash if [[ -z "$SIMPLE" ]]; then eval "$(starship init bash)" fi ``` ## Fish {#fish} | Guix dependency | Description | |-----------------|------------------------------------------| | fish | An alternative non POSIX-compliant shell | [Fish shell](https://fishshell.com/) is a non-POSIX-compliant shell, which offers some fancy UI & UX features. Launch starship ```fish starship init fish | source ``` Enable vi keybindings & aliases. The alias syntax is the same as in bash, so it's just a noweb reference to `.bashrc`. ```fish fish_vi_key_bindings <> ``` | Guix dependency | |-----------------| | dt-colorscripts | Launch a random [DT's colorscript](https://gitlab.com/dwt1/shell-color-scripts) unless ran inside tmux or Emacs. ```fish if ! test -n "$TMUX"; and ! test -n "$IS_EMACS"; colorscript random end ``` Suppress fish greeting ```fish set fish_greeting ``` ### Anaconda {#anaconda} First, a function to initialize anaconda. ```fish 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. ```fish if test -n "$EMACS_CONDA_ENV"; conda activate $EMACS_CONDA_ENV end ``` ### Colors {#colors} Fish seems to have hardcoded colorcodes in some color settings. I set these to base16 colors so they would match Xresources. ```fish 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 {#keybindings} ```fish bind -M insert \el forward-char bind -M insert \eh backward-char bind -M insert \ew forward-word bind -M insert \eb backward-word ``` ## Nushell {#nushell} | Guix dependency | |-----------------| | nushell-bin | A structured shell. I don't use it as of now, but perhaps one day. Set starship prompt ```toml startup = [ <>, "mkdir ~/.cache/starship", "starship init nu | save ~/.cache/starship/init.nu", "source ~/.cache/starship/init.nu", ] prompt = "starship_prompt" ``` Skip welcome message ```toml skip_welcome_message = true ``` Set table mode ```toml table_mode = "rounded" ``` Aliases ```toml "alias ll = ls -l", "alias c = clear", "alias q = exit" ``` Colors ```toml [color_config] primitive_filesize="ub" primitive_boolean="yu" primitive_duration="g" primitive_path="y" primitive_date="r" primitive_int="c" primitive_decimal="c" ``` ## Starship prompt {#starship-prompt} | Guix dependency | Description | |-----------------|---------------------| | rust-starship | my prompt of choice | [Starship](https://starship.rs/) is a nice cross-shell prompt, written in Rust. References: - [Startship config guide](https://starship.rs/config/) ```toml [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 {#tmux} | Guix dependency | |-----------------| | tmux | | python-tmuxp | [tmux](https://github.com/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 {#term-settings} I have no idea how and why these two work. ```vim set -g default-terminal "screen-256color" set -ga terminal-overrides ",*256col*:Tc" ``` History limit. ```vim set -g history-limit 20000 ``` ### Keybindings {#keybindings} Enable vi keys and mouse. ```vim 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`. ```vim unbind C-b set -g prefix C-a bind C-a send-prefix ``` Vi-like keybindings to manage panes & windows. ```vim 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. ```vim bind r source-file ~/.tmux.conf ``` ### Copy to clipboard {#copy-to-clipboard} | Guix dependency | |-----------------| | xclip | Make tmux copying copy to clipboard as well ```vim 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 {#ui} I generated the following with [tmuxline.vim](https://github.com/edkolev/tmuxline.vim) plugin and palenight theme for [vim-airline](https://github.com/vim-airline/vim-airline) ```vim # 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: ```vim source ~/.tmux.line.conf ``` ## Alacritty {#alacritty} | Guix dependency | |-----------------| | alacritty | [Alacritty](https://github.com/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. ```bash xrdb -query all | grep "$color:" | cut -f 2 ``` ```emacs-lisp (setq-local org-confirm-babel-evaluate nil) ``` References: - [default config](https://github.com/alacritty/alacritty/blob/master/alacritty.yml) ```yaml 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 } ``` ## Various console applications {#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 | | unzip | | | jmtpfs | A tool to mount MTP devices (e.g. Android) | | tokei | Count lines of code | ## Misc scripts {#misc-scripts} ### `nt` - exec command with a finished notification {#nt-exec-command-with-a-finished-notification} Usage: ```text nt ``` ```sh 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 ``` ### `autocommmit` {#autocommmit} 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: ```text autocommit [-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 are were changes in the last `TTMEOUT_MIN`, merge (usually the merge has to be fast-forward) - If fetch was successful & merge was 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 ```bash 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" if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then notify-send -u critical "Autocommit $(pwd)" "Merge conflict!" exit 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-send "Autocommit $(pwd)" "$NOTIFICATION" fi if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then notify-send -u critical "Autocommit $(pwd)" "Merge conflict!" fi ``` `mcron` job: ```scheme (job "0 * * * *" "autocommit ~/Documents/org-mode") (job "0,15,30,45 * * * *" "autocommit ~/.password-store") ``` ## Guix settings {#guix-settings} ```emacs-lisp (my/format-guix-dependencies) ``` ```scheme (specifications->manifest '( <>)) ``` ## Android notes {#android-notes} SSH instructions: 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 run `termux-reload-settings`. ### Installation of [DT's colorscripts](https://gitlab.com/dwt1/shell-color-scripts): {#installation-of-dt-s-colorscripts} ```bash git clone https://gitlab.com/dwt1/shell-color-scripts.git cd shell-color-scripts ``` Apply a patch: ```diff --- 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)" ``` ```bash 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 ```