2020-05-17 13:04:07 +00:00
#+TITLE : Fish config
2020-07-16 12:25:18 +00:00
#+setupfile : headers
2020-01-15 11:38:29 +00:00
#+OPTIONS : auto-id:t
2019-10-23 11:02:59 +00:00
#+HTML_HEAD_EXTRA : <meta name="description" content="Phundrak's fish config" />
#+HTML_HEAD_EXTRA : <meta property="og:title" content="Phundrak's fish config" />
#+HTML_HEAD_EXTRA : <meta property="og:description" content="Description of the fish config file of Phundrak" />
2020-09-28 16:09:45 +00:00
#+PROPERTY : header-args:fish :mkdirp :tangle ~/.config/fish/config.fish :exports code :noweb yes
2020-01-30 11:33:19 +00:00
#+PROPERTY : header-args :exports code :tangle no
2019-10-23 11:02:59 +00:00
* Presentation
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Presentation-340195eb
:END:
2021-02-04 13:43:09 +00:00
The file present in =~/.config/fish/config.fish= is the configuration file for
the [[https://fishshell.com/ ][fish shell ]]. It contains custom functions, environment variables and
abbreviations.
2020-11-13 14:18:43 +00:00
2021-02-04 13:43:09 +00:00
Just in case, we might need sometimes to declare the fish function =fish_title=
as =true= , so let’ s do so.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
function fish_title
true
end
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-10-23 13:25:35 +00:00
* Fish from within Emacs
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Fish_from_within_Emacs-360c0a74
:END:
2021-02-04 13:43:09 +00:00
I sometimes call fish from within emacs, with =M-x ansi-term= . In this case, the
variable =TERM= needs to have the value =eterm-color= .
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
if test -n "$EMACS"
set -x TERM eterm-color
end
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
2022-06-07 17:20:14 +00:00
* Global variables
:PROPERTIES:
:CUSTOM_ID: Global_variables-1c84df8b
:END:
In order to keep some other code clean, I set the ~$BROWSER~ variable so I don’ t
have to call my web browser directly but rather with this variable.
#+BEGIN_SRC fish
set -gx BROWSER firefox
#+END_SRC
Sometimes, software will rely on =SUDO_ASKPASS= to get a GUI from which it can
get the sudo password. So, let’ s declare it.
#+BEGIN_SRC fish
set -gx SUDO_ASKPASS ~/.local/bin/askpass
#+END_SRC
In general, I prefer using ~bat~ to ~less~ , although the former relies on the
latter, but ~bat~ provides nice wrapping around ~less~ , including syntax
highlighting. Let’ s set the manpager to bat then:
#+BEGIN_SRC fish
set -x MANPAGER "sh -c 'col -bx | bat -l man -p'"
#+END_SRC
~XMODIFIERS~ is set to nothing as to not impede Emacs’ inputs.
#+begin_src fish
set -x XMODIFIERS
#+end_src
Let’ s start the Gnome keyring daemon. It will return a variable which must be set.
#+begin_src fish
if test -n "$DESKTOP_SESSION"
set -x (gnome-keyring-daemon --start | string split "=")
end
#+end_src
** XDG user directories
:PROPERTIES:
:CUSTOM_ID: Global-variables-XDG-user-directories-ata8fwf0bhj0
:END:
There’ s a couple of XDG user directories that are not set, let’ s fix
that.
#+begin_src fish
set -x XDG_CACHE_HOME $HOME/.cache
set -x XDG_CONFIG_HOME $HOME/.config
set -x XDG_DATA_HOME $HOME/.local/share
set -x XDG_STATE_HOME $HOME/.local/state
#+end_src
Now, let's clean the ~$HOME~ directory. Be aware it will require quite a
few lines.
#+begin_src fish
set -x HISTFILE "$XDG_STATE_HOME"/bash/history
set -x _Z_DATA "$XDG_DATA_HOME"/z
set -x XAUTHORITY "$XDG_RUNTIME_DIR"/Xauthority
set -x WINEPREFIX "$XDG_DATA_HOME"/wine
set -x TEXMFVAR "$XDG_CACHE_HOME"/texlive/texmf-var
set -x RUSTUP_HOME "$XDG_DATA_HOME"/rustup
set -x BUNDLE_USER_CONFIG "$XDG_CONFIG_HOME"/bundle
set -x BUNDLE_USER_CACHE "$XDG_CACHE_HOME"/bundle
set -x BUNDLE_USER_PLUGIN "$XDG_DATA_HOME"/bundle
set -x PYLINTHOME "$XDG_CACHE_HOME"/pylint
set -x PYENV_ROOT "$XDG_DATA_HOME"/pyenv
set -x PASSWORD_STORE_DIR "$XDG_DATA_HOME"/pass
set -x PARALLEL_HOME "$XDG_CONFIG_HOME"/parallel
set -x _JAVA_OPTIONS -Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
set -x NVM_DIR "$XDG_DATA_HOME"/nvm
set -x CUDA_CACHE_PATH "$XDG_CACHE_HOME"/nv
set -x __GL_SHADER_DISK_CACHE_PATH "$XDG_CACHE_HOME"/nv
set -x NUGET_PACKAGES "$XDG_CACHE_HOME"/NuGetPackages
set -x NPM_CONFIG_USERCONFIG "$XDG_CONFIG_HOME"/npm/npmrc
set -x TERMINFO "$XDG_DATA_HOME"/terminfo
set -x TERMINFO_DIRS "$XDG_DATA_HOME"/terminfo:/usr/share/terminfo
set -x MPLAYER_HOME "$XDG_CONFIG_HOME"/mplayer
set -x ICEAUTHORITY "$XDG_CACHE_HOME"/ICEauthority
set -x LESSHISTFILE "$XDG_CACHE_HOME"/less/history
set -x GTK2_RC_FILES "$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
set -x GOPATH "$XDG_DATA_HOME"/go
set -x GNUPGHOME "$XDG_DATA_HOME"/gnupg
set -x GEM_HOME "$XDG_DATA_HOME"/gem
set -x GEM_SPEC_CACHE "$XDG_CACHE_HOME"/gem
set -x DOCKER_CONFIG "$XDG_CONFIG_HOME"/docker
set -x CARGO_HOME "$XDG_DATA_HOME"/cargo
#+end_src
** Development
:PROPERTIES:
:CUSTOM_ID: Global_variables-Development-76b3ff13
:END:
Now, let’ s declare our editor of choice, EmacsClient; not Emacs itself since it
will most often be just quick edits, nothing too heavy, if it is called from the
~EDITOR~ variable (from Git, for example), or from the ~VISUAL~ variable.
#+BEGIN_SRC fish
set -gx EDITOR emacsclient -c
set -gx VISUAL emacsclient -c
#+END_SRC
We also need to set the path to the Dart SDK.
#+BEGIN_SRC fish
set -gx DART_SDK /opt/dart-sdk/bin
#+END_SRC
And we also need to specify where the Android SDK it located.
#+BEGIN_SRC fish
set -gx ANDROID_HOME $HOME/Android/Sdk
#+END_SRC
Still related to Dart and Flutter development,
#+BEGIN_SRC fish
set -gx CHROME_EXECUTABLE /usr/bin/chromium
#+END_SRC
Next, we have two variables from Deno, the Node.js destroyer. Its base directory
will be set in my XDG config directory, and its binaries will be located in my
local binaries directory (see below).
#+BEGIN_SRC fish
set -gx DENO_DIR $HOME/.config/deno
set -gx DENO_INSTALL_ROOT $HOME/.local/bin/deno
#+END_SRC
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
let’ s do so.
#+BEGIN_SRC fish
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
#+END_SRC
** ~$PATH~
:PROPERTIES:
:CUSTOM_ID: Global_variables-$PATH-e1320303
:END:
A variable available with the fish shell is ~fish_user_paths~ which lists custom
paths to binaries specified by the user. Using this variable ensures they are
included in the ~$PATH~ variable only once without the need to set it directly.
For instance, my ~PATH~ variable needs Rust’ s Cargo’ s binaries, Go’ s binaries,
my own executables, and some more.
#+NAME : extra-paths
2022-07-03 10:24:10 +00:00
| additional path | what it leads to |
|--------------------------+---------------------------------------------------|
| node_modules/.bin | The current directory’ s NPM binaries if it exists |
| $HOME/.local/bin | Custom executables, see [[file:bin.org]] |
| $GOPATH/bin | Go binaries and executables |
| $CARGO_HOME/bin | Rust binaries and executables |
| $GEM_HOME/ruby/3.0.0/bin | Ruby 3.0 binaries and executables |
| $GEM_HOME/ruby/2.6.0/bin | Ruby 2.6 binaries and executables |
| $HOME/.cabal/bin | Haskel binaries |
| /usr/lib/xfce-polkit | Path to XFCE’ s PolKit |
2022-06-07 17:20:14 +00:00
#+NAME : generate-extra-paths
#+BEGIN_SRC emacs-lisp :var paths=extra-paths[,0] :exports none :cache yes
(mapconcat #'identity
paths " \\\n")
#+END_SRC
2022-07-03 10:24:10 +00:00
#+RESULTS[5dedcba52b12f9026e90c3b1b91a65d60c139ede]: generate-extra-paths
: node_modules/.bin \
2022-06-07 17:20:14 +00:00
: $HOME/.local/bin \
: $GOPATH/bin \
: $CARGO_HOME/bin \
: $GEM_HOME/ruby/3.0.0/bin \
: $GEM_HOME/ruby/2.6.0/bin \
: $HOME/.cabal/bin \
: /usr/lib/xfce-polkit
So, let’ s set our user paths:
#+BEGIN_SRC fish :noweb yes
set -g fish_user_paths \
<<generate-extra-paths() >>
#+END_SRC
2019-10-23 13:25:35 +00:00
* Tramp remote access
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Tramp_remote_access-72aedec2
:END:
2021-02-04 13:43:09 +00:00
When accessing from a remote machine our computer from Emacs, tramp needs a
precise shell appearance: a simple =$= followed by a space after which to put
the commands it needs to execute, and nothing else. Due to this, let’ s
deactivate and redefine some of the functions defining the appearance of fish.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
if test "$TERM" = "dumb"
function fish_prompt
echo "\$ "
end
function fish_right_prompt; end
function fish_greeting; end
function fish_title; end
end
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
* Regular fish shell appearance
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Regular_fish_shell_appearance-c3e532e1
:END:
2021-02-04 13:43:09 +00:00
Now, there is only one function I modify when it comes to the appearance of fish
2021-12-17 17:41:03 +00:00
when I’ m the one using it: the ~fish_greeting~ function. I use it to display the output of [[https://labs.phundrak.com/phundrak/pumo-system-info ][a utility I wrote ]].
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
function fish_greeting
2022-05-22 12:11:58 +00:00
which pumo-system-info 2&> /dev/null && pumo-system-info
2021-10-12 09:31:20 +00:00
end
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
2021-12-18 10:54:32 +00:00
For my fish prompt, I use [[https://starship.rs ][starship ]], a shell-agnostic prompt. Let’ s load it:
#+begin_src fish
starship init fish | source
#+end_src
2020-12-02 15:12:10 +00:00
2021-12-25 20:32:49 +00:00
* Setting up external tools
:PROPERTIES:
:CUSTOM_ID: Setting-up-external-tools-2r4b97p0bbj0
:END:
** Starship configuration
2021-12-18 10:54:32 +00:00
:PROPERTIES:
:header-args:toml: :tangle ~/.config/starship.toml
:CUSTOM_ID: Starship-configuration-lpz4tz410bj0
:END:
As mentioned above, starship is a shell-agnostic prompt, written in Rust and which can be configured separately from the shell. I decided to configure it here though, since fish is the only shell I use which is compatible with starship.
2020-12-02 16:28:08 +00:00
2021-12-18 10:54:32 +00:00
First I’ ll modify the default format variable, removing the modules I don’ t need.
#+begin_src toml
format = """
$username\
$hostname\
$shlvl\
$singularity\
$kubernetes\
$directory\
$vcsh\
$git_branch\
$git_commit\
$git_state\
$git_metrics\
$git_status\
$hg_branch\
$docker_context\
$package\
$cmake\
$dart\
$deno\
$lua\
$nodejs\
$python\
$rlang\
$rust\
$scala\
$zig\
$memory_usage\
$env_var\
$custom\
$cmd_duration\
$line_break\
$jobs\
$battery\
$time\
$status\
$shell\
$character"""
#+end_src
I want starship to be able to detect Lisp files, be it CommonLisp or EmacsLisp. Unfortunately, it seems nerd-font doesn’ t have any symbol for either language, so I’ m just using a lambda character.
#+begin_src toml
[custom.lisp]
extensions = ["lisp", "el"]
2021-12-20 10:37:09 +00:00
symbol = "λ "
2021-12-18 10:54:32 +00:00
style = "bold green"
#+end_src
Finally, let’ s disable all modules I don’ t need.
#+begin_src toml
[cobol]
disable = true
[dotnet]
disable = true
[elixir]
disable = true
[elm]
disable = true
[erlang]
disable = true
[golang]
disable = true
[helm]
disable = true
[java]
disable = true
[julia]
disable = true
[kotlin]
disable = true
[nim]
disable = true
[ocaml]
disable = true
[perl]
disable = true
[php]
disable = true
[pulumi]
disable = true
[purescript]
disable = true
[red]
disable = true
[ruby]
disable = true
[swift]
disable = true
[terraform]
disable = true
[vlang]
disable = true
[vagrant]
disable = true
[nix_shell]
disable = true
[conda]
disable = true
[aws]
disable = true
[gcloud]
disable = true
[openstack]
disable = true
[crystal]
disable = true
#+end_src
2021-02-04 08:14:52 +00:00
2021-12-25 20:32:49 +00:00
** Loading ~zoxide~
:PROPERTIES:
:CUSTOM_ID: Setting-up-external-tools-Loading-zoxide-y97b97p0bbj0
:END:
~zoxide~ is a smarter ~cd~ command, accessible through ~z~ . It can be loaded like so:
#+begin_src fish
zoxide init fish | source
#+end_src
2019-10-23 13:25:35 +00:00
* Abbreviations
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-97537716
:END:
2020-11-13 14:18:43 +00:00
#+NAME : generate-abbr
#+BEGIN_SRC emacs-lisp :var table=[] :exports none :tangle no
2021-10-12 09:31:20 +00:00
(replace-regexp-in-string "\\\\vert[{}]*"
"|"
(mapconcat (lambda (x) (format "abbr %s '%s'" (car x) (cadr x)))
table
"\n")
t t)
2020-11-13 14:18:43 +00:00
#+END_SRC
2020-02-24 18:52:13 +00:00
[Fish] Remove, add, update some abbreviations
Abbreviations removed: `p', `surge', `ls', and `feh'
Abbreviations added: `suser', `egui',
Add `devour' to abbreviations `egui', `mpv', `sxiv', `webcam'
2021-02-04 08:43:55 +00:00
Abbreviations are a great way to keep correctly track of which commands are run
in the shell without polluting the history of the shell with obscure commands.
When typing an abbreviation, fish will replace it with replace it with its
expanded equivalent. Below are some of the abbreviations I use. Be aware some of
them that invoke GUI programs can be invoked through ~devour~ which will make
the terminal disappear while the program runs, and once the GUI program exists
the terminal window will come back.
2019-10-23 13:25:35 +00:00
** System monitoring
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_monitoring-bd909755
:END:
2021-02-04 13:43:09 +00:00
Here I have some abbreviations which are quite useful when performing some
system monitoring. With =df= , we can get an overview of our filesystem usage,
while with =diskspace= we get some more precise information. =meminfo= is a call
to =free= with sane defaults, and similar to =meminfo= , we also have
=gpumeminfo= so we can get a quick look at the memory-related logs of our X
session. I also declared =cpuinfo= an alias of =lscpu= in order to keep
consistent with =meminfo= . =pscpu= gives us information on what the CPU is
running right now, and =pscpu10= limits that to the top 10 threads. Similarly,
=psmem= gives us information on the memory usage of the current threads, and
=psmem10= only the ten most important threads in terms of memory usage.
2020-11-13 14:18:43 +00:00
#+NAME : mgmt-abbr
2020-11-29 12:47:28 +00:00
| abbreviation | command |
|--------------+--------------------------------------------|
| df | df -H |
| diskspace | sudo df -h \vert grep -E "sd\vert{}lv\vert{}Size" |
| du | du -ch |
| meminfo | free -m -l -t |
| gpumeminfo | grep -i --color memory /var/log/Xorg.0.log |
| cpuinfo | lscpu |
| pscpu | ps auxf \vert sort -nr -k 3 |
| pscpu10 | ps auxf \vert sort -nr -k 3 \vert head -10 |
| psmem | ps auxf \vert sort -nr -k 4 |
| psmem10 | ps auxf \vert sort -nr -k 4 \vert head -10 |
2020-11-13 14:18:43 +00:00
#+begin_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=mgmt-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-10-23 13:25:35 +00:00
** System management (packages and services)
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_ (packages_and_services)-7249fbb7
:END:
2021-02-04 13:43:09 +00:00
I added some of these abbreviations due to how often I have to write the whole
thing.
2019-10-23 13:25:35 +00:00
2020-02-24 18:52:13 +00:00
*** Package management
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_ (packages_and_services)-Package_management-efbcdf0f
:END:
2021-02-04 13:43:09 +00:00
The first command is =remove= which removes a package from my system, as well as
its dependencies no longer needed. =p= . =pacman= 's or =paru= 's. This is why I
simply type =purge= . And if I want to simply seach among the =pacman= repos, I
can type =search= . Otherwise, if I want to include AUR results, I’ ll use =paru= .
2020-11-13 14:18:43 +00:00
#+NAME : pm-abbr
2021-03-31 14:22:50 +00:00
| abbreviation | command |
|--------------+------------------|
| remove | sudo pacman -Rsc |
| purge | paru -Sc |
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=pm-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
*** Service management
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_ (packages_and_services)-Service_management-8c5ae482
:END:
2021-02-04 13:43:09 +00:00
I don’ t have the muscle memory of =systemctl= . So instead, I simply type =c=
when I want to do something user service related. And if I want to manipulate
system services, I can instead type a simple capital =S= .
2020-11-13 14:18:43 +00:00
#+NAME : service-abbr
[Fish] Remove, add, update some abbreviations
Abbreviations removed: `p', `surge', `ls', and `feh'
Abbreviations added: `suser', `egui',
Add `devour' to abbreviations `egui', `mpv', `sxiv', `webcam'
2021-02-04 08:43:55 +00:00
| abbreviation | command |
|--------------+------------------|
| s | systemctl |
| suser | systemctl --user |
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=service-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
** Development
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-d6050ca4
:END:
2021-02-04 13:43:09 +00:00
A good amount of these commands are development related, especially when it
comes to compilation or Docker.
2019-10-23 13:25:35 +00:00
*** CMake
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-CMake-f2951675
:END:
2021-02-04 13:43:09 +00:00
I have the following abbreviations so I can quickly run CMake and create a
configuration for debug or release profiles.
2020-11-13 14:18:43 +00:00
#+NAME : abbr-cmake
| abbreviation | command |
|--------------+----------------------------------|
| cdebug | cmake -DCMAKE_BUILD_TYPE=Debug |
| crelease | cmake -DCMAKE_BUILD_TYPE=Release |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=abbr-cmake) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-10-23 13:25:35 +00:00
*** Docker
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Docker-2d0a1288
:END:
2021-02-04 13:43:09 +00:00
And of course, when it comes to Docker Compose, I don't have time to write the
full command, so I use these instead.
2020-11-13 14:18:43 +00:00
#+NAME : abbr-docker
| abbreviation | command |
|--------------+------------------------------|
| dc | docker-compose |
| dcb | docker-compose build |
| dcd | docker-compose down |
| dcl | docker-compose logs |
| dcp | docker-compose pull |
| dcr | docker-compose run --rm |
| dcu | docker-compose up |
| dcub | docker-compose up --build |
| dcud | docker-compose up -d |
| dcudb | docker-compose up -d --build |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=abbr-docker) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-10-23 13:25:35 +00:00
*** Text editors
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Text_editors-5a23df47
:END:
2021-02-04 13:43:09 +00:00
I greatly prefer to use Emacsclient as my main text editor; Emacs has basically
all I need. So, it's only normal I have an abbreviation to launch a new instance
of it. If launched in the terminal, I’ ll usually want Emacs to be displayed in
CLI mode and not in GUI mode, otherwise I would invoke it with my WM’ s shortcut.
2021-04-04 10:10:32 +00:00
In case we want to launch Emacs in GUI mode anyways, ~egui~ is available too.
2020-11-13 14:18:43 +00:00
#+NAME : abbr-text-ed
[Fish] Remove, add, update some abbreviations
Abbreviations removed: `p', `surge', `ls', and `feh'
Abbreviations added: `suser', `egui',
Add `devour' to abbreviations `egui', `mpv', `sxiv', `webcam'
2021-02-04 08:43:55 +00:00
| abbreviation | command |
|--------------+-----------------------|
| e | emacsclient -c -nw |
| egui | devour emacsclient -c |
2020-11-13 14:18:43 +00:00
Here is the corresponding fish configuration:
#+BEGIN_SRC fish :noweb yes
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=abbr-text-ed) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
2020-08-28 13:39:39 +00:00
*** Compilation
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Compilation-dd066050
:END:
2021-02-04 13:43:09 +00:00
By default, I set ~clang~ , ~clang++~ , ~gcc~ and ~g++~ to the latest standard and
with the ~-Wall~ flag activated.
2020-11-13 14:18:43 +00:00
#+NAME : abbr-comp
| abbreviation | command |
|--------------+----------------------|
| clang | clang -Wall |
| clang++ | clang++ -Wall |
| g++ | g++ -Wall -std=c++20 |
| gcc | gcc -Wall -std=c18 |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=abbr-comp) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2020-08-28 13:39:39 +00:00
*** Git
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Git-5e5055c1
:END:
2021-02-04 13:43:09 +00:00
And let's face it: we all at one point just wanted to commit our code without
thinking about the message, to just get over with it. Don't worry, I got you
covered.
2020-11-13 14:18:43 +00:00
#+NAME : abbr-git
| abbreviation | command |
|--------------+-----------------------------------------------------|
| randcommit | git commit -m (curl -s whatthecommit.com/index.txt) |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=abbr-git) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2020-08-28 13:39:39 +00:00
2019-10-23 13:25:35 +00:00
** LaTeX
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-LaTeX-76865eb9
:END:
2021-02-04 13:43:09 +00:00
Yes, although I use org-mode, I still have some use for LaTeX, especially when
it comes to PDF exports of my org files. Hence why I use the LaTeX package
manager. It is recommended to use ~tllocalmgr~ instead of ~tlmgr~ , but I can
never remember the command, and the latter is faster to type, so time for an
abbreviation. Same goes for ~texhash~ which must be run as sudo.
2020-11-13 14:18:43 +00:00
#+NAME : latex-abbr
| abbreviation | command |
|--------------+--------------|
| tlmgr | tllocalmgr |
| texhash | sudo texhash |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=latex-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
** Some security measures
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Some_security_measures-489cb521
:END:
2021-02-04 13:43:09 +00:00
Some commands can be quite dangerous when not used properly, which is why I
added default flags and options so I can get warnings before things get ugly.
The =-i= and =-I= add prompts in case we might not want to do what we asked the
shell to do. Notice =lns= which creates symlinks, =rmd= which removes
directories, =rmf= which forces deletion, and =rmdf= which forces the delition
of a directory. Notice also the =--preserve-root= which will prevent me from
accidentally removing the root folder. I added the same option to =chgrp= ,
=chmod= , and =chown= .
2020-11-13 14:18:43 +00:00
#+NAME : sec-abbr
2022-05-22 12:12:53 +00:00
| abbreviation | command |
|--------------+---------------------------|
| cp | cp -i |
| rsync | rsync -ruvtEhl --progress |
| ln | ln -i |
| lns | ln -si |
| mv | mv -i |
| rm | rm -Iv |
| rmd | rm --preserve-root -Irv |
| rmdf | rm --preserve-root -Irfv |
| rmf | rm --preserve-root -Ifv |
| chgrp | chgrp --preserve-root -v |
| chmod | chmod --preserve-root -v |
| chown | chown --preserve-root -v |
2020-11-13 14:18:43 +00:00
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=sec-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
** Typos
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Typos-370bbb27
:END:
2021-02-04 13:43:09 +00:00
Let's admit it, we all make typos from time to time in the shell, and some are
recurrent enough we make abbreviations or aliases of the correct command. Well,
I have some of my abbreviations which were make exactly because of this.
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~ .
So, let's just replace the former by the latter. I'm also very bad at typing
~exit~ . And sometimes I suck at typing ~htop~ .
2020-11-13 14:18:43 +00:00
#+NAME : typo-abbr
| abbreviation | command |
|--------------+---------|
| clean | clear |
| exi | exit |
| exti | exit |
| hotp | htop |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=typo-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 13:25:35 +00:00
** Misc
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-c2631eb6
:END:
2021-02-04 13:43:09 +00:00
Finally, some miscellaneous abbreviations that don't really fit into any of the
above categories.
2019-10-23 13:25:35 +00:00
2020-08-28 13:39:39 +00:00
*** Media
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Media-e4b85d56
:END:
2021-02-04 13:43:09 +00:00
Here you will find various commands related to media in general. the first one
is a command to play some chillhop from the [[https://www.youtube.com/user/Chillhopdotcom ][Chillhop YouTube channel ]]'s
livestream.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/user/Chillhopdotcom/live" &'
2020-11-13 14:18:43 +00:00
#+END_SRC
2021-02-04 13:43:09 +00:00
When it comes to mpv, I do not want to force it to open a graphical window if
for example I want to listen to an audio file. I also do not want any border on
that window. So, I declared this abbreviation.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr mpv 'mpv --no-border --force-window=no'
2020-11-13 14:18:43 +00:00
#+END_SRC
2021-02-04 13:43:09 +00:00
When I want to download a song from YouTube, I'll just use the command ~flac
videoIdentifier~ to get it through ~youtube-dl~ .
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/ %(uploader)s/%(title)s.%(ext)s"'
2020-11-13 14:18:43 +00:00
#+END_SRC
2022-02-24 16:13:23 +00:00
Some sane default options for [[https://github.com/nsxiv/nsxiv ][~nsxiv~ ]]. This includes playing GIFs and
not displaying the filename below. Nsxiv will also open in fullscreen
and will fit the displayed image to the frame.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2022-02-24 16:13:23 +00:00
abbr nsxiv 'nsxiv -abfs f'
2022-02-26 14:37:01 +00:00
abbr sxiv 'nsxiv -abfs f' # old habits die hard
2020-11-13 14:18:43 +00:00
#+END_SRC
2022-09-19 10:35:40 +00:00
The following abbreviation is here so I can easily launch software
with my Nvidia GPU.
#+begin_src fish
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
#+end_src
2021-02-04 13:43:09 +00:00
Finally, let's declare the following abbreviation that will launch an mpv
instance displaying my webcam:
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0'
2020-11-13 14:18:43 +00:00
#+END_SRC
2020-08-28 13:39:39 +00:00
*** Sudo
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Sudo-aef0214a
:END:
2021-02-04 13:43:09 +00:00
First, I make it so that ~sudo~ comes with the ~-A~ switch in order to call my
custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0d7a8c0 ][askpass ]]). I also made it so
~please~ is an equivalent to ~sudo -A~ as a joke.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr please 'sudo -A'
2020-11-13 14:18:43 +00:00
#+END_SRC
2020-08-28 13:39:39 +00:00
*** History
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-History-a2124b23
:END:
2021-02-04 13:43:09 +00:00
I find it more intuitive and faster to just write ~hist~ instead of ~history~ ,
so let's declare that.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr hist history
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-10-23 13:25:35 +00:00
*** Compression
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Compression-4fd4ffef
:END:
2021-02-04 13:43:09 +00:00
It seems it's just like many other people, but I cannot for the life of me
remember the syntax of ~tar~ . So, I made the following abbreviations, and one
day hopefully, after seeing the abbreviations' expansion over and over I'll
remember the command like I did for the abbreviation of ~remove~ (see [[#Abbreviations-System_management_ (packages_and_services)-Package_management-efbcdf0f][Package
management]]).
2020-11-13 14:18:43 +00:00
#+NAME : tar-abbr
| abbreviation | command |
|--------------+-----------|
| compress | tar -czf |
| untar | tar -xvzf |
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=tar-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2020-04-06 11:33:23 +00:00
*** exa
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-exa-e1b528b9
:END:
2020-11-13 14:18:43 +00:00
#+NAME : exa-abbr
| abbreviation | command |
|--------------+--------------------------------------------|
| exa | exa -halg@ --group-directories-first --git |
| lsl | exa -halg@ --group-directories-first --git |
2020-04-11 18:27:46 +00:00
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=exa-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2019-11-29 20:15:37 +00:00
*** Network Management
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Network_Management-0b7fc91d
:END:
2021-02-04 13:43:09 +00:00
First, we have just =nmcli= with sane default options, that is a pretty output
with colors.
2020-11-13 14:18:43 +00:00
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
abbr nmcli 'nmcli -p -c auto'
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-10-23 11:02:59 +00:00
2020-02-24 18:52:13 +00:00
*** NordVPN
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-NordVPN-09438638
:END:
2021-02-04 13:43:09 +00:00
Next, we have some NordVPN-related shortcuts. The first one is a simple
abbreviation to =nordvpn= . The second one is a shortcut to connect to a server,
and to disconnect from the current server. I also have a couple of shortcuts to
quickly connect to some preselected countries, mainly France, Germany, Japan and
the US.
2020-11-13 14:18:43 +00:00
#+NAME : nordvpn-abbr
| abbreviation | command |
|--------------+-------------------------|
| n | nordvpn |
| nc | nordvpn c |
| nd | nordvpn d |
| ncf | nordvpn c France |
| ncg | nordvpn c Germany |
| ncj | nordvpn c Japan |
| ncu | nordvpn c United_States |
#+BEGIN_SRC fish
2021-10-12 09:31:20 +00:00
<<generate-abbr(table=nordvpn-abbr) >>
2020-11-13 14:18:43 +00:00
#+END_SRC
2019-11-29 20:15:37 +00:00
2019-10-23 13:25:35 +00:00
*** Wget
2020-12-10 09:06:32 +00:00
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Wget-27f4bebf
:END:
2020-11-13 14:18:43 +00:00
By default, continue a download that was interupted.
#+BEGIN_SRC fish
2022-06-07 17:20:14 +00:00
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
2020-11-13 14:18:43 +00:00
#+END_SRC
2021-04-04 10:10:48 +00:00
* Last thing before we’ re done
:PROPERTIES:
:CUSTOM_ID: Last-thing-before-we-re-done-670f1461
:END:
For some reason, Fish began searching for packages when I enter a command name
wrong. For instance, if I type ~vim~ , I get something like this:
#+BEGIN_SRC text :tangle no
$ vim
fish: Unknown command: vim
usr/bin/vim is owned by extra/gvim 8.2.2653-1
usr/bin/vim is owned by extra/vim 8.2.2653-1
#+END_SRC
But I don’ t want that, it slows down my shell. So, in order to fix that, we need
the following lines:
#+BEGIN_SRC fish
function fish_command_not_found
__fish_default_command_not_found_handler $argv
end
#+END_SRC
Tadah! No more package suggestions from fish!