This commit is contained in:
parent
dbf3c5e212
commit
3354f79554
@ -19,14 +19,14 @@ respectively. These servers are also located in France.
|
|||||||
** Cookies
|
** Cookies
|
||||||
*** What are cookies?
|
*** What are cookies?
|
||||||
Cookies are small files a website saves on your computer or mobile
|
Cookies are small files a website saves on your computer or mobile
|
||||||
phone when you visit a website. site. Although not all sites make use
|
phone when you visit a website. Although not all sites make use of
|
||||||
of them, they are nevertheless extremely common in order to allow
|
them, they are nevertheless extremely common in order to allow
|
||||||
websites to function properly or function properly or more
|
websites to function properly or function properly or more
|
||||||
efficiently.
|
efficiently.
|
||||||
|
|
||||||
This website uses some functional cookies in order to remember your
|
This website uses some functional cookies in order to remember your
|
||||||
preferences, such as your preferred language or its color theme. These
|
preferences, such as your preferred language or its colour theme.
|
||||||
cookies are not and cannot be used to track you.
|
These cookies are not and cannot be used to track you.
|
||||||
|
|
||||||
However, as this site is protected by Cloudflare, they may also host
|
However, as this site is protected by Cloudflare, they may also host
|
||||||
some cookies to remember, for example, that your browser is safe or to
|
some cookies to remember, for example, that your browser is safe or to
|
||||||
@ -47,8 +47,8 @@ Google).
|
|||||||
*** What about other methods of tracking users?
|
*** What about other methods of tracking users?
|
||||||
There are other more subtle methods of tracking someone on the
|
There are other more subtle methods of tracking someone on the
|
||||||
internet, or even via emails or any web content rendered on the
|
internet, or even via emails or any web content rendered on the
|
||||||
screen, such as web beacons (extremely small images). It is also
|
screen, such as web beacons (minuscule images). It is also possible to
|
||||||
possible to store Flash cookies or local shared objects.
|
store Flash cookies or local shared objects.
|
||||||
|
|
||||||
This site does not use them at all.
|
This site does not use them at all.
|
||||||
|
|
||||||
@ -68,5 +68,5 @@ modification of the file =about.org= on [[https://labs.phundrak.com/phundrak/con
|
|||||||
|
|
||||||
** I have other questions
|
** I have other questions
|
||||||
|
|
||||||
And I have the answers! I’ll be more thang happy to chat with you by
|
And I have the answers! I’ll be more than happy to chat with you by
|
||||||
email, feel free to send me one at [[mailto:lucien@phundrak.com][lucien@phundrak.com]].
|
email, feel free to send me one at [[mailto:lucien@phundrak.com][lucien@phundrak.com]].
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#+TITLE: Arch Linux, Phundrak-flavored
|
#+TITLE: Arch Linux, Phundrak-flavoured
|
||||||
#+setupfile: headers
|
#+setupfile: headers
|
||||||
#+PROPERTY: header-args :tangle no :exports none
|
#+PROPERTY: header-args :tangle no :exports none
|
||||||
#+PROPERTY: header-args:sh :tangle no :exports code
|
#+PROPERTY: header-args:sh :tangle no :exports code
|
||||||
@ -6,29 +6,33 @@
|
|||||||
#+PROPERTY: header-args:emacs-lisp :exports none :noweb yes :tangle no :cache yes
|
#+PROPERTY: header-args:emacs-lisp :exports none :noweb yes :tangle no :cache yes
|
||||||
|
|
||||||
* Bootstrap Script
|
* Bootstrap Script
|
||||||
Here will be presented what I do to get my system up and running on a fresh Arch
|
Here will be presented what I do to get my system up and running on a
|
||||||
Linux install. These installation instructions were written in order to get an
|
fresh Arch Linux install. These installation instructions were written
|
||||||
Arch Linux distribution up and running with the same configuration as my main
|
in order to get an Arch Linux distribution up and running with the
|
||||||
computer’s and my travelling laptop’s configuration.
|
same configuration as my main computer’s and my travelling laptop’s
|
||||||
|
configuration.
|
||||||
|
|
||||||
** Install Arch Linux
|
** Install Arch Linux
|
||||||
I usually install Arch from the [[https://www.archlinux.org/download/][vanilla ISO]], however I began using [[https://github.com/MatMoul/archfi][archfi]] to
|
I usually install Arch from the [[https://www.archlinux.org/download/][vanilla ISO]], however I began using
|
||||||
install easily the distro (I’ve done it so many times, I know how it works now).
|
[[https://github.com/MatMoul/archfi][archfi]] to install easily the distro (I’ve done it so many times, I
|
||||||
Usually, my distros will be installed on two partitions: ~/home~ and ~/~ (root).
|
know how it works now). Usually, my distros will be installed on two
|
||||||
|
partitions: ~/home~ and ~/~ (root).
|
||||||
|
|
||||||
If the computer supports EFI bootloaders, the EFI partition will be mounted on
|
If the computer supports EFI bootloaders, the EFI partition will be
|
||||||
~/boot/efi~. I generally use ~systemd-boot~ as my boot manager, but if you are
|
mounted on ~/boot/efi~. I generally use ~systemd-boot~ as my boot manager,
|
||||||
more comfortable with another one, just install what you want. Be aware that if
|
but if you are more comfortable with another one, just install what
|
||||||
you format your ~/boot~ partition, you will delete all boot managers that
|
you want. Be aware that if you format your ~/boot~ partition, you will
|
||||||
already exist; so, if you are dual-booting, *DO NOT FORMAT IT*. Yes, I made the
|
delete all boot managers that already exist; so, if you are
|
||||||
mistake of wiping the Windows boot manager when I used to dual-boot.
|
dual-booting, *DO NOT FORMAT IT*. Yes, I made the mistake of wiping the
|
||||||
|
Windows boot manager when I used to dual-boot.
|
||||||
|
|
||||||
In order to use the ~suspend-then-hibernate~ systemd command, it is necessary to
|
In order to use the ~suspend-then-hibernate~ systemd command, it is
|
||||||
have a swap partition at least twice the size of your installed RAM. That is
|
necessary to have a swap partition at least twice the size of your
|
||||||
because when this command will be run, the system will try to save the current
|
installed RAM. That is because when this command will be run, the
|
||||||
state of your machine, stored in your RAM, to the swap filesystem. If there is
|
system will try to save the current state of your machine, stored in
|
||||||
not enough space, the command will fail, and you won’t be able to use this
|
your RAM, to the swap filesystem. If there is not enough space, the
|
||||||
command. For instance, my current computer has 32 GB of RAM, hence my SWAP
|
command will fail, and you won’t be able to use this command. For
|
||||||
|
instance, my current computer has 32 GB of RAM, hence my SWAP
|
||||||
partition is 16 GB large.
|
partition is 16 GB large.
|
||||||
|
|
||||||
*** Get the latest, fastest mirrors
|
*** Get the latest, fastest mirrors
|
||||||
@ -38,17 +42,18 @@ pacman -Sy reflector
|
|||||||
reflector -c FR,DE -l 20 -p https --sort rate --save /etc/pacman.d/mirrorlist --verbose
|
reflector -c FR,DE -l 20 -p https --sort rate --save /etc/pacman.d/mirrorlist --verbose
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
This will update the packages from your live ISO, and you will get the best
|
This will update the packages from your live ISO, and you will get the
|
||||||
mirrors for your installation. Of course, change the countries accordingly to
|
best mirrors for your installation. Of course, change the countries
|
||||||
your location. In my case, I am only interested in French, German, and Belgian
|
accordingly to your location. In my case, I am only interested in
|
||||||
mirrors.
|
French, German, and Belgian mirrors.
|
||||||
|
|
||||||
*** Install the system
|
*** Install the system
|
||||||
Then you can use a custom script to ease your installation of Arch if you do not
|
Then you can use a custom script to ease your installation of Arch if
|
||||||
wish to do it manually. Personally, I’ve done it several times already, I know
|
you do not wish to do it manually. Personally, I’ve done it several
|
||||||
how the distro works, I just want to be able to install my distro quickly now.
|
times already, I know how the distro works, I just want to be able to
|
||||||
I’ll need to download the script with ~wget~, but apparently it isn’t installed
|
install my distro quickly now. I’ll need to download the script with
|
||||||
by default on Arch ISOs anymore, so I’ll need to install it.
|
~wget~, but apparently it isn’t installed by default on Arch ISOs any
|
||||||
|
more, so I’ll need to install it.
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
pacman -S wget
|
pacman -S wget
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -60,13 +65,14 @@ wget archfi.sf.net/archfi
|
|||||||
sh archfi
|
sh archfi
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Then, follow the instructions and install Arch Linux. Take the opportunity to
|
Then, follow the instructions and install Arch Linux. Take the
|
||||||
install as many packages as you need, mainly ~paru~ which I use as my package
|
opportunity to install as many packages as you need, mainly ~paru~ which
|
||||||
manager (it is just a wrapper for ~pacman~) and AUR helper, and ~pacman-contrib~
|
I use as my package manager (it is just a wrapper for ~pacman~) and AUR
|
||||||
which will help us to install some packages later.
|
helper, and ~pacman-contrib~ which will help us to install some packages
|
||||||
|
later.
|
||||||
|
|
||||||
Once your system is installed, reboot and remove your installation media from
|
Once your system is installed, reboot and remove your installation
|
||||||
your computer.
|
media from your computer.
|
||||||
|
|
||||||
** Execute bootstrap
|
** Execute bootstrap
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
@ -85,8 +91,8 @@ And now that ~paru~ is available, we can install ~yadm~:
|
|||||||
paru -S yadm
|
paru -S yadm
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
~yadm~ comes with a very handy feature: its bootstrap script. It can be executed
|
~yadm~ comes with a very handy feature: its bootstrap script. It can be
|
||||||
automatically once the dotfiles are cloned with yadm:
|
executed automatically once the dotfiles are cloned with yadm:
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
yadm clone https://labs.phundrak.com/phundrak/dotfiles
|
yadm clone https://labs.phundrak.com/phundrak/dotfiles
|
||||||
# or if labs.phundrak.com is down or too slow for you
|
# or if labs.phundrak.com is down or too slow for you
|
||||||
@ -107,11 +113,11 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Get a correct keyboard layout
|
*** Get a correct keyboard layout
|
||||||
I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by Dvorak
|
I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by
|
||||||
layouts, however I sometimes need to switch back to the standard French AZERTY
|
Dvorak layouts, however I sometimes need to switch back to the
|
||||||
or the American QWERTY layout, so I make it so the Menu key switches for me my
|
standard French AZERTY or the American QWERTY layout, so I make it so
|
||||||
layout between these three. This makes it so my xorg configuration of my
|
the Menu key switches for me my layout between these three. This makes
|
||||||
keyboard looks like this:
|
it so my Xorg configuration of my keyboard looks like this:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set keyboardconf \
|
set keyboardconf \
|
||||||
'Section "InputClass"
|
'Section "InputClass"
|
||||||
@ -124,7 +130,8 @@ set keyboardconf \
|
|||||||
EndSection'
|
EndSection'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
So, let’s ask the user if they want to set it as their keyboard configuration.
|
So, let’s ask the user if they want to set it as their keyboard
|
||||||
|
configuration.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Set keyboard layout #########################################################\n\n"
|
printf "\n# Set keyboard layout #########################################################\n\n"
|
||||||
whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
|
whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
|
||||||
@ -134,8 +141,8 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Set our locale
|
*** Set our locale
|
||||||
I use two main locales, the French and US UTF-8 locales, and I like to keep the
|
I use two main locales, the French and US UTF-8 locales, and I like to
|
||||||
Japanese locale activated just in case.
|
keep the Japanese locale activated just in case.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
|
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -164,7 +171,7 @@ LC_ADDRESS=fr_FR.UTF-8
|
|||||||
LC_MEASUREMENT=fr_FR.UTF-8"
|
LC_MEASUREMENT=fr_FR.UTF-8"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Let’s set it as our system’s locale if the user whishes to.
|
Let’s set it as our system’s locale if the user wishes to.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
whiptail --yesno "Do you agree to have the following locale set?\n\n $localeconf" 20 43
|
whiptail --yesno "Do you agree to have the following locale set?\n\n $localeconf" 20 43
|
||||||
if test $status -eq 0
|
if test $status -eq 0
|
||||||
@ -179,8 +186,8 @@ sudo locale-gen
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Create some folders
|
*** Create some folders
|
||||||
Let’s create some folders we might need for mounting our drives, Android devices
|
Let’s create some folders we might need for mounting our drives,
|
||||||
and CDs.
|
Android devices and CDs.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Create directories for mounting #############################################\n\n"
|
printf "\n# Create directories for mounting #############################################\n\n"
|
||||||
sudo mkdir -p /mnt/{USB,CD,Android}
|
sudo mkdir -p /mnt/{USB,CD,Android}
|
||||||
@ -198,7 +205,7 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Install basic packages
|
*** Install basic packages
|
||||||
Ok, let’s list all the packages that I need. First, let’s begin with
|
OK, let’s list all the packages that I need. First, let’s begin with
|
||||||
system packages.
|
system packages.
|
||||||
#+name: packages-system
|
#+name: packages-system
|
||||||
| Package name | Why I need it |
|
| Package name | Why I need it |
|
||||||
@ -381,7 +388,7 @@ Terminal utilities
|
|||||||
| unrar | Support for rar file format |
|
| unrar | Support for rar file format |
|
||||||
| w3m | Terminal web browser |
|
| w3m | Terminal web browser |
|
||||||
| wget | Retrieve files from the web |
|
| wget | Retrieve files from the web |
|
||||||
| x11-ssh-askpass | Passphrase dialog over SSH |
|
| x11-ssh-askpass | Passphrase dialogue over SSH |
|
||||||
| xclip | Interact with the X11 clipboard |
|
| xclip | Interact with the X11 clipboard |
|
||||||
| yt-dlp-drop-in | ~yt-dlp~ but it also replaces ~youtube-dl~ |
|
| yt-dlp-drop-in | ~yt-dlp~ but it also replaces ~youtube-dl~ |
|
||||||
|
|
||||||
@ -549,8 +556,8 @@ Our code to generate such directories looks like this:
|
|||||||
<<gen-dirs-tangle()>>
|
<<gen-dirs-tangle()>>
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
The next step is to tangle all the Org files. Here is the list of files that are
|
The next step is to tangle all the Org files. Here is the list of
|
||||||
to be tangled:
|
files that are to be tangled:
|
||||||
#+NAME: tangled-files
|
#+NAME: tangled-files
|
||||||
| filename |
|
| filename |
|
||||||
|--------------|
|
|--------------|
|
||||||
@ -636,8 +643,8 @@ printf "\n# Tangling org files #################################################
|
|||||||
|
|
||||||
*** Set up dotfiles’ git repository
|
*** Set up dotfiles’ git repository
|
||||||
**** Update our dotfiles’ remotes
|
**** Update our dotfiles’ remotes
|
||||||
This line in the bootstrap script will test if the current user is using my
|
This line in the bootstrap script will test if the current user is
|
||||||
username. If yes, it’s probably me.
|
using my username. If yes, it’s probably me.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
if test "$USER" = 'phundrak'
|
if test "$USER" = 'phundrak'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -661,20 +668,21 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Update our submodules
|
**** Update our submodules
|
||||||
Now we can download the various dependencies of our dotfiles. To do so, let’s
|
Now we can download the various dependencies of our dotfiles. To do
|
||||||
run the following command:
|
so, let’s run the following command:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Getting yadm susbmodules ####################################################\n\n"
|
printf "\n# Getting yadm susbmodules ####################################################\n\n"
|
||||||
yadm submodule update --init --recursive
|
yadm submodule update --init --recursive
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Enable some services
|
*** Enable some services
|
||||||
We have installed some packages which require some services to run. Let’s enable
|
We have installed some packages which require some services to run.
|
||||||
them.
|
Let’s enable them.
|
||||||
|
|
||||||
**** Systemd-timesyncd
|
**** Systemd-timesyncd
|
||||||
This service enables time syncing with the NTP protocol, so I can be sure my
|
This service enables time syncing with the NTP protocol, so I can be
|
||||||
computer’s time is correct. The service first needs to be enabled:
|
sure my computer’s time is correct. The service first needs to be
|
||||||
|
enabled:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Enabling timesync ###########################################################\n\n"
|
printf "\n# Enabling timesync ###########################################################\n\n"
|
||||||
sudo systemctl enable --now systemd-timesyncd
|
sudo systemctl enable --now systemd-timesyncd
|
||||||
@ -712,10 +720,11 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Emacs
|
**** Emacs
|
||||||
Emacs will run as a user service, which means it won’t be launched until we log
|
Emacs will run as a user service, which means it won’t be launched
|
||||||
in. However, the service won’t be started immediately, I personally prefer to
|
until we log in. However, the service won’t be started immediately, I
|
||||||
start a standalone instance in which installing and compiling the Emacs packages
|
personally prefer to start a standalone instance in which installing
|
||||||
will happen, and then once that is done I will start the service.
|
and compiling the Emacs packages will happen, and then once that is
|
||||||
|
done I will start the service.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Enabling Emacs as user service ##############################################\n\n"
|
printf "\n# Enabling Emacs as user service ##############################################\n\n"
|
||||||
systemctl --user enable emacs
|
systemctl --user enable emacs
|
||||||
@ -730,8 +739,8 @@ systemctl --user start emacs
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Mpd
|
**** Mpd
|
||||||
Mpd will also use as a user service in order to get rid of some lines of code in
|
Mpd will also use as a user service in order to get rid of some lines
|
||||||
my configuration.
|
of code in my configuration.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Enabling Mpd as a user service ##############################################\n\n"
|
printf "\n# Enabling Mpd as a user service ##############################################\n\n"
|
||||||
mkdir -p ~/.config/mpd/playlists
|
mkdir -p ~/.config/mpd/playlists
|
||||||
@ -739,9 +748,9 @@ systemctl --user enable --now mpd
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** NordVPN
|
**** NordVPN
|
||||||
Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually maintain
|
Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually
|
||||||
my VPN connections with OpenVPN. However, it requires a service that we should
|
maintain my VPN connections with OpenVPN. However, it requires a
|
||||||
activate:
|
service that we should activate:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
sudo systemctl enable --now nordvpnd
|
sudo systemctl enable --now nordvpnd
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -807,11 +816,11 @@ systemctl --user enable --now pipewire-input-filter-chain.service
|
|||||||
Just make sure afterwards the microphone is redirected to the
|
Just make sure afterwards the microphone is redirected to the
|
||||||
noise-canceling source. The same source should be your input device
|
noise-canceling source. The same source should be your input device
|
||||||
where you want to use your microphone. The only downside is this is
|
where you want to use your microphone. The only downside is this is
|
||||||
ony a mono input, but it shouldn’t matter for most people.
|
only a mono input, but it shouldn’t matter for most people.
|
||||||
|
|
||||||
**** SSH server
|
**** SSH server
|
||||||
Maybe we want to activate an SSH server on our machine. If so, we can enable it.
|
Maybe we want to activate an SSH server on our machine. If so, we can
|
||||||
Let’s ask the question.
|
enable it. Let’s ask the question.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
whiptail --yesno 'Do you want to activate the ssh server?' 8 50
|
whiptail --yesno 'Do you want to activate the ssh server?' 8 50
|
||||||
if test $status -eq 0
|
if test $status -eq 0
|
||||||
@ -845,23 +854,24 @@ git clone https://github.com/hakimel/reveal.js.git
|
|||||||
|
|
||||||
*** Install Rust
|
*** Install Rust
|
||||||
**** Install the toolchains
|
**** Install the toolchains
|
||||||
When using Rust, I bounce between two toolchains, the ~stable~ toolchain and the
|
When using Rust, I bounce between two toolchains, the ~stable~ toolchain
|
||||||
~nightly~ toolchain, although I try to stick with Rust Stable. To install them,
|
and the ~nightly~ toolchain, although I try to stick with Rust Stable.
|
||||||
I will use ~rustup~ which has already been installed previously.
|
To install them, I will use ~rustup~ which has already been installed
|
||||||
|
previously.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
|
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
|
||||||
rustup default stable
|
rustup default stable
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
This will both download the stable toolchain and set it as the default one. Now
|
This will both download the stable toolchain and set it as the default
|
||||||
to install the nightly toolchain, let’s run this:
|
one. Now to install the nightly toolchain, let’s run this:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
rustup toolchain install nightly
|
rustup toolchain install nightly
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Install some utilities
|
**** Install some utilities
|
||||||
We’ll need some utilities when developing Rust from Emacs, namely ~rustfmt~ and
|
We’ll need some utilities when developing Rust from Emacs, namely
|
||||||
~racer~. Let’s install them with ~cargo~.
|
~rustfmt~. Let’s install it with ~cargo~.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Add rust utilities ##########################################################\n\n"
|
printf "\n# Add rust utilities ##########################################################\n\n"
|
||||||
cargo install rustfmt
|
cargo install rustfmt
|
||||||
@ -881,7 +891,7 @@ We will also need some components for development purposes.
|
|||||||
"\n")
|
"\n")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+RESULTS[b3935b1c09d86fe506b43670f52960306a1e9809]: rust-components-gen
|
#+RESULTS[2499c179aa97dc038832188f53dd855a23eba70c]: rust-components-gen
|
||||||
: rustup component add rust-src
|
: rustup component add rust-src
|
||||||
: rustup component add clippy
|
: rustup component add clippy
|
||||||
|
|
||||||
@ -891,11 +901,12 @@ Here is the code to do so:
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Set up our fish shell
|
*** Set up our fish shell
|
||||||
The last thing we want to do is to set up our fish shell with some extensions in
|
The last thing we want to do is to set up our fish shell with some
|
||||||
order to improve the user experience.
|
extensions in order to improve the user experience.
|
||||||
|
|
||||||
**** Install ~fisher~
|
**** Install ~fisher~
|
||||||
We will be using ~fisher~ as our extension manager for Fish. Let’s install it.
|
We will be using ~fisher~ as our extension manager for Fish. Let’s
|
||||||
|
install it.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
printf "\n# Installing fisher ###########################################################\n\n"
|
printf "\n# Installing fisher ###########################################################\n\n"
|
||||||
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
|
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
|
||||||
|
366
docs/desktop.org
366
docs/desktop.org
@ -9,365 +9,6 @@
|
|||||||
Many settings formerly present in this website’s index are related to
|
Many settings formerly present in this website’s index are related to
|
||||||
my desktop settings, while some others are not.
|
my desktop settings, while some others are not.
|
||||||
|
|
||||||
# Also, since I switched to StumpWM, many of my keybinds from Emacs need
|
|
||||||
# to be kept up to date with my StumpWM keybinds, and /vice versa/. This
|
|
||||||
# document aims to regroup all settings related to the desktop in order
|
|
||||||
# to have an easier time managing them.
|
|
||||||
|
|
||||||
** Common Emacs and StumpWM settings :noexport:
|
|
||||||
Both Emacs and StumpWM work on the same principle of keychords
|
|
||||||
powering a function or command. With both of them I have a prefix key,
|
|
||||||
~SPC~ in the case of Emacs (or ~C-SPC~ when in insert-mode, see the
|
|
||||||
relevant config) and ~s-SPC~ in the case of StumpWM. That means I can
|
|
||||||
give them the same keychord following this, for instance ~w/~ to create
|
|
||||||
a new vertically split frame to the right of the current one.
|
|
||||||
|
|
||||||
All the keybinds will be presented in the form of tables, with on the
|
|
||||||
first column the keychord following the leader key, on the second
|
|
||||||
column the EmacsLisp function to be called, and on the third the
|
|
||||||
StumpWM command. If one of the ELisp or StumpWM case’s is empty, it
|
|
||||||
means there is no equivalence. If it’s ~nil~, then it means it is a
|
|
||||||
prefix key. The fourth column is for now reserved for Emacs’
|
|
||||||
which-key, so I can give it a better name. If its value is ~nil~, then
|
|
||||||
it should not show up. Hopefully this can be implemented someday in
|
|
||||||
StumpWM.
|
|
||||||
|
|
||||||
*** Generating Code :noexport:
|
|
||||||
**** Elisp
|
|
||||||
#+name: emacs-keybinds-gen
|
|
||||||
#+header: :var keymap=emacs-stumpwm-media-control
|
|
||||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src emacs-lisp :tangle no"
|
|
||||||
(mapconcat (lambda (keybind)
|
|
||||||
(let* ((keychord (replace-regexp-in-string (rx (or (seq line-start "~")
|
|
||||||
(seq "~" line-end)))
|
|
||||||
""
|
|
||||||
(car keybind)))
|
|
||||||
(function (replace-regexp-in-string (rx (or (seq line-start "~")
|
|
||||||
(seq "~" line-end)))
|
|
||||||
""
|
|
||||||
(nth 1 keybind)))
|
|
||||||
(which (nth 3 keybind)))
|
|
||||||
(format "\"%s\" %s"
|
|
||||||
keychord
|
|
||||||
(if (string= "nil" function)
|
|
||||||
(format "%S"
|
|
||||||
`(:ignore :which-key ,which))
|
|
||||||
(if (string= "" which)
|
|
||||||
(concat "#'" function)
|
|
||||||
(format "%S"
|
|
||||||
`'(,(intern function) :which-key ,which)))))))
|
|
||||||
(seq-filter (lambda (elem)
|
|
||||||
(not (string= "" (nth 1 elem))))
|
|
||||||
keymap)
|
|
||||||
"\n")
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: emacs-keybinds-gen
|
|
||||||
#+begin_src emacs-lisp :tangle no
|
|
||||||
"m" (:ignore :which-key "media")
|
|
||||||
"m«" #'emms-player-mpd-previous
|
|
||||||
"m»" #'emms-player-mpd-next
|
|
||||||
"ma" '(hydra-media/body :which-key "MPD add")
|
|
||||||
"mb" (:ignore :which-key "browse")
|
|
||||||
"mba" #'emms-browse-by-artist
|
|
||||||
"mbA" #'emms-browse-by-album
|
|
||||||
"mbg" #'emms-browse-by-genre
|
|
||||||
"mbp" #'emms-playlists-mode-go
|
|
||||||
"mbs" #'emms-smart-browse
|
|
||||||
"mby" #'emms-browse-by-year
|
|
||||||
"mc" #'emms-player-mpd-clear
|
|
||||||
"mp" #'emms-player-toggle-pause
|
|
||||||
"ms" #'emms-player-mpd-show
|
|
||||||
"mu" (:ignore :which-key "update")
|
|
||||||
"mum" #'emms-player-mpd-update-all
|
|
||||||
"muc" #'emms-cache-set-from-mpd-all
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: emacs-hydra-keybinds-gen
|
|
||||||
#+header: :var keymap=emacs-stumpwm-resize-frame
|
|
||||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src emacs-lisp :tangle no"
|
|
||||||
(mapconcat (lambda (keybind)
|
|
||||||
(let ((keychord (replace-regexp-in-string "^~\\|~$"
|
|
||||||
""
|
|
||||||
(car keybind)))
|
|
||||||
(function (replace-regexp-in-string "^~\\|~$"
|
|
||||||
""
|
|
||||||
(nth 1 keybind)))
|
|
||||||
(which (nth 3 keybind)))
|
|
||||||
(format "%S" (if (string= "" which)
|
|
||||||
`(,keychord ,(intern function))
|
|
||||||
`(,keychord ,(intern function) ,which)))))
|
|
||||||
keymap
|
|
||||||
"\n")
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: emacs-hydra-keybinds-gen
|
|
||||||
#+begin_src emacs-lisp :tangle no
|
|
||||||
("c" shrink-window-horizontally)
|
|
||||||
("t" enlarge-window)
|
|
||||||
("s" shrink-window)
|
|
||||||
("r" enlarge-window-horizontally)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
**** Lisp
|
|
||||||
#+name: stumpwm-filter-keybinds
|
|
||||||
#+begin_src emacs-lisp :exports none :tangle no
|
|
||||||
(let ((no-tilde (lambda (string)
|
|
||||||
(replace-regexp-in-string "^~\\|~$" "" string))))
|
|
||||||
(seq-filter (lambda (elem)
|
|
||||||
(= 1 (length (car elem))))
|
|
||||||
(mapcar (lambda (elem)
|
|
||||||
`(,(replace-regexp-in-string (format "^%s" prefix) "" (car elem))
|
|
||||||
.
|
|
||||||
,(cdr elem)))
|
|
||||||
(seq-filter (lambda (elem)
|
|
||||||
(and (not (string= "" (cdr elem)))
|
|
||||||
(not (string= prefix (car elem)))
|
|
||||||
(string-prefix-p prefix (car elem))))
|
|
||||||
(mapcar (lambda (elem)
|
|
||||||
(let ((keychord (apply no-tilde (list (car elem))))
|
|
||||||
(function (apply no-tilde (list (nth 2 elem)))))
|
|
||||||
`(,keychord . ,function)))
|
|
||||||
keymap)))))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: stumpwm-keybinds-gen
|
|
||||||
#+header: :var keymap=emacs-stumpwm-media-control keymap-name="my-mpd-add-map" prefix="m"
|
|
||||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src lisp :tangle no" :noweb yes
|
|
||||||
(require 'seq)
|
|
||||||
(format "(defvar *%s*
|
|
||||||
(let %S
|
|
||||||
%s
|
|
||||||
m))"
|
|
||||||
keymap-name
|
|
||||||
`((m (make-sparse-keymap)))
|
|
||||||
(mapconcat (lambda (keybind)
|
|
||||||
(let ((keychord (replace-regexp-in-string (format "^%s" prefix)
|
|
||||||
""
|
|
||||||
(car keybind)))
|
|
||||||
(function (cdr keybind)))
|
|
||||||
(format "%S" `(define-key m (kbd ,keychord) ,function))))
|
|
||||||
<<stumpwm-filter-keybinds>>
|
|
||||||
"\n "))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: stumpwm-keybinds-gen
|
|
||||||
#+begin_src lisp :tangle no
|
|
||||||
(defvar *my-mpd-add-map*
|
|
||||||
(let ((m (make-sparse-keymap)))
|
|
||||||
(define-key m (kbd ".") "media-interactive")
|
|
||||||
(define-key m (kbd "«") "mpd-prev")
|
|
||||||
(define-key m (kbd "»") "mpd-next")
|
|
||||||
(define-key m (kbd "a") "'*my-mpd-add-keymap*")
|
|
||||||
(define-key m (kbd "b") "'*my-mpd-browse-keymap*")
|
|
||||||
(define-key m (kbd "c") "mpd-clear")
|
|
||||||
(define-key m (kbd "p") "mpd-toggle-pause")
|
|
||||||
m))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: stumpwm-interactive-keybinds-gen
|
|
||||||
#+header: :var keymap=emacs-stumpwm-resize-frame prefix=""
|
|
||||||
#+header: :wrap "src lisp :exports none"
|
|
||||||
#+begin_src emacs-lisp :noweb yes
|
|
||||||
(format "(%s)"
|
|
||||||
(mapconcat (lambda (keybind)
|
|
||||||
(let ((keychord (car keybind))
|
|
||||||
(function (cdr keybind)))
|
|
||||||
(format "%S" `((kbd ,keychord) ,function))))
|
|
||||||
<<stumpwm-filter-keybinds>>
|
|
||||||
"\n "))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: stumpwm-interactive-keybinds-gen
|
|
||||||
#+begin_src lisp :exports none
|
|
||||||
(((kbd "c") "resize-direction left")
|
|
||||||
((kbd "t") "resize-direction down")
|
|
||||||
((kbd "s") "resize-direction up")
|
|
||||||
((kbd "r") "resize-direction right"))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: stumpwm-interactive-gen
|
|
||||||
#+header: :var keymap=emacs-stumpwm-resize-frame keymap-name="my-mpd-add-map" prefix=""
|
|
||||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src lisp :tangle no"
|
|
||||||
(format "%S"
|
|
||||||
`(define-interactive-keymap ,(intern keymap-name)
|
|
||||||
(:exit-on '((kbd "RET")
|
|
||||||
(kbd "ESC")
|
|
||||||
(kbd "C-g")
|
|
||||||
(kbd "q")))
|
|
||||||
,@
|
|
||||||
<<stumpwm-interactive-keybinds-gen>>
|
|
||||||
))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: stumpwm-interactive-gen
|
|
||||||
#+begin_src lisp :tangle no
|
|
||||||
(define-interactive-keymap my-mpd-add-map (:exit-on '((kbd "RET") (kbd "ESC") (kbd "C-g") (kbd "q"))) ((kbd "c") "resize-direction left" (kbd "t") "resize-direction down" (kbd "s") "resize-direction up" (kbd "r") "resize-direction right"))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Frames Management
|
|
||||||
In StumpWM, I’ll consider my various windows the same as Emacs’
|
|
||||||
buffers.
|
|
||||||
#+name: emacs-stumpwm-frames-management
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+---------------------------+-------------------------+-----------|
|
|
||||||
| ~b~ | ~nil~ | ~'*my-buffers-keymap*~ | buffers |
|
|
||||||
| ~bb~ | ~buflers-switch-buffer~ | ~windowlist~ | |
|
|
||||||
| ~bB~ | ~bury-buffer~ | | |
|
|
||||||
| ~bd~ | ~kill-this-buffer~ | ~delete-window~ | |
|
|
||||||
| ~bD~ | ~kill-buffer~ | ~window-window-and-frame~ | |
|
|
||||||
| ~bh~ | ~dashboard-refresh-buffer~ | | |
|
|
||||||
| ~bk~ | | ~kill-window~ | |
|
|
||||||
| ~bl~ | ~bufler~ | | |
|
|
||||||
| ~bm~ | ~switch-to-messages-buffer~ | | |
|
|
||||||
| ~bn~ | ~evil-next-buffer~ | ~next~ | |
|
|
||||||
| ~bp~ | ~evil-prev-buffer~ | ~prev~ | |
|
|
||||||
| ~br~ | ~counsel-buffer-or-recentf~ | | |
|
|
||||||
| ~bs~ | ~switch-to-scratch-buffer~ | | |
|
|
||||||
|
|
||||||
EmacsLisp code:
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(phundrak/leader-key
|
|
||||||
<<emacs-keybinds-gen(keymap=emacs-stumpwm-frames-management)>>
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
StumpWM’s Lisp code:
|
|
||||||
#+begin_src lisp
|
|
||||||
<<stumpwm-keybinds-gen(keymap=emacs-stumpwm-frames-management, keymap-name="my-buffers-keymap", prefix="b")>>
|
|
||||||
(define-key *root-map (kbd "b") '*my-buffers-keymap*)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Window Management
|
|
||||||
The following allows to have an interactive keymap for resizing the
|
|
||||||
current frame. In Emacs, it will be translated as a hydra while in
|
|
||||||
StumpWM it will be an interactive keymap.
|
|
||||||
#+name: emacs-stumpwm-resize-frame
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+-----------------------------+------------------------+-----------|
|
|
||||||
| ~c~ | ~shrink-window-horizontally~ | ~resize-direction left~ | |
|
|
||||||
| ~t~ | ~enlarge-window~ | ~resize-direction down~ | |
|
|
||||||
| ~s~ | ~shrink-window~ | ~resize-direction up~ | |
|
|
||||||
| ~r~ | ~enlarge-window-horizontally~ | ~resize-direction right~ | |
|
|
||||||
|
|
||||||
This translates into the following hydra in EmacsLisp:
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(defhydra windows-adjust-size ()
|
|
||||||
"
|
|
||||||
^Zoom^ ^Other
|
|
||||||
^^^^^^^-----------------------------------------
|
|
||||||
[_t_/_s_] shrink/enlarge vertically [_q_] quit
|
|
||||||
[_c_/_r_] shrink/enlarge horizontally
|
|
||||||
"
|
|
||||||
<<emacs-hydra-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
|
|
||||||
("q" nil :exit t))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
While the following Lisp code is used with StumpWM.
|
|
||||||
#+begin_src lisp
|
|
||||||
(define-interactive-keymap (iresize tile-group) (:on-enter #'setup-iresize
|
|
||||||
:on-exit #'resize-unhide
|
|
||||||
:abort-if #'abort-resize-p
|
|
||||||
:exit-on '((kbd "RET")
|
|
||||||
(kbd "ESC")
|
|
||||||
(kbd "C-g")
|
|
||||||
(kbd "q")))
|
|
||||||
<<stumpwm-interactive-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Below you will find my window management keybinds.
|
|
||||||
#+name: emacs-stump-window-management
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+-------------------------------+--------------------------+------------------|
|
|
||||||
| ~w~ | ~nil~ | ~'*my-windows-keymap*~ | windows |
|
|
||||||
| ~w.~ | ~windows-adjust-size/body~ | ~iresize~ | resize windows |
|
|
||||||
| ~w-~ | ~split-window-below-and-focus~ | ~vsplit-and-focus~ | |
|
|
||||||
| ~w+~ | | ~balance-frames~ | |
|
|
||||||
| ~wv~ | ~split-window-below~ | ~vsplit~ | |
|
|
||||||
| ~wV~ | | ~vsplit-equally~ | |
|
|
||||||
| ~w/~ | ~split-window-right-and-focus~ | ~hsplit-and-focus~ | |
|
|
||||||
| ~wh~ | ~split-window-right~ | ~hsplit~ | |
|
|
||||||
| ~wH~ | | ~hsplit-equally~ | |
|
|
||||||
| ~wc~ | ~evil-window-left~ | ~move-focus left~ | |
|
|
||||||
| ~wt~ | ~evil-window-down~ | ~move-focus down~ | |
|
|
||||||
| ~ws~ | ~evil-window-up~ | ~move-focus up~ | |
|
|
||||||
| ~wr~ | ~evil-window-right~ | ~move-focus right~ | |
|
|
||||||
| ~wC~ | | ~move-window left~ | |
|
|
||||||
| ~wT~ | | ~move-window down~ | |
|
|
||||||
| ~wS~ | | ~move-window up~ | |
|
|
||||||
| ~wR~ | | ~move-window right~ | |
|
|
||||||
| ~w C-c~ | | ~exchange-direction right~ | |
|
|
||||||
| ~w C-s~ | | ~exchange-direction down~ | |
|
|
||||||
| ~w C-t~ | | ~exchange-direction up~ | |
|
|
||||||
| ~w C-r~ | | ~exchange-direction right~ | |
|
|
||||||
| ~wb~ | ~kill-buffer-and-delete-window~ | | |
|
|
||||||
| ~we~ | ~winum-select-window-by-number~ | ~expose~ | |
|
|
||||||
| ~wf~ | | ~fullscreen~ | |
|
|
||||||
| ~wF~ | | ~'*my-floating-keymap*~ | floating windows |
|
|
||||||
| ~wFf~ | | ~float-this~ | |
|
|
||||||
| ~wFF~ | | ~flatten-floats~ | |
|
|
||||||
| ~wFu~ | | ~unfloat-this~ | |
|
|
||||||
| ~wi~ | | ~info~ | |
|
|
||||||
| ~wd~ | ~delete-window~ | ~remove-split~ | |
|
|
||||||
| ~wD~ | ~delete-other-windows~ | ~only~ | |
|
|
||||||
| ~wm~ | | ~meta~ | |
|
|
||||||
| ~wo~ | ~other-window~ | ~other-window~ | |
|
|
||||||
| ~ws~ | | ~sibling~ | |
|
|
||||||
| ~wu~ | | ~next-urgent~ | |
|
|
||||||
| ~wU~ | | ~unmaximize~ | |
|
|
||||||
| ~ww~ | ~nil~ | | writeroom |
|
|
||||||
| ~ww.~ | ~writeroom-buffer-width/body~ | | |
|
|
||||||
| ~www~ | ~writeroom-mode~ | | |
|
|
||||||
|
|
||||||
*** Media Control
|
|
||||||
#+name: emacs-stumpwm-media-interactive
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+-------------------------------------------------------------+-----------------+-----------|
|
|
||||||
| ~c~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
|
|
||||||
| ~t~ | ~(shell-command-and-echo "mpc volume -2" "mpc volume" "mpc")~ | ~mpd-volume-down~ | |
|
|
||||||
| ~s~ | ~(shell-command-and-echo "mpc volume +2" "mpc volume" "mpc")~ | ~mpd-volume-up~ | |
|
|
||||||
| ~r~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
|
|
||||||
| ~s~ | ~emms-player-mpd-stop~ | ~mpd-stop~ | |
|
|
||||||
|
|
||||||
#+name: emacs-stumpwm-general-media
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+-------+--------------------------------------+----------------|
|
|
||||||
| ~c~ | | ~exec xbacklight -dec 2~ | backlight down |
|
|
||||||
| ~t~ | | ~exec amixer -q set Master 2%- unmute~ | volume down |
|
|
||||||
| ~s~ | | ~exec amixer -q set Master 2%+ unmute~ | volume up |
|
|
||||||
| ~r~ | | ~exec xbacklight -inc 2~ | backlight up |
|
|
||||||
| ~m~ | | ~exec amixer -q set Master 1+ toggle~ | toggle mute |
|
|
||||||
|
|
||||||
#+name: emacs-stumpwm-media-control
|
|
||||||
| Keychord | Emacs | StumpWM | which-key |
|
|
||||||
|----------+-----------------------------+---------------------------+-----------|
|
|
||||||
| ~m~ | ~nil~ | ~'*my-media-keymap*~ | media |
|
|
||||||
| ~m.~ | | ~media-interactive~ | |
|
|
||||||
| ~m«~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
|
|
||||||
| ~m»~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
|
|
||||||
| ~ma~ | ~hydra-media/body~ | ~'*my-mpd-add-keymap*~ | MPD add |
|
|
||||||
| ~maa~ | | ~mpd-serach-and-add-artist~ | |
|
|
||||||
| ~maA~ | | ~mpd-serach-and-add-album~ | |
|
|
||||||
| ~maf~ | | ~mpd-search-and-add-file~ | |
|
|
||||||
| ~maF~ | | ~mpd-add-file~ | |
|
|
||||||
| ~mag~ | | ~mpd-search-and-add-genre~ | |
|
|
||||||
| ~mat~ | | ~mpd-search-and-add-title~ | |
|
|
||||||
| ~mb~ | ~nil~ | ~'*my-mpd-browse-keymap*~ | browse |
|
|
||||||
| ~mba~ | ~emms-browse-by-artist~ | ~mpd-browse-artists~ | |
|
|
||||||
| ~mbA~ | ~emms-browse-by-album~ | ~mpd-browse-albums~ | |
|
|
||||||
| ~mbg~ | ~emms-browse-by-genre~ | ~mpd-browse-genres~ | |
|
|
||||||
| ~mbp~ | ~emms-playlists-mode-go~ | ~mpd-browse-playlist~ | |
|
|
||||||
| ~mbs~ | ~emms-smart-browse~ | | |
|
|
||||||
| ~mbt~ | | ~mpd-browse-tracks~ | |
|
|
||||||
| ~mby~ | ~emms-browse-by-year~ | | |
|
|
||||||
| ~mc~ | ~emms-player-mpd-clear~ | ~mpd-clear~ | |
|
|
||||||
| ~mp~ | ~emms-player-toggle-pause~ | ~mpd-toggle-pause~ | |
|
|
||||||
| ~ms~ | ~emms-player-mpd-show~ | | |
|
|
||||||
| ~mu~ | ~nil~ | | update |
|
|
||||||
| ~mum~ | ~emms-player-mpd-update-all~ | | |
|
|
||||||
| ~muc~ | ~emms-cache-set-from-mpd-all~ | | |
|
|
||||||
|
|
||||||
** Theme and graphical tweaks
|
** Theme and graphical tweaks
|
||||||
*** GTK Settings
|
*** GTK Settings
|
||||||
**** GTK2
|
**** GTK2
|
||||||
@ -407,8 +48,8 @@ gtk-menu-popup-delay=0
|
|||||||
[Filechooser Settings]
|
[Filechooser Settings]
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
The first option alows me to open the file chooser in the current working
|
The first option allows me to open the file chooser in the current
|
||||||
directory:
|
working directory:
|
||||||
#+BEGIN_SRC conf-unix
|
#+BEGIN_SRC conf-unix
|
||||||
StartupMode=cwd
|
StartupMode=cwd
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -513,7 +154,8 @@ gtk-decoration-layout=
|
|||||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
|
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
|
||||||
:END:
|
:END:
|
||||||
The main body in my Xresources declaration is the declaration of my
|
The main body in my Xresources declaration is the declaration of my
|
||||||
color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]].
|
colour theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git
|
||||||
|
repository]].
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
#define nord0 #2E3440
|
#define nord0 #2E3440
|
||||||
#define nord1 #3B4252
|
#define nord1 #3B4252
|
||||||
|
@ -42,7 +42,7 @@ I sure don’t. Let’s tell Emacs.
|
|||||||
(setq-default sentence-end-double-space nil)
|
(setq-default sentence-end-double-space nil)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
There is a minor mode in Emacs which allows to have a finer way of
|
There is a minor mode in Emacs which allows having a finer way of
|
||||||
jumping from word to word: ~global-subword-mode~. It detects if what
|
jumping from word to word: ~global-subword-mode~. It detects if what
|
||||||
Emacs usually considers a word can be understood as several words, as
|
Emacs usually considers a word can be understood as several words, as
|
||||||
in camelCase words, and allows us to jump words on this finer level.
|
in camelCase words, and allows us to jump words on this finer level.
|
||||||
@ -144,7 +144,7 @@ of indentation (Python, why…?). The minor-mode that enables that is
|
|||||||
*** Stay Clean, Emacs!
|
*** Stay Clean, Emacs!
|
||||||
As nice as Emacs is, it isn’t very polite or clean by default: open a
|
As nice as Emacs is, it isn’t very polite or clean by default: open a
|
||||||
file, and it will create backup files in the same directory. But then,
|
file, and it will create backup files in the same directory. But then,
|
||||||
when you open your directory with your favorite file manager and see
|
when you open your directory with your favourite file manager and see
|
||||||
almost all of your files duplicated with a =~= appended to the filename,
|
almost all of your files duplicated with a =~= appended to the filename,
|
||||||
it looks really uncomfortable! This is why I prefer to tell Emacs to
|
it looks really uncomfortable! This is why I prefer to tell Emacs to
|
||||||
keep its backup files to itself in a directory it only will access.
|
keep its backup files to itself in a directory it only will access.
|
||||||
@ -168,7 +168,7 @@ If we delete a file, we want it moved to the trash, not simply deleted.
|
|||||||
(setq delete-by-moving-to-trash t)
|
(setq delete-by-moving-to-trash t)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Finally, the scatch buffer always has some message at its beginning, I
|
Finally, the scratch buffer always has some message at its beginning, I
|
||||||
don’t want it!
|
don’t want it!
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq-default initial-scratch-message nil)
|
(setq-default initial-scratch-message nil)
|
||||||
@ -186,7 +186,8 @@ This will make Emacs ask us for either hitting the ~y~ key for “yes”, or
|
|||||||
the ~n~ key for “no”. Much more polite!
|
the ~n~ key for “no”. Much more polite!
|
||||||
|
|
||||||
It is also very impolite to keep a certain version of a file in its
|
It is also very impolite to keep a certain version of a file in its
|
||||||
buffer when said file has changed on disk. Let’s change this behavior:
|
buffer when said file has changed on disk. Let’s change this
|
||||||
|
behaviour:
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(global-auto-revert-mode 1)
|
(global-auto-revert-mode 1)
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -222,7 +223,7 @@ set it up correctly.
|
|||||||
** Visual Configuration
|
** Visual Configuration
|
||||||
The first visual setting in this section will activate the visible
|
The first visual setting in this section will activate the visible
|
||||||
bell. What it does is I get a visual feedback each time I do something
|
bell. What it does is I get a visual feedback each time I do something
|
||||||
Emacs doesn’t agree with, like tring to go up a line when I’m already
|
Emacs doesn’t agree with, like trying to go up a line when I’m already
|
||||||
at the top of the buffer.
|
at the top of the buffer.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq visible-bell t)
|
(setq visible-bell t)
|
||||||
@ -346,9 +347,9 @@ to the one ~setq~ uses?
|
|||||||
"Bind each custom variable FORM to the value of its VAL.
|
"Bind each custom variable FORM to the value of its VAL.
|
||||||
|
|
||||||
FORMS is a list of pairs of values [FORM VAL].
|
FORMS is a list of pairs of values [FORM VAL].
|
||||||
`customize-set-variable' is called sequentially on each pairs
|
`customize-set-variable' is called sequentially on each pair
|
||||||
contained in FORMS. This means `csetq' has a similar behaviour as
|
contained in FORMS. This means `csetq' has a similar behaviour as
|
||||||
`setq': each VAL expression are evaluated sequentially, i.e. the
|
`setq': each VAL expression is evaluated sequentially, i.e. the
|
||||||
first VAL is evaluated before the second, and so on. This means
|
first VAL is evaluated before the second, and so on. This means
|
||||||
the value of the first FORM can be used to set the second FORM.
|
the value of the first FORM can be used to set the second FORM.
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ it as.
|
|||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(defun self-screenshot (&optional type)
|
(defun self-screenshot (&optional type)
|
||||||
"Save a screenshot of type TYPE of the current Emacs frame.
|
"Save a screenshot of type TYPE of the current Emacs frame.
|
||||||
As shown by the function `', type can weild the value `svg',
|
As shown by the function `', type can wield the value `svg',
|
||||||
`png', `pdf'.
|
`png', `pdf'.
|
||||||
|
|
||||||
This function will output in /tmp a file beginning with \"Emacs\"
|
This function will output in /tmp a file beginning with \"Emacs\"
|
||||||
|
@ -18,7 +18,7 @@ easily add new packages and configure them, such as ~package!~, ~after!~,
|
|||||||
and others. But ultimately, I wanted to have a system I designed
|
and others. But ultimately, I wanted to have a system I designed
|
||||||
entirely, with the keybinds I want, the packages I want.
|
entirely, with the keybinds I want, the packages I want.
|
||||||
|
|
||||||
Aso, why Emacs? You know this famous quote:
|
Also, why Emacs? You know this famous quote:
|
||||||
#+begin_quote
|
#+begin_quote
|
||||||
Emacs is a great operating system, it just lacks a good text editor.
|
Emacs is a great operating system, it just lacks a good text editor.
|
||||||
#+end_quote
|
#+end_quote
|
||||||
|
@ -160,7 +160,7 @@ additional code compared to most people due to the bépo layout.
|
|||||||
reason is it doesn’t create a linear undo/redo history, but rather a
|
reason is it doesn’t create a linear undo/redo history, but rather a
|
||||||
complete tree you can navigate to see your complete editing history.
|
complete tree you can navigate to see your complete editing history.
|
||||||
One of the two obvious things to do are to tell Emacs to save all its
|
One of the two obvious things to do are to tell Emacs to save all its
|
||||||
undo history fies in a dedicated directory, otherwise we’d risk
|
undo history files in a dedicated directory, otherwise we’d risk
|
||||||
littering all of our directories. The second thing is to simply
|
littering all of our directories. The second thing is to simply
|
||||||
globally enable its mode.
|
globally enable its mode.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -185,7 +185,7 @@ globally enable its mode.
|
|||||||
undo-outer-limit (* 128 1024 1024)))
|
undo-outer-limit (* 128 1024 1024)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
An interesting behavior from DoomEmacs is to compress the history
|
An interesting behaviour from DoomEmacs is to compress the history
|
||||||
files with ~zstd~ when it is present on the system. Not only do we enjoy
|
files with ~zstd~ when it is present on the system. Not only do we enjoy
|
||||||
much smaller files (according to DoomEmacs, we get something like 80%
|
much smaller files (according to DoomEmacs, we get something like 80%
|
||||||
file savings), Emacs can load them much faster than the regular files.
|
file savings), Emacs can load them much faster than the regular files.
|
||||||
|
@ -69,7 +69,7 @@ host. This username is retrieved through the following variable:
|
|||||||
The huge advantage of straight is it clones through git the packages
|
The huge advantage of straight is it clones through git the packages
|
||||||
it installs. This means development can be done directly on the
|
it installs. This means development can be done directly on the
|
||||||
downloaded package. However, Forge (a Magit extension for interacting
|
downloaded package. However, Forge (a Magit extension for interacting
|
||||||
with websites such as GitHub, Gitlab, and such) interacts by default
|
with websites such as GitHub, GitLab, and such) interacts by default
|
||||||
with the forge described by the =origin= remote, which isn’t necessarily
|
with the forge described by the =origin= remote, which isn’t necessarily
|
||||||
the one I want Forge to interact with by default. Therefore,
|
the one I want Forge to interact with by default. Therefore,
|
||||||
=straight.el= will name all default remotes =straight= to avoid any name
|
=straight.el= will name all default remotes =straight= to avoid any name
|
||||||
|
@ -161,7 +161,7 @@ database is to be stored.
|
|||||||
|
|
||||||
I don’t want YouTube videos to be open with my web browser when I
|
I don’t want YouTube videos to be open with my web browser when I
|
||||||
invoke ~elfeed-show-visit~, so I’ll advise this function to make it
|
invoke ~elfeed-show-visit~, so I’ll advise this function to make it
|
||||||
possible to modify the behavior of said function. Oh, and I already
|
possible to modify the behaviour of said function. Oh, and I already
|
||||||
made [[file:../../scripts.md#ytplay][a neat package]] for playing YouTube videos and friends through
|
made [[file:../../scripts.md#ytplay][a neat package]] for playing YouTube videos and friends through
|
||||||
[[https://ytdl-org.github.io/youtube-dl/][youtube-dl]] or its superior fork [[https://github.com/yt-dlp/yt-dlp][yt-dlp]] in mpv.
|
[[https://ytdl-org.github.io/youtube-dl/][youtube-dl]] or its superior fork [[https://github.com/yt-dlp/yt-dlp][yt-dlp]] in mpv.
|
||||||
|
|
||||||
@ -526,7 +526,7 @@ events shared with me on my personal mailbox. The answer is actually
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
I’ll just configure a couple of things regarding these events, namely
|
I’ll just configure a couple of things regarding these events, namely
|
||||||
converting them to Orgmode and add them to my =~/org/notes.org= file,
|
converting them to org-mode and add them to my =~/org/notes.org= file,
|
||||||
and delete the email once I answered to the event.
|
and delete the email once I answered to the event.
|
||||||
#+name: mu4e-ical-config
|
#+name: mu4e-ical-config
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -639,7 +639,7 @@ Next I need an inbox dedicated to the association I’m part of.
|
|||||||
As for the Emacs-doctor list, I need to match both the current, modern
|
As for the Emacs-doctor list, I need to match both the current, modern
|
||||||
mailing list address but also its old address. The same applies for
|
mailing list address but also its old address. The same applies for
|
||||||
the emacs-devel mailing list as well as GitHub emails related to my
|
the emacs-devel mailing list as well as GitHub emails related to my
|
||||||
package ~eshell-info-banner.el~ (*see here*). Here are the addresses to
|
package ~eshell-info-banner.el~. Here are the addresses to
|
||||||
match:
|
match:
|
||||||
|
|
||||||
# Insert #Packages-Configuration-Emacs-built-ins-Eshell-Visual-configuratione7c2fl6184j0 equivalent in *see here*
|
# Insert #Packages-Configuration-Emacs-built-ins-Eshell-Visual-configuratione7c2fl6184j0 equivalent in *see here*
|
||||||
@ -777,7 +777,7 @@ We can finally define our bookmarks! The code reads as follows:
|
|||||||
Sometimes, bookmarks are a bit too restrictive when I want to search
|
Sometimes, bookmarks are a bit too restrictive when I want to search
|
||||||
for stuff. Simply jumping to a mail directory, or maildir, is more
|
for stuff. Simply jumping to a mail directory, or maildir, is more
|
||||||
than enough. In mu4e, with my current setup, I can jump to any maildir
|
than enough. In mu4e, with my current setup, I can jump to any maildir
|
||||||
with the shortcut ~Jo~ in normal-mode, and I just need to chose in a
|
with the shortcut ~Jo~ in normal-mode, and I just need to choose in a
|
||||||
list the maildir I want to jump to. But it can be faster.
|
list the maildir I want to jump to. But it can be faster.
|
||||||
|
|
||||||
With this piece of code, I can simply jump to my inbox maildir with
|
With this piece of code, I can simply jump to my inbox maildir with
|
||||||
@ -1303,8 +1303,8 @@ reader?
|
|||||||
** PDF Tools
|
** PDF Tools
|
||||||
~pdf-tools~ enables PDF support for Emacs, much better than its built-in
|
~pdf-tools~ enables PDF support for Emacs, much better than its built-in
|
||||||
support with DocView. Aside from the classical settings such as
|
support with DocView. Aside from the classical settings such as
|
||||||
keybinds, I also enable the midnight colors by default; think of it as
|
keybinds, I also enable the midnight colours by default; think of it
|
||||||
an equivalent of Zathura’s recolor feature which kind of enables a
|
as an equivalent of Zathura’s recolour feature which kind of enables a
|
||||||
dark mode for PDFs.
|
dark mode for PDFs.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package pdf-tools
|
(use-package pdf-tools
|
||||||
@ -1508,7 +1508,7 @@ deactivate `magit-todos-mode', otherwise enable it."
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Forge
|
*** Forge
|
||||||
Forge acts as an interface for GitHub, Gitlab, and Bitbucket inside
|
Forge acts as an interface for GitHub, GitLab, and Bitbucket inside
|
||||||
Magit. A lot of possibilities are present, you can read issues and
|
Magit. A lot of possibilities are present, you can read issues and
|
||||||
pull requests, create them, and fork projects among other things.
|
pull requests, create them, and fork projects among other things.
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ major-mode.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
On the other hand, ~company-box~ is a Company front-end which offers
|
On the other hand, ~company-box~ is a Company front-end which offers
|
||||||
colors, icons, documentation and so on. Very nice.
|
colours, icons, documentation and so on. Very nice.
|
||||||
|
|
||||||
Declaring all the icons for the variable
|
Declaring all the icons for the variable
|
||||||
~company-box-icons-all-the-icons~ is quite verbose in Elisp, so I do it
|
~company-box-icons-all-the-icons~ is quite verbose in Elisp, so I do it
|
||||||
@ -207,7 +207,7 @@ I warned you I’d use too much ~all-the-icons~, I did!
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
A buffer popping at the bottom of the screen is nice and all, but have
|
A buffer popping at the bottom of the screen is nice and all, but have
|
||||||
you considered a floating buffer in the center of your frame?
|
you considered a floating buffer in the centre of your frame?
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package ivy-posframe
|
(use-package ivy-posframe
|
||||||
:defer t
|
:defer t
|
||||||
|
@ -134,7 +134,7 @@ behavior.
|
|||||||
~smartparens~ is a package similar to ~parinfer~, but while the latter is
|
~smartparens~ is a package similar to ~parinfer~, but while the latter is
|
||||||
more specialized for Lisp dialects, ~smartparens~ works better with
|
more specialized for Lisp dialects, ~smartparens~ works better with
|
||||||
other programming languages that still uses parenthesis, but not as
|
other programming languages that still uses parenthesis, but not as
|
||||||
much as Lisp dialects; think for example C, C++, Rust, Javascript, and
|
much as Lisp dialects; think for example C, C++, Rust, JavaScript, and
|
||||||
so on.
|
so on.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package smartparens
|
(use-package smartparens
|
||||||
@ -159,7 +159,7 @@ escaping your strings!
|
|||||||
** Writeroom
|
** Writeroom
|
||||||
On the other hand, ~writeroom~ allows the user to enter a
|
On the other hand, ~writeroom~ allows the user to enter a
|
||||||
distraction-free mode of Emacs, and I like that! But the default width
|
distraction-free mode of Emacs, and I like that! But the default width
|
||||||
is a bit too small for me, and I prefer not to go fullscren.
|
is a bit too small for me, and I prefer not to go full-screen.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package writeroom-mode
|
(use-package writeroom-mode
|
||||||
:defer t
|
:defer t
|
||||||
|
@ -11,7 +11,7 @@ Dired is Emacs’ built-in file manager. It’s really great, and replaces
|
|||||||
any graphical file manager for me most of the time because:
|
any graphical file manager for me most of the time because:
|
||||||
- I am not limited to /x/ tabs or panes
|
- I am not limited to /x/ tabs or panes
|
||||||
- All actions can be done with keybindings
|
- All actions can be done with keybindings
|
||||||
- I get a consistent behavior between Dired and Emacs, since it’s the
|
- I get a consistent behaviour between Dired and Emacs, since it’s the
|
||||||
same thing.
|
same thing.
|
||||||
I used to have an extensive configuration for Dired with a couple of
|
I used to have an extensive configuration for Dired with a couple of
|
||||||
additional packages to make it more usable. Dirvish rendered that
|
additional packages to make it more usable. Dirvish rendered that
|
||||||
@ -97,18 +97,19 @@ otherwise some commands won’t work.
|
|||||||
" "))
|
" "))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
However, it is possible to instead use ~exa~ when it is available.
|
However, it is possible to instead use =eza= when it is available (it’s
|
||||||
Instead of making Emacs’ main thread to the file listing in a
|
a replacement to the unmaintained =exa=). Instead of making Emacs’ main
|
||||||
directory, we offload it to an external thread.
|
thread to the file listing in a directory, we offload it to an
|
||||||
|
external thread.
|
||||||
#+name: dirvish-exa-offload
|
#+name: dirvish-exa-offload
|
||||||
#+begin_src emacs-lisp :tangle no
|
#+begin_src emacs-lisp :tangle no
|
||||||
(dirvish-define-preview exa (file)
|
(dirvish-define-preview eza (file)
|
||||||
"Use `exa' to generate directory preview."
|
"Use `eza' to generate directory preview."
|
||||||
:require ("exa")
|
:require ("eza")
|
||||||
(when (file-directory-p file)
|
(when (file-directory-p file)
|
||||||
`(shell . ("exa" "--color=always" "-al" ,file))))
|
`(shell . ("eza" "--color=always" "-al" ,file))))
|
||||||
|
|
||||||
(add-to-list 'dirvish-preview-dispatchers 'exa)
|
(add-to-list 'dirvish-preview-dispatchers 'eza)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Finally, some directories need to be set for Dired to store various
|
Finally, some directories need to be set for Dired to store various
|
||||||
@ -243,9 +244,9 @@ window.
|
|||||||
(defalias 'openo #'find-file-other-window)
|
(defalias 'openo #'find-file-other-window)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The default behavior of ~eshell/clear~ is not great at all, although it
|
The default behaviour of ~eshell/clear~ is not great at all, although it
|
||||||
clears the screen it also scrolls all the way down. Therefore, let’s
|
clears the screen it also scrolls all the way down. Therefore, let’s
|
||||||
alias it to ~eshell/clear-scrollback~ which has the correct behavior.
|
alias it to ~eshell/clear-scrollback~ which has the correct behaviour.
|
||||||
#+name: eshell-alias-clear
|
#+name: eshell-alias-clear
|
||||||
#+begin_src emacs-lisp :tangle no
|
#+begin_src emacs-lisp :tangle no
|
||||||
(defalias 'eshell/clear #'eshell/clear-scrollback)
|
(defalias 'eshell/clear #'eshell/clear-scrollback)
|
||||||
@ -348,7 +349,7 @@ something more standard than fish:
|
|||||||
I like to have at quick glance some information about my machine when
|
I like to have at quick glance some information about my machine when
|
||||||
I fire up a terminal. I haven’t found anything that does that the way
|
I fire up a terminal. I haven’t found anything that does that the way
|
||||||
I like it, so [[https://github.com/Phundrak/eshell-info-banner.el][I’ve written a package]]! It’s actually available on
|
I like it, so [[https://github.com/Phundrak/eshell-info-banner.el][I’ve written a package]]! It’s actually available on
|
||||||
MELPA, but since I’m the main dev of this package, I’ll keep track of
|
Melpa, but since I’m the main dev of this package, I’ll keep track of
|
||||||
the git repository.
|
the git repository.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package eshell-info-banner
|
(use-package eshell-info-banner
|
||||||
@ -370,7 +371,7 @@ the git repository.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Another feature I like is fish-like syntax highlight, which brings
|
Another feature I like is fish-like syntax highlight, which brings
|
||||||
some more colors to Eshell.
|
some more colours to Eshell.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package eshell-syntax-highlighting
|
(use-package eshell-syntax-highlighting
|
||||||
:after (esh-mode eshell)
|
:after (esh-mode eshell)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* EXWM
|
* EXWM
|
||||||
So, I’m finally slowly getting back to EXWM. I tried it a couple of
|
So, I’m finally slowly getting back to EXWM. I tried it a couple of
|
||||||
years ago, but that was with the SpacemacsOS layer on Spacemacs, on a
|
years ago, but that was with the SpacemacsOS layer on Spacemacs, on a
|
||||||
laptop which got accidentaly formatted before I could save my config
|
laptop which got accidentally formatted before I could save my config
|
||||||
and all… So it got me some time to come back. I’m still a bit worried
|
and all… So it got me some time to come back. I’m still a bit worried
|
||||||
about Emacs being single threaded, so if I get one blocking function
|
about Emacs being single threaded, so if I get one blocking function
|
||||||
blocking Emacs, my whole desktop will hang, but for now I haven’t had
|
blocking Emacs, my whole desktop will hang, but for now I haven’t had
|
||||||
@ -62,14 +62,14 @@ exec emacs --with-exwm
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** EXWM itself
|
** EXWM itself
|
||||||
Now we come to the plat de résistance. Like with ~xelb~, I’m using its
|
Now we come to the plat de resistance. Like with ~xelb~, I’m using its
|
||||||
Git source to install it to make sure I get the right version --- the
|
Git source to install it to make sure I get the right version --- the
|
||||||
version available on the GNU ELPA is from the same source, true, but I
|
version available on the GNU ELPA is from the same source, true, but I
|
||||||
don’t know at which rate it is updated. And more packages down the
|
don’t know at which rate it is updated. And more packages down the
|
||||||
line will depend on this Git repository, so I might as well just clone
|
line will depend on this Git repository, so I might as well just clone
|
||||||
it right now.
|
it right now.
|
||||||
|
|
||||||
As you can see, I added in the ~:config~ secion to two hooks functions
|
As you can see, I added in the ~:config~ section to two hooks functions
|
||||||
that rename buffers accurately. While the average X window will simply
|
that rename buffers accurately. While the average X window will simply
|
||||||
get the name of the current X window, I want Firefox and Qutebrowser
|
get the name of the current X window, I want Firefox and Qutebrowser
|
||||||
to be prefixed with the name of the browser. Actually, all these will
|
to be prefixed with the name of the browser. Actually, all these will
|
||||||
@ -123,7 +123,7 @@ want. However, when I exit one, I want to default back to normal-mode.
|
|||||||
(advice-add #'exwm-input-release-keyboard :after (lambda (&optional id) (evil-insert-state)))
|
(advice-add #'exwm-input-release-keyboard :after (lambda (&optional id) (evil-insert-state)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Secondly, I add ~i~, ~C-SPC~, and ~M-m~ as exwm prefix keys so they aren’t
|
Secondly, I add ~i~, ~C-SPC~, and ~M-m~ as exwm prefix keys, so they aren’t
|
||||||
sent directly to the X windows but caught by Emacs (and EXWM). I’ll
|
sent directly to the X windows but caught by Emacs (and EXWM). I’ll
|
||||||
use the ~i~ key in normal-mode to enter ~insert-mode~ and have Emacs
|
use the ~i~ key in normal-mode to enter ~insert-mode~ and have Emacs
|
||||||
release the keyboard so the X window can grab it. Initially, I had
|
release the keyboard so the X window can grab it. Initially, I had
|
||||||
@ -362,7 +362,7 @@ The complete configuration for the ~exwm~ package can be found below.
|
|||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(defun create-bluetooth-device (raw-name)
|
(defun create-bluetooth-device (raw-name)
|
||||||
"Create a bluetooth device cons from RAW NAME.
|
"Create a Bluetooth device cons from RAW NAME.
|
||||||
The cons will hold first the MAC address of the device, then its
|
The cons will hold first the MAC address of the device, then its
|
||||||
human-friendly name."
|
human-friendly name."
|
||||||
(let ((split-name (split-string raw-name " " t)))
|
(let ((split-name (split-string raw-name " " t)))
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
Bufler is a package that organises and lists buffers in a much better
|
Bufler is a package that organises and lists buffers in a much better
|
||||||
way than how they are usually sorted. You can easily and quickly find
|
way than how they are usually sorted. You can easily and quickly find
|
||||||
buffers by their group, not only by their name, and THIS is great
|
buffers by their group, not only by their name, and THIS is great
|
||||||
news! Also, no ~helm~ please! And for some reasons the keybindings are
|
news! Also, no ~helm~ please! And for some reason, the keybindings are
|
||||||
borked by default, so let’s redefine them, and let’s also rebind ~SPC~
|
borked by default, so let’s redefine them, and let’s also rebind ~SPC~
|
||||||
to ~p~ since it would conflict with my main ~general~ prefix.
|
to ~p~ since it would conflict with my main ~general~ prefix.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
@ -114,11 +114,11 @@ quickly find files across my filesystem.
|
|||||||
:host github
|
:host github
|
||||||
:repo "phundrak/quick-find-files.el"
|
:repo "phundrak/quick-find-files.el"
|
||||||
:build t)
|
:build t)
|
||||||
:config
|
:custom
|
||||||
(setq quick-find-files-program 'fd
|
(quick-find-files-program 'fd)
|
||||||
quick-find-files-dirs-and-exts '(("~/org" . "org")
|
(quick-find-files-dirs-and-exts '(("~/org" . "org")
|
||||||
("~/Documents/university" . "org"))
|
("~/Documents/university" . "org")))
|
||||||
quick-find-files-fd-additional-options "-L"))
|
(quick-find-files-fd-additional-options "-L"))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Keycast
|
** Keycast
|
||||||
@ -255,7 +255,7 @@ Moreover, inside Emacs?
|
|||||||
|
|
||||||
** Winum
|
** Winum
|
||||||
Winum allows Emacs to associate windows with a specific number and
|
Winum allows Emacs to associate windows with a specific number and
|
||||||
navigate through these windows by directly refering to their
|
navigate through these windows by directly referring to their
|
||||||
associated number! This allows for faster window configuration than
|
associated number! This allows for faster window configuration than
|
||||||
just going to the frame above, then left, left, and up.
|
just going to the frame above, then left, left, and up.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
@ -35,7 +35,7 @@ the ~citeproc~ package, a citation processor.
|
|||||||
:straight (:build t))
|
:straight (:build t))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Org is the main reason I am using Emacs. It is an extremely powerfu
|
Org is the main reason I am using Emacs. It is an extremely powerful
|
||||||
tool when you want to write anything that is not necessarily primarily
|
tool when you want to write anything that is not necessarily primarily
|
||||||
programming-related, though it absolutely can be! Org can be a
|
programming-related, though it absolutely can be! Org can be a
|
||||||
replacement for anything similar to LibreOffice Writer, LibreOffice
|
replacement for anything similar to LibreOffice Writer, LibreOffice
|
||||||
@ -488,7 +488,7 @@ The capture templates are set like so:
|
|||||||
** Custom functions
|
** Custom functions
|
||||||
*** Emphasize text
|
*** Emphasize text
|
||||||
Sometimes, I want to emphasize some text in my org-mode documents.
|
Sometimes, I want to emphasize some text in my org-mode documents.
|
||||||
It’s very possible to just go to the begining of the chosen text, add
|
It’s very possible to just go to the beginning of the chosen text, add
|
||||||
the marker, then go to the end of the text than needs emphasis and add
|
the marker, then go to the end of the text than needs emphasis and add
|
||||||
another marker, and I’m sure most people are fine with that. But I
|
another marker, and I’m sure most people are fine with that. But I
|
||||||
also like being able to select a region and hit a keybind to emphasize
|
also like being able to select a region and hit a keybind to emphasize
|
||||||
@ -574,7 +574,7 @@ the value `split-window-right', then it will be changed to
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Exporters
|
** Exporters
|
||||||
I want to disable by default behavior of ~^~ and ~_~ for only one
|
I want to disable by default behaviour of ~^~ and ~_~ for only one
|
||||||
character, making it compulsory to use instead ~^{}~ and ~_{}~
|
character, making it compulsory to use instead ~^{}~ and ~_{}~
|
||||||
respectively. This is due to my frequent usage of the underscore in my
|
respectively. This is due to my frequent usage of the underscore in my
|
||||||
org files as a regular character and not a markup one, especially when
|
org files as a regular character and not a markup one, especially when
|
||||||
@ -614,12 +614,6 @@ exported HTML. Let’s disable that since I never use it.
|
|||||||
(setq org-html-validation-link nil)
|
(setq org-html-validation-link nil)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
;; (use-package htmlize
|
|
||||||
;; :defer t
|
|
||||||
;; :straight (:build t))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
This package allows for live-previewing the HTML export of an org
|
This package allows for live-previewing the HTML export of an org
|
||||||
buffer in an XWidget Webkit browser window. But when testing it, it’s
|
buffer in an XWidget Webkit browser window. But when testing it, it’s
|
||||||
not great for large org files, I should keep its usage for smaller org
|
not great for large org files, I should keep its usage for smaller org
|
||||||
@ -700,11 +694,11 @@ coloring is ~engraved~.
|
|||||||
(setq org-latex-src-block-backend 'engraved)
|
(setq org-latex-src-block-backend 'engraved)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The default packages break my LaTeX exports: for some reasons, images
|
The default packages break my LaTeX exports: for some reason, images
|
||||||
are not loaded and exported in PDFs, so I needed to redifine the
|
are not loaded and exported in PDFs, so I needed to redefine the
|
||||||
default packages excluding the one that broke my exports; namely, I
|
default packages excluding the one that broke my exports; namely, I
|
||||||
need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some default
|
need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some
|
||||||
packages:
|
default packages:
|
||||||
- ~cleveref~ for better references to various elements.
|
- ~cleveref~ for better references to various elements.
|
||||||
- ~svg~ for inserting SVG files in PDF outputs
|
- ~svg~ for inserting SVG files in PDF outputs
|
||||||
- ~booktabs~ for nicer tables
|
- ~booktabs~ for nicer tables
|
||||||
@ -927,9 +921,9 @@ Finally, let’s make enabling and disabling stuff accessible:
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:emacs-lisp: :tangle no :exports code :results silent
|
:header-args:emacs-lisp: :tangle no :exports code :results silent
|
||||||
:END:
|
:END:
|
||||||
I currently have two custom formats for my Org-mode exports: one for general use
|
I currently have two custom formats for my Org-mode exports: one for
|
||||||
(initialy for my conlanging files, hence its ~conlang~ name), and one for beamer
|
general use (initially for my conlanging files, hence its ~conlang~
|
||||||
exports.
|
name), and one for beamer exports.
|
||||||
|
|
||||||
Below is the declaration of the ~conlang~ LaTeX class:
|
Below is the declaration of the ~conlang~ LaTeX class:
|
||||||
#+NAME: org-latex-class-conlang
|
#+NAME: org-latex-class-conlang
|
||||||
|
@ -64,9 +64,9 @@ it is.
|
|||||||
|
|
||||||
*** Databases
|
*** Databases
|
||||||
A really cool tool in Emacs for manipulating databases is ~emacsql~.
|
A really cool tool in Emacs for manipulating databases is ~emacsql~.
|
||||||
It’s able to manipulate Sqlite databases by default, but it’s also
|
It’s able to manipulate SQLite databases by default, but it’s also
|
||||||
possible to manipulate MariaDB and PostgreSQL databases by installing
|
possible to manipulate MariaDB and PostgreSQL databases by installing
|
||||||
additional packages. For now, I just need Sqlite and PostgreSQL
|
additional packages. For now, I just need SQLite and PostgreSQL
|
||||||
interfaces, so let’s install the relevant packages.
|
interfaces, so let’s install the relevant packages.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package emacsql-psql
|
(use-package emacsql-psql
|
||||||
@ -257,7 +257,7 @@ I also want all the visual enhancements LSP can provide.
|
|||||||
"r" #'lsp-ui-pook--select-next-file))
|
"r" #'lsp-ui-pook--select-next-file))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
And let’s enable some intergration with ~ivy~.
|
And let’s enable some integration with ~ivy~.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package lsp-ivy
|
(use-package lsp-ivy
|
||||||
:straight (:build t)
|
:straight (:build t)
|
||||||
@ -491,7 +491,7 @@ language [[http://www.gnuplot.info/][Gnuplot]]. Let’s make some beautiful grap
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Graphviz
|
*** Graphviz
|
||||||
[[https://graphviz.org/][Graphviz]], often known with ~dot~, allows to programatically create
|
[[https://graphviz.org/][Graphviz]], often known with ~dot~, allows to programmatically create
|
||||||
visual graphs and networks.
|
visual graphs and networks.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package graphviz-dot-mode
|
(use-package graphviz-dot-mode
|
||||||
@ -1243,7 +1243,7 @@ Access pydoc through counsel.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
This generates Python documentation that is meant to be compatible
|
This generates Python documentation that is meant to be compatible
|
||||||
with Sphinx, a documentation generaton for Python.
|
with Sphinx, a documentation generation for Python.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package sphinx-doc
|
(use-package sphinx-doc
|
||||||
:defer t
|
:defer t
|
||||||
@ -1402,7 +1402,7 @@ modifications.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Web mode is a sort of hybrid major mode that allows editing several
|
Web mode is a sort of hybrid major mode that allows editing several
|
||||||
languages in the same buffer, mainly HTML, CSS, and Javascript.
|
languages in the same buffer, mainly HTML, CSS, and JavaScript.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package web-mode
|
(use-package web-mode
|
||||||
:defer t
|
:defer t
|
||||||
@ -1540,7 +1540,7 @@ activate when I open ~.less~ files by default. Let’s fix that.
|
|||||||
**** Javascript
|
**** Javascript
|
||||||
:END:
|
:END:
|
||||||
~javascript-mode~ is meh at best, while ~rjsx-mode~ (Real JSX) is much
|
~javascript-mode~ is meh at best, while ~rjsx-mode~ (Real JSX) is much
|
||||||
better: it supports both Javascript and ~.jsx~ files for React and
|
better: it supports both JavaScript and ~.jsx~ files for React and
|
||||||
Next.JS.
|
Next.JS.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package rjsx-mode
|
(use-package rjsx-mode
|
||||||
@ -1577,7 +1577,7 @@ Next.JS.
|
|||||||
js2-idle-timer-delay 0.15))
|
js2-idle-timer-delay 0.15))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
~js2-refactor~ is an amazing tool for refactoring Javascript code. I
|
~js2-refactor~ is an amazing tool for refactoring JavaScript code. I
|
||||||
mean, [[https://www.youtube.com/watch?v=-7yMWD1wUu4][look at this]]! And the video is only from 2013, and it still
|
mean, [[https://www.youtube.com/watch?v=-7yMWD1wUu4][look at this]]! And the video is only from 2013, and it still
|
||||||
receives some commits!
|
receives some commits!
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -1589,8 +1589,8 @@ receives some commits!
|
|||||||
:hook (rjsx-mode . js2-refactor-mode))
|
:hook (rjsx-mode . js2-refactor-mode))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Which Emacser prefers the command line over Emacs itself? I don’t.
|
Is there any Emacser who prefers the command line over Emacs itself? I
|
||||||
Let’s interact with NPM through Emacs then.
|
don’t. Let’s interact with NPM through Emacs then.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package npm-transient
|
(use-package npm-transient
|
||||||
:defer t
|
:defer t
|
||||||
@ -1605,7 +1605,7 @@ Let’s interact with NPM through Emacs then.
|
|||||||
;; "n" #'npm-transient))
|
;; "n" #'npm-transient))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
And finally, here is a formatter for Javascript.
|
And finally, here is a formatter for JavaScript.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package prettier-js
|
(use-package prettier-js
|
||||||
:defer t
|
:defer t
|
||||||
@ -1618,7 +1618,7 @@ And finally, here is a formatter for Javascript.
|
|||||||
|
|
||||||
**** Typescript
|
**** Typescript
|
||||||
:END:
|
:END:
|
||||||
Typescript is a safer alternative to Javascript. Let’s install its major mode then.
|
Typescript is a safer alternative to JavaScript. Let’s install its major mode then.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package typescript-mode
|
(use-package typescript-mode
|
||||||
:defer t
|
:defer t
|
||||||
@ -1716,74 +1716,3 @@ ArchLinux, I can install it from the AUR, and my AUR helper is ~paru~.
|
|||||||
#+begin_src fish :results raw :wrap "src text" :exports code
|
#+begin_src fish :results raw :wrap "src text" :exports code
|
||||||
paru --skipreview --noconfirm -S zls-bin 2>&1
|
paru --skipreview --noconfirm -S zls-bin 2>&1
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
#+begin_src text
|
|
||||||
:: Resolving dependencies...
|
|
||||||
:: Calculating conflicts...
|
|
||||||
:: Calculating inner conflicts...
|
|
||||||
|
|
||||||
Aur (1) Old Version New Version Make Only
|
|
||||||
aur/zls-bin 0.10.0-1 No
|
|
||||||
|
|
||||||
:: Proceed with installation? [Y/n]:
|
|
||||||
|
|
||||||
:: Downloading PKGBUILDs...
|
|
||||||
PKGBUILDs up to date
|
|
||||||
fetching devel info...
|
|
||||||
==> Making package: zls-bin 0.10.0-1 (ven. 19 mai 2023 11:23:59)
|
|
||||||
==> Retrieving sources...
|
|
||||||
-> Downloading zls-LICENSE.txt...
|
|
||||||
% Total % Received % Xferd Average Speed Time Time Time Current
|
|
||||||
Dload Upload Total Spent Left Speed
|
|
||||||
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1091 100 1091 0 0 3596 0 --:--:-- --:--:-- --:--:-- 3600
|
|
||||||
-> Downloading zls-bin-0.10.0.tar.gz...
|
|
||||||
% Total % Received % Xferd Average Speed Time Time Time Current
|
|
||||||
Dload Upload Total Spent Left Speed
|
|
||||||
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
|
|
||||||
56 1477k 56 827k 0 0 1164k 0 0:00:01 --:--:-- 0:00:01 1164k
100 1477k 100 1477k 0 0 2012k 0 --:--:-- --:--:-- --:--:-- 27.5M
|
|
||||||
==> Validating source files with sha256sums...
|
|
||||||
zls-LICENSE.txt ... Passed
|
|
||||||
==> Validating source_x86_64 files with sha256sums...
|
|
||||||
zls-bin-0.10.0.tar.gz ... Passed
|
|
||||||
==> Making package: zls-bin 0.10.0-1 (ven. 19 mai 2023 11:24:02)
|
|
||||||
==> Checking runtime dependencies...
|
|
||||||
==> Checking buildtime dependencies...
|
|
||||||
==> Retrieving sources...
|
|
||||||
-> Found zls-LICENSE.txt
|
|
||||||
-> Found zls-bin-0.10.0.tar.gz
|
|
||||||
==> Validating source files with sha256sums...
|
|
||||||
zls-LICENSE.txt ... Passed
|
|
||||||
==> Validating source_x86_64 files with sha256sums...
|
|
||||||
zls-bin-0.10.0.tar.gz ... Passed
|
|
||||||
==> Removing existing $srcdir/ directory...
|
|
||||||
==> Extracting sources...
|
|
||||||
-> Extracting zls-bin-0.10.0.tar.gz with bsdtar
|
|
||||||
==> Sources are ready.
|
|
||||||
zls-bin-0.10.0-1: parsing pkg list...
|
|
||||||
:: zls-bin-0.10.0-1 is up to date -- skipping build
|
|
||||||
loading packages...
|
|
||||||
resolving dependencies...
|
|
||||||
looking for conflicting packages...
|
|
||||||
|
|
||||||
Package (1) New Version Net Change
|
|
||||||
|
|
||||||
zls-bin 0.10.0-1 1,36 MiB
|
|
||||||
|
|
||||||
Total Installed Size: 1,36 MiB
|
|
||||||
|
|
||||||
:: Proceed with installation? [Y/n]
|
|
||||||
checking keyring...
|
|
||||||
checking package integrity...
|
|
||||||
loading package files...
|
|
||||||
checking for file conflicts...
|
|
||||||
checking available disk space...
|
|
||||||
:: Processing package changes...
|
|
||||||
installing zls-bin...
|
|
||||||
Consider runing 'zls --config' to setup initial configuration
|
|
||||||
|
|
||||||
This is not required, but it is highly recommended
|
|
||||||
:: Running post-transaction hooks...
|
|
||||||
(1/2) Arming ConditionNeedsUpdate...
|
|
||||||
(2/2) Refreshing PackageKit...
|
|
||||||
#+end_src
|
|
||||||
|
@ -122,10 +122,8 @@ of our symbols when the cursor is on it.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Ligatures
|
** Ligatures
|
||||||
The font I’m using (see *here*) supports ligatures, but Emacs in GUI
|
The font I’m using supports ligatures, but Emacs in GUI mode does not.
|
||||||
mode does not. And of course, there’s a package for that.
|
And of course, there’s a package for that.
|
||||||
|
|
||||||
# Insert equivalent of #Basic-configuration-Visual-Configuration-Fontsxfkjel6184j0 in *here*
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package ligature
|
(use-package ligature
|
||||||
@ -175,9 +173,8 @@ The DoomEmacs modeline looks nice in my opinion, let’s use it.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Pixel-perfect alignment of Markdown and org-mode tables
|
** Pixel-perfect alignment of Markdown and org-mode tables
|
||||||
:END:
|
|
||||||
Usually, I have no issue with the alignment of the tables I write in
|
Usually, I have no issue with the alignment of the tables I write in
|
||||||
org-mode and (more rarely) Markdown. However, there are occurences
|
org-mode and (more rarely) Markdown. However, there are occurrences
|
||||||
where I’ll use a character that does not exactly respect my monospace
|
where I’ll use a character that does not exactly respect my monospace
|
||||||
font, which messes with the alignment of the table (often when I do
|
font, which messes with the alignment of the table (often when I do
|
||||||
linguistics stuff). A solution to this is the package ~valign~. A little
|
linguistics stuff). A solution to this is the package ~valign~. A little
|
||||||
@ -215,7 +212,7 @@ sometimes there’s just too much. Is the first window source code? Is
|
|||||||
the other one just an open email? Oh, let’s not forget the ~*Messages*~
|
the other one just an open email? Oh, let’s not forget the ~*Messages*~
|
||||||
buffer open next to another source buffer.
|
buffer open next to another source buffer.
|
||||||
|
|
||||||
Solaire-mode applies a subtle but useful tweak to your current color
|
Solaire-mode applies a subtle but useful tweak to your current colour
|
||||||
scheme: the background of programming buffers is slightly lighter than
|
scheme: the background of programming buffers is slightly lighter than
|
||||||
the background of other buffers. (Or is it other buffers that have a
|
the background of other buffers. (Or is it other buffers that have a
|
||||||
slightly darker background? I’m not sure.)
|
slightly darker background? I’m not sure.)
|
||||||
@ -229,7 +226,7 @@ slightly darker background? I’m not sure.)
|
|||||||
** Theme
|
** Theme
|
||||||
You may have noticed I use the Nord theme pretty much everywhere on my
|
You may have noticed I use the Nord theme pretty much everywhere on my
|
||||||
computer, why not Emacs? In my opinion, its aurora variant is nicer
|
computer, why not Emacs? In my opinion, its aurora variant is nicer
|
||||||
than the default Nord theme since it is richer in colors --- just a
|
than the default Nord theme since it is richer in colours --- just a
|
||||||
personal preference.
|
personal preference.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package doom-themes
|
(use-package doom-themes
|
||||||
@ -248,9 +245,9 @@ for any language that has delimiters like brackets too.
|
|||||||
:hook (prog-mode . rainbow-delimiters-mode))
|
:hook (prog-mode . rainbow-delimiters-mode))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Y’all want some more /COLORS/?
|
** Y’all want some more /COLOURS/?
|
||||||
It is possible to make info buffers much more colorful (and imo easier
|
It is possible to make info buffers much more colourful (and, in my
|
||||||
to read) with this simple package:
|
opinion, easier to read) with this simple package:
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package info-colors
|
(use-package info-colors
|
||||||
:straight (:build t)
|
:straight (:build t)
|
||||||
|
122
docs/fish.org
122
docs/fish.org
@ -17,8 +17,8 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
** Fish from within Emacs
|
** Fish from within Emacs
|
||||||
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
|
I sometimes call fish from within Emacs, with =M-x ansi-term=. In this
|
||||||
variable =TERM= needs to have the value =eterm-color=.
|
case, the variable =TERM= needs to have the value =eterm-color=.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
if test -n "$EMACS"
|
if test -n "$EMACS"
|
||||||
set -x TERM eterm-color
|
set -x TERM eterm-color
|
||||||
@ -33,8 +33,8 @@ fenv source ~/.profile
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Development
|
*** Development
|
||||||
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
|
Finally, some development packages require the =PKG_CONFIG_PATH= to be
|
||||||
let’s do so.
|
set, so let’s do so.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
|
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -64,7 +64,8 @@ function. I just want it empty.
|
|||||||
function fish_greeting; end
|
function fish_greeting; end
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Let’s load it:
|
For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Let’s
|
||||||
|
load it:
|
||||||
#+begin_src fish
|
#+begin_src fish
|
||||||
starship init fish | source
|
starship init fish | source
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -74,9 +75,13 @@ starship init fish | source
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:toml: :tangle ~/.config/starship.toml
|
:header-args:toml: :tangle ~/.config/starship.toml
|
||||||
:END:
|
: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.
|
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.
|
||||||
|
|
||||||
First I’ll modify the default format variable, removing the modules I don’t need.
|
First I’ll modify the default format variable, removing the modules I
|
||||||
|
don’t need.
|
||||||
#+begin_src toml
|
#+begin_src toml
|
||||||
format = """
|
format = """
|
||||||
$username\
|
$username\
|
||||||
@ -117,7 +122,9 @@ $shell\
|
|||||||
$character"""
|
$character"""
|
||||||
#+end_src
|
#+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.
|
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
|
#+begin_src toml
|
||||||
[custom.lisp]
|
[custom.lisp]
|
||||||
extensions = ["lisp", "el"]
|
extensions = ["lisp", "el"]
|
||||||
@ -186,7 +193,8 @@ disable = true
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Loading ~zoxide~
|
*** Loading ~zoxide~
|
||||||
~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded like so:
|
~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded
|
||||||
|
like so:
|
||||||
#+begin_src fish
|
#+begin_src fish
|
||||||
zoxide init fish | source
|
zoxide init fish | source
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -202,13 +210,14 @@ zoxide init fish | source
|
|||||||
t t)
|
t t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Abbreviations are a great way to keep correctly track of which commands are run
|
Abbreviations are a great way to keep correctly track of which
|
||||||
in the shell without polluting the history of the shell with obscure commands.
|
commands are run in the shell without polluting the history of the
|
||||||
When typing an abbreviation, fish will replace it with replace it with its
|
shell with obscure commands. When typing an abbreviation, fish will
|
||||||
expanded equivalent. Below are some of the abbreviations I use. Be aware some of
|
replace it with replace it with its expanded equivalent. Below are
|
||||||
them that invoke GUI programs can be invoked through ~devour~ which will make
|
some of the abbreviations I use. Be aware some of them that invoke GUI
|
||||||
the terminal disappear while the program runs, and once the GUI program exists
|
programs can be invoked through ~devour~ which will make the terminal
|
||||||
the terminal window will come back.
|
disappear while the program runs, and once the GUI program exists the
|
||||||
|
terminal window will come back.
|
||||||
|
|
||||||
*** System monitoring
|
*** System monitoring
|
||||||
Here I have some abbreviations which are quite useful when performing
|
Here I have some abbreviations which are quite useful when performing
|
||||||
@ -241,14 +250,15 @@ important threads in terms of memory usage.
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** System management (packages and services)
|
*** System management (packages and services)
|
||||||
I added some of these abbreviations due to how often I have to write the whole
|
I added some of these abbreviations due to how often I have to write
|
||||||
thing.
|
the whole thing.
|
||||||
|
|
||||||
**** Package management
|
**** Package management
|
||||||
The first command is =remove= which removes a package from my system, as well as
|
The first command is =remove= which removes a package from my system, as
|
||||||
its dependencies no longer needed. =p=. =pacman='s or =paru='s. This is why I
|
well as its dependencies no longer needed. =p=. =pacman='s or =paru='s. This
|
||||||
simply type =purge=. And if I want to simply seach among the =pacman= repos, I
|
is why I simply type =purge=. And if I want to simply search among the
|
||||||
can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru=.
|
=pacman= repos, I can type =search=. Otherwise, if I want to include AUR
|
||||||
|
results, I’ll use =paru=.
|
||||||
|
|
||||||
#+NAME: pm-abbr
|
#+NAME: pm-abbr
|
||||||
| abbreviation | command |
|
| abbreviation | command |
|
||||||
@ -261,9 +271,9 @@ can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Service management
|
**** Service management
|
||||||
I don’t have the muscle memory of =systemctl=. So instead, I simply type =c=
|
I don’t have the muscle memory of =systemctl=. So instead, I simply type
|
||||||
when I want to do something user service related. And if I want to manipulate
|
=c= when I want to do something user service related. And if I want to
|
||||||
system services, I can instead type a simple capital =S=.
|
manipulate system services, I can instead type a simple capital =S=.
|
||||||
#+NAME: service-abbr
|
#+NAME: service-abbr
|
||||||
| abbreviation | command |
|
| abbreviation | command |
|
||||||
|--------------+------------------|
|
|--------------+------------------|
|
||||||
@ -275,8 +285,8 @@ system services, I can instead type a simple capital =S=.
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Development
|
*** Development
|
||||||
A good amount of these commands are development related, especially when it
|
A good amount of these commands are development related, especially
|
||||||
comes to compilation or Docker.
|
when it comes to compilation or Docker.
|
||||||
|
|
||||||
**** CMake
|
**** CMake
|
||||||
I have the following abbreviations to quickly run CMake and create a
|
I have the following abbreviations to quickly run CMake and create a
|
||||||
@ -411,12 +421,13 @@ Here is the corresponding fish configuration:
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Typos
|
*** Typos
|
||||||
Let's admit it, we all make typos from time to time in the shell, and some are
|
Let's admit it, we all make typos from time to time in the shell, and
|
||||||
recurrent enough we make abbreviations or aliases of the correct command. Well,
|
some are recurrent enough we make abbreviations or aliases of the
|
||||||
I have some of my abbreviations which were make exactly because of this.
|
correct command. Well, I have some of my abbreviations which were make
|
||||||
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~.
|
exactly because of this. Sometimes for some reason, my brain makes me
|
||||||
So, let's just replace the former by the latter. I'm also very bad at typing
|
write ~clean~ instead of ~clear~. So, let's just replace the former by the
|
||||||
~exit~. And sometimes I suck at typing ~htop~.
|
latter. I'm also very bad at typing ~exit~. And sometimes I suck at
|
||||||
|
typing ~htop~.
|
||||||
#+NAME: typo-abbr
|
#+NAME: typo-abbr
|
||||||
| abbreviation | command |
|
| abbreviation | command |
|
||||||
|--------------+---------|
|
|--------------+---------|
|
||||||
@ -434,17 +445,6 @@ Here is the corresponding fish configuration:
|
|||||||
Finally, some miscellaneous abbreviations that don't really fit into any of the
|
Finally, some miscellaneous abbreviations that don't really fit into any of the
|
||||||
above categories.
|
above categories.
|
||||||
|
|
||||||
**** Screens setup
|
|
||||||
I have an automatic screen setup for when I am at home, but it
|
|
||||||
unfortunately doesn’t match my setup at work. =autorandr horizontal=
|
|
||||||
does not work because my third screen is vertical, the wallpaper is
|
|
||||||
misaligned, and picom becomes too taxing on my system. I ended up
|
|
||||||
writing the following command each morning, but now a simple abbrev
|
|
||||||
does the work for me.
|
|
||||||
#+begin_src fish
|
|
||||||
abbr work 'autorandr -l work; xwallpaper --zoom (cat $HOME/.cache/wallpaper); pkill picom'
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
**** Media
|
**** Media
|
||||||
Here you will find various commands related to media in general. The
|
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/@LofiGirl][Lofi Girl
|
first one is a command to play some chillhop from the [[https://www.youtube.com/@LofiGirl][Lofi Girl
|
||||||
@ -453,7 +453,7 @@ YouTube channel]]'s livestream.
|
|||||||
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &'
|
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
When it comes to mpv, I do not want to force it to open a graphical window if
|
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
|
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.
|
that window. So, I declared this abbreviation.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
@ -467,7 +467,7 @@ abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(upl
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Some sane default options for [[https://github.com/nsxiv/nsxiv][~nsxiv~]]. This includes playing GIFs and
|
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
|
not displaying the filename below. Nsxiv will also open in full-screen
|
||||||
and will fit the displayed image to the frame. It will also output to
|
and will fit the displayed image to the frame. It will also output to
|
||||||
stdout the selected files in case I want to pipe them to another
|
stdout the selected files in case I want to pipe them to another
|
||||||
program.
|
program.
|
||||||
@ -481,8 +481,8 @@ GPU.
|
|||||||
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
|
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Finally, let's declare the following abbreviation that will launch a MPV
|
Finally, let's declare the following abbreviation that will launch an
|
||||||
instance displaying my webcam:
|
MPV instance displaying my webcam:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed'
|
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -519,29 +519,29 @@ abbreviation of ~remove~ (see [[file:./fish.md#package-management][Package manag
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** exa
|
**** exa
|
||||||
#+NAME: exa-abbr
|
#+NAME: eza-abbr
|
||||||
| abbreviation | command |
|
| abbreviation | command |
|
||||||
|--------------+--------------------------------------------|
|
|--------------+--------------------------------------------|
|
||||||
| exa | exa -halg@ --group-directories-first --git |
|
| eza | eza -halg@ --group-directories-first --git |
|
||||||
| lsl | exa -halg@ --group-directories-first --git |
|
| lsl | eza -halg@ --group-directories-first --git |
|
||||||
|
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
<<generate-abbr(table=exa-abbr)>>
|
<<generate-abbr(table=eza-abbr)>>
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Network Management
|
**** Network Management
|
||||||
First, we have just =nmcli= with sane default options, that is a pretty output
|
First, we have just =nmcli= with sane default options, that is a pretty
|
||||||
with colors.
|
output with colours.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
abbr nmcli 'nmcli -p -c auto'
|
abbr nmcli 'nmcli -p -c auto'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** NordVPN
|
**** NordVPN
|
||||||
Next, we have some NordVPN-related shortcuts. The first one is a simple
|
Next, we have some NordVPN-related shortcuts. The first one is a
|
||||||
abbreviation to =nordvpn=. The second one is a shortcut to connect to a server,
|
simple abbreviation to =nordvpn=. The second one is a shortcut to
|
||||||
and to disconnect from the current server. I also have a couple of shortcuts to
|
connect to a server, and to disconnect from the current server. I also
|
||||||
quickly connect to some preselected countries, mainly France, Germany, Japan and
|
have a couple of shortcuts to quickly connect to some preselected
|
||||||
the US.
|
countries, mainly France, Germany, Japan and the US.
|
||||||
#+NAME: nordvpn-abbr
|
#+NAME: nordvpn-abbr
|
||||||
| abbreviation | command |
|
| abbreviation | command |
|
||||||
|--------------+-------------------------|
|
|--------------+-------------------------|
|
||||||
@ -558,7 +558,7 @@ the US.
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Wget
|
**** Wget
|
||||||
By default, continue a download that was interupted.
|
By default, continue a download that was interrupted.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
|
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -581,7 +581,7 @@ function fish_command_not_found
|
|||||||
end
|
end
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Tadah! No more package suggestions from fish!
|
Ta-dah! No more package suggestions from fish!
|
||||||
|
|
||||||
I also have some private abbreviations I don’t want people to know
|
I also have some private abbreviations I don’t want people to know
|
||||||
about that I store in a separate configuration file.
|
about that I store in a separate configuration file.
|
||||||
|
@ -67,8 +67,8 @@ MPD each time we run it.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Audio outputs
|
** Audio outputs
|
||||||
Two audio outputs will be defined. The first one sets Pulseaudio up so
|
Two audio outputs will be defined. The first one sets Pulseaudio up,
|
||||||
I can actually hear my music. Its configuration is simple, really.
|
so I can actually hear my music. Its configuration is simple, really.
|
||||||
#+begin_src conf-space
|
#+begin_src conf-space
|
||||||
audio_output {
|
audio_output {
|
||||||
type "pulse"
|
type "pulse"
|
||||||
|
@ -5,30 +5,32 @@
|
|||||||
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
|
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
|
||||||
|
|
||||||
* Neofetch
|
* Neofetch
|
||||||
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was written in
|
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was
|
||||||
Bash, and thus its configuration file is written as a Bash script too. This
|
written in Bash, and thus its configuration file is written as a Bash
|
||||||
document was written with org-mode, and my configuration file is tangled from
|
script too. This document was written with org-mode, and my
|
||||||
the source blocks you will see below to ~~/.config/neofetch/config.conf~. This
|
configuration file is tangled from the source blocks you will see
|
||||||
configuration will only contain what I need. For any further information, please
|
below to ~~/.config/neofetch/config.conf~. This configuration will only
|
||||||
refer to the [[https://github.com/dylanaraps/neofetch][original repository]] and [[https://github.com/dylanaraps/neofetch/wiki/Customizing-Info][its documentation]].
|
contain what I need. For any further information, please refer to the
|
||||||
|
[[https://github.com/dylanaraps/neofetch][original repository]] and [[https://github.com/dylanaraps/neofetch/wiki/Customizing-Info][its documentation]].
|
||||||
|
|
||||||
** The ~print_info~ functions
|
** The ~print_info~ functions
|
||||||
The ~print_info~ function is the function called by Neofetch in order to print
|
The ~print_info~ function is the function called by Neofetch in order to
|
||||||
the system information it could fetch. In this function, we’ll choose what to
|
print the system information it could fetch. In this function, we’ll
|
||||||
display, and how. This function looks like this:
|
choose what to display, and how. This function looks like this:
|
||||||
#+BEGIN_SRC sh :tangle no
|
#+BEGIN_SRC sh :tangle no
|
||||||
print_info() {
|
print_info() {
|
||||||
# Print information here…
|
# Print information here…
|
||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Generally, what we will display will be shown through the ~info~ function,
|
Generally, what we will display will be shown through the ~info~
|
||||||
redefined inside Neofetch (this is not ~info(1)~). This ~info~ function accepts
|
function, redefined inside Neofetch (this is not ~info(1)~). This ~info~
|
||||||
one or two arguments. With one argument, such as with ~info memory~, we can get
|
function accepts one or two arguments. With one argument, such as with
|
||||||
a result that looks like ~5136MiB / 15873MiB~, while calling it with two
|
~info memory~, we can get a result that looks like ~5136MiB / 15873MiB~,
|
||||||
arguments will treat the first one as a prefix and the second one as the
|
while calling it with two arguments will treat the first one as a
|
||||||
interesting information; ~info "Memory" memory~ will look like
|
prefix and the second one as the interesting information;
|
||||||
~Memory: 5136MiB / 15873MiB~. Here is what we want to display:
|
~info "Memory" memory~ will look like ~Memory: 5136MiB / 15873MiB~. Here
|
||||||
|
is what we want to display:
|
||||||
#+NAME: info-elements-table
|
#+NAME: info-elements-table
|
||||||
| Prefix | Information | What it does |
|
| Prefix | Information | What it does |
|
||||||
|----------+-------------+------------------------------|
|
|----------+-------------+------------------------------|
|
||||||
@ -90,10 +92,11 @@ Each of these modules can be tuned with the variables presented below.
|
|||||||
|
|
||||||
** Information settings
|
** Information settings
|
||||||
Each of the following variable tunes a function that can be called in
|
Each of the following variable tunes a function that can be called in
|
||||||
~print_info~ described above. It is possible to tune them by modifying this
|
~print_info~ described above. It is possible to tune them by modifying
|
||||||
document or the configuration file itself, and they can be overridden by the
|
this document or the configuration file itself, and they can be
|
||||||
command line with flags passed to ~neofetch~. I will divide these variables in
|
overridden by the command line with flags passed to ~neofetch~. I will
|
||||||
two main categories: hardware and software-related properties.
|
divide these variables in two main categories: hardware and
|
||||||
|
software-related properties.
|
||||||
|
|
||||||
*** Software
|
*** Software
|
||||||
**** OS
|
**** OS
|
||||||
@ -112,15 +115,16 @@ This variable can shorten the output of the ~distro~ function.
|
|||||||
distro_shorthand="off"
|
distro_shorthand="off"
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
It is possible to display when the distro has been installed on the computer.
|
It is possible to display when the distro has been installed on the
|
||||||
|
computer.
|
||||||
|
|
||||||
****** Distro art or image
|
****** Distro art or image
|
||||||
By default, Neofetch will display ascii art next to our system information
|
By default, Neofetch will display ASCII art next to our system
|
||||||
representing our distro’s logo. We’ll customize it a bit. First, let’s change
|
information representing our distro’s logo. We’ll customize it a bit.
|
||||||
the ~backend~ value. Note that most of them (except ~off~ of course) support
|
First, let’s change the ~backend~ value. Note that most of them (except
|
||||||
shorthands such as ~--kitty~ when passed as arguments from the command line. In
|
~off~ of course) support shorthands such as ~--kitty~ when passed as
|
||||||
my case, I will use the Kitty backend since it is the native backend of the
|
arguments from the command line. In my case, I will use the Kitty
|
||||||
terminal emulator I use.
|
backend since it is the native backend of the terminal emulator I use.
|
||||||
- Default value :: ~"ascii"~
|
- Default value :: ~"ascii"~
|
||||||
- Values ::
|
- Values ::
|
||||||
- ~ascii~
|
- ~ascii~
|
||||||
@ -143,10 +147,10 @@ terminal emulator I use.
|
|||||||
image_backend="kitty"
|
image_backend="kitty"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now, since I indicated I wanted an image engine, I’ll indicate neofetch which
|
Now, since I indicated I wanted an image engine, I’ll indicate
|
||||||
image to find. Note that ~auto~ will pick the best image source for whatever
|
Neofetch which image to find. Note that ~auto~ will pick the best image
|
||||||
image backend is used. In ascii mode, distro ascii art will be used and in an
|
source for whatever image backend is used. In ASCII mode, distro ASCII
|
||||||
image mode, your wallpaper will be used.
|
art will be used and in an image mode, your wallpaper will be used.
|
||||||
- Default value :: ~auto~
|
- Default value :: ~auto~
|
||||||
- Values ::
|
- Values ::
|
||||||
- ~auto~
|
- ~auto~
|
||||||
@ -272,18 +276,6 @@ It is possible to display the machine’s public IP address with the function
|
|||||||
public_ip_host="http://ident.me"
|
public_ip_host="http://ident.me"
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
# - Default value :: ~""~
|
|
||||||
# - Values ::
|
|
||||||
# - ~""~
|
|
||||||
# - ~""~
|
|
||||||
# - Flag :: ~""~
|
|
||||||
# - Supports ::
|
|
||||||
# - Examples ::
|
|
||||||
# - on :: ~~
|
|
||||||
# - off :: ~~
|
|
||||||
# #+begin_src sh
|
|
||||||
# #+end_src
|
|
||||||
|
|
||||||
**** Theming
|
**** Theming
|
||||||
This section will allow the user to modify what Neofetch can and cannot display
|
This section will allow the user to modify what Neofetch can and cannot display
|
||||||
about the machine’s theming —by this, I mean its GTK theme, its icons and its
|
about the machine’s theming —by this, I mean its GTK theme, its icons and its
|
||||||
@ -413,10 +405,10 @@ cpu_cores="off"
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
***** CPU temperature
|
***** CPU temperature
|
||||||
This variable allows the user to hide or show the CPU’s temperature, and if
|
This variable allows the user to hide or show the CPU’s temperature,
|
||||||
shown, the user can display it in Celcius or Farenheit degrees. For FreeBSD and
|
and if shown, the user can display it in Celsius or Fahrenheit
|
||||||
NetBSD-based systems, you’ll need to enable the ~coretemp~ kernel module. This
|
degrees. For FreeBSD and NetBSD-based systems, you’ll need to enable
|
||||||
only supports newer Intel processors.
|
the ~coretemp~ kernel module. This only supports newer Intel processors.
|
||||||
- Default value :: ~"off"~
|
- Default value :: ~"off"~
|
||||||
- Values ::
|
- Values ::
|
||||||
- ~"C"~
|
- ~"C"~
|
||||||
|
@ -37,10 +37,10 @@ shadow-offset-x = -16;
|
|||||||
shadow-offset-y = -16;
|
shadow-offset-y = -16;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
It is possible to set the color of the shadow with the string contained in
|
It is possible to set the colour of the shadow with the string
|
||||||
~shadow-color~ with a hexadecimal value. I haven’t included these values in my
|
contained in ~shadow-color~ with a hexadecimal value. I haven’t included
|
||||||
config, but this value will override any value in ~shadow-red~, ~shadow-green~,
|
these values in my config, but this value will override any value in
|
||||||
or ~shadow-blue~.
|
~shadow-red~, ~shadow-green~, or ~shadow-blue~.
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
shadow-color = "#171A20"
|
shadow-color = "#171A20"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -130,10 +130,10 @@ rounded-corners-exclude = [
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
** Fading
|
** Fading
|
||||||
Picom has the ability to create some fading effects on windows when opening or
|
Picom has the ability to create some fading effects on windows when
|
||||||
closing or when the opacity changes. The following parameter toggles this
|
opening or closing or when the opacity changes. The following
|
||||||
feature on or off. However, its behavior can be changed with
|
parameter toggles this feature on or off. However, its behaviour can
|
||||||
~no-fading-openclose~.
|
be changed with ~no-fading-openclose~.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
fading = true
|
fading = true
|
||||||
@ -204,7 +204,8 @@ This however describes the opacity of window titlebars and borders.
|
|||||||
frame-opacity = 1.0;
|
frame-opacity = 1.0;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
~menu-opacity~ describes the opacity for dropdown menus and popup menus.
|
~menu-opacity~ describes the opacity for dropdown menus and pop-up
|
||||||
|
menus.
|
||||||
| Default value | ~1.0~ |
|
| Default value | ~1.0~ |
|
||||||
| Min value | ~0.1~ |
|
| Min value | ~0.1~ |
|
||||||
| Max value | ~1.0~ |
|
| Max value | ~1.0~ |
|
||||||
@ -270,9 +271,10 @@ blur: {
|
|||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
This value enables or disables the blur for the background of semi-transparent
|
This value enables or disables the blur for the background of
|
||||||
or ARGB windows. It has bad performances though, with driver-dependent behavior.
|
semi-transparent or ARGB windows. It has bad performances though, with
|
||||||
The name of the switch may change without prior notifications.
|
driver-dependent behaviour. The name of the switch may change without
|
||||||
|
prior notifications.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
blur-background = true;
|
blur-background = true;
|
||||||
@ -338,8 +340,8 @@ details.
|
|||||||
dbus = false;
|
dbus = false;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Try to detect WM windows (a non-override-redirect window with no child that has
|
Try to detect WM windows (a non-override-redirect window with no child
|
||||||
~WM_STATE~) and markz them as active.
|
that has ~WM_STATE~) and marks them as active.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
mark-wmwin-focused = true;
|
mark-wmwin-focused = true;
|
||||||
@ -434,17 +436,17 @@ you use ~--resize-damage 2~, and so on). May or may not work with
|
|||||||
resize-damage = 1;
|
resize-damage = 1;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Specify a list of conditions of windows that should be painted with inverted
|
Specify a list of conditions of windows that should be painted with
|
||||||
color. Resource-hogging, and is not well tested.
|
inverted colour. Resource-hogging, and is not well tested.
|
||||||
| Default value | ~[]~ |
|
| Default value | ~[]~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
invert-color-include = [];
|
invert-color-include = [];
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Disable the use of damage information. This cause the whole screen to be redrawn
|
Disable the use of damage information. This cause the whole screen to
|
||||||
everytime, instead of the part of the screen has actually changed. Potentially
|
be redrawn every time, instead of the part of the screen has actually
|
||||||
degrades the performance, but might fix some artifacts. The opposing option is
|
changed. Potentially degrades the performance, but might fix some
|
||||||
use-damage
|
artefacts. The opposing option is use-damage
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
use-damage = false;
|
use-damage = false;
|
||||||
@ -465,8 +467,8 @@ glx-fshader-win that could turn opaque pixels transparent.
|
|||||||
force-win-blend = false;
|
force-win-blend = false;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is
|
Do not use EWMH to detect full-screen windows. Reverts to checking if a window is
|
||||||
fullscreen based only on its size and coordinates.
|
full-screen based only on its size and coordinates.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
no-ewmh-fullscreen = false;
|
no-ewmh-fullscreen = false;
|
||||||
@ -524,8 +526,8 @@ Write process ID to a file.
|
|||||||
# write-pid-path = '/path/to/your/log/file';
|
# write-pid-path = '/path/to/your/log/file';
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in
|
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types
|
||||||
EWMH standard:
|
defined in EWMH standard:
|
||||||
- ~"unknown"~
|
- ~"unknown"~
|
||||||
- ~"desktop"~
|
- ~"desktop"~
|
||||||
- ~"dock"~
|
- ~"dock"~
|
||||||
@ -542,16 +544,18 @@ EWMH standard:
|
|||||||
- ~"combo"~
|
- ~"combo"~
|
||||||
- ~"dnd"~
|
- ~"dnd"~
|
||||||
Following per window-type options are available:
|
Following per window-type options are available:
|
||||||
- fade, shadow :: Controls window-type-specific shadow and fade settings.
|
- fade, shadow :: Controls window-type-specific shadow and fade
|
||||||
|
settings.
|
||||||
- opacity :: Controls default opacity of the window type.
|
- opacity :: Controls default opacity of the window type.
|
||||||
- focus :: Controls whether the window of this type is to be always considered
|
- focus :: Controls whether the window of this type is to be always
|
||||||
focused. (By default, all window types except "normal" and "dialog" has this
|
considered focused. (By default, all window types except =normal= and
|
||||||
on.)
|
=dialog= has this on.)
|
||||||
- full-shadow :: Controls whether shadow is drawn under the parts of the window
|
- full-shadow :: Controls whether shadow is drawn under the parts of
|
||||||
that you normally won't be able to see. Useful when the window has parts of it
|
the window that you normally won't be able to see. Useful when the
|
||||||
transparent, and you want shadows in those areas.
|
window has parts of it transparent, and you want shadows in those
|
||||||
|
areas.
|
||||||
- redir-ignore :: Controls whether this type of windows should cause
|
- redir-ignore :: Controls whether this type of windows should cause
|
||||||
screen to become redirected again after being unredirected. If you
|
screen to become redirected again after being not redirected. If you
|
||||||
have =unredir-if-possible= set, and doesn't want certain window to
|
have =unredir-if-possible= set, and doesn't want certain window to
|
||||||
cause unnecessary screen redirection, you can set this to =true=.
|
cause unnecessary screen redirection, you can set this to =true=.
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
@ -566,18 +570,19 @@ wintypes:
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** GLX backend-specific options
|
*** GLX backend-specific options
|
||||||
Avoid using stencil buffer, useful if you don't have a stencil buffer. Might
|
Avoid using stencil buffer, useful if you don't have a stencil buffer.
|
||||||
cause incorrect opacity when rendering transparent content (but never
|
Might cause incorrect opacity when rendering transparent content (but
|
||||||
practically happened) and may not work with blur-background. Tests show a 15%
|
never practically happened) and may not work with blur-background.
|
||||||
performance boost. Recommended.
|
Tests show a 15% performance boost. Recommended.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
glx-no-stencil = true;
|
glx-no-stencil = true;
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Avoid rebinding pixmap on window damage. Probably could improve performance on
|
Avoid rebinding pixmap on window damage. Probably could improve
|
||||||
rapid window content changes, but is known to break things on some drivers
|
performance on rapid window content changes, but is known to break
|
||||||
(LLVMpipe, xf86-video-intel, etc.). Recommended if it works.
|
things on some drivers (LLVMpipe, xf86-video-intel, etc.). Recommended
|
||||||
|
if it works.
|
||||||
| Default value | ~false~ |
|
| Default value | ~false~ |
|
||||||
#+BEGIN_SRC conf
|
#+BEGIN_SRC conf
|
||||||
glx-no-rebind-pixmap = false;
|
glx-no-rebind-pixmap = false;
|
||||||
@ -585,7 +590,8 @@ glx-no-rebind-pixmap = false;
|
|||||||
|
|
||||||
Use specified GLSL fragment shader for rendering window contents. See
|
Use specified GLSL fragment shader for rendering window contents. See
|
||||||
~compton-default-fshader-win.glsl~ and
|
~compton-default-fshader-win.glsl~ and
|
||||||
~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples.
|
~compton-fake-transparency-fshader-win.glsl~ in the source tree for
|
||||||
|
examples.
|
||||||
| Default value | ~''~ |
|
| Default value | ~''~ |
|
||||||
#+BEGIN_SRC conf :tangle no
|
#+BEGIN_SRC conf :tangle no
|
||||||
glx-fshader-win = '';
|
glx-fshader-win = '';
|
||||||
|
@ -12,38 +12,46 @@ First, we are using the 2018 edition of Rust.
|
|||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Put single-expression functions on a single line.
|
Put single-expression functions on a single line.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
fn_single_line = true
|
fn_single_line = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Format string literals where necessary.
|
Format string literals where necessary.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
format_strings = true
|
format_strings = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Maximum width of each line
|
Maximum width of each line
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
max_width = 80
|
max_width = 80
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Merge multiple imports into a single nested import.
|
Merge multiple imports into a single nested import.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
merge_imports = true
|
merge_imports = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
** Structs and Enums
|
** Structs and Enums
|
||||||
The maximum length of enum variant having discriminant, that gets vertically
|
The maximum length of enum variant having discriminant, that gets
|
||||||
aligned with others. Variants without discriminants would be ignored for the
|
vertically aligned with others. Variants without discriminants would
|
||||||
purpose of alignment.
|
be ignored for the purpose of alignment.
|
||||||
|
|
||||||
Note that this is not how much whitespace is inserted, but instead the longest
|
Note that this is not how much whitespace is inserted, but instead the
|
||||||
variant name that doesn't get ignored when aligning.
|
longest variant name that doesn't get ignored when aligning.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
enum_discrim_align_threshold = 20
|
enum_discrim_align_threshold = 20
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
The maximum diff of width between struct fields to be aligned with each other.
|
|
||||||
|
The maximum diff of width between struct fields to be aligned with
|
||||||
|
each other.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
struct_field_align_threshold = 20
|
struct_field_align_threshold = 20
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
|
|
||||||
|
Reorder =impl= items. =type= and =const= are put first, then macros and
|
||||||
|
methods.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
reorder_impl_items = true
|
reorder_impl_items = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -53,14 +61,17 @@ Convert ~/* */~ comments to ~//~ comments where possible.
|
|||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
normalize_comments = true
|
normalize_comments = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Break comments to fit on the line.
|
Break comments to fit on the line.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
wrap_comments = true
|
wrap_comments = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Report ~FIXME~ items in comments.
|
Report ~FIXME~ items in comments.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
report_fixme = "Always"
|
report_fixme = "Always"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Report ~TODO~ items in comments.
|
Report ~TODO~ items in comments.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
todo = "Always"
|
todo = "Always"
|
||||||
@ -71,6 +82,7 @@ Format code snippet included in doc comments.
|
|||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
format_code_in_doc_comments = true
|
format_code_in_doc_comments = true
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
|
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
normalize_doc_attributes = true
|
normalize_doc_attributes = true
|
||||||
@ -81,10 +93,12 @@ Use tab characters for indentation, spaces for alignment.
|
|||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
hard_tabs = false
|
hard_tabs = false
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Number of spaces per tab.
|
Number of spaces per tab.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
tab_spaces = 4
|
tab_spaces = 4
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
I want newlines to always be Unix style.
|
I want newlines to always be Unix style.
|
||||||
#+BEGIN_SRC toml
|
#+BEGIN_SRC toml
|
||||||
newline_style = "Unix"
|
newline_style = "Unix"
|
||||||
|
178
docs/scripts.org
178
docs/scripts.org
@ -128,9 +128,9 @@ fi
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/backup
|
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/backup
|
||||||
:END:
|
:END:
|
||||||
~backup~ is a very simple, oneliner script that will create a local copy of a
|
~backup~ is a very simple, one-liner script that will create a local
|
||||||
file and add the date at which it was copied in the filename. You can see its
|
copy of a file and add the date at which it was copied in the
|
||||||
source code here:
|
filename. You can see its source code here:
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
cp -r $argv[1] $argv[1].bak.(date +"%Y%m%d%H%M%S")
|
cp -r $argv[1] $argv[1].bak.(date +"%Y%m%d%H%M%S")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -143,7 +143,7 @@ As I am using a laptop, maximum performance isn’t always what I want.
|
|||||||
Sometimes, it’s just better to have not so great but less
|
Sometimes, it’s just better to have not so great but less
|
||||||
battery-demanding performance. It is possible to achieve this by
|
battery-demanding performance. It is possible to achieve this by
|
||||||
modifying the CPU governor with ~cpupower~. The [[https://wiki.archlinux.org/title/CPU_frequency_scaling#Scaling_governors][Arch Wiki]] has, as usual,
|
modifying the CPU governor with ~cpupower~. The [[https://wiki.archlinux.org/title/CPU_frequency_scaling#Scaling_governors][Arch Wiki]] has, as usual,
|
||||||
some really good documentation on this.
|
some superb documentation on this.
|
||||||
|
|
||||||
The following script asks the user through ~rofi~ which governor to
|
The following script asks the user through ~rofi~ which governor to
|
||||||
apply, and it relies on [[file:./scripts.md#askpass][askpass]] to retrieve the user’s password.
|
apply, and it relies on [[file:./scripts.md#askpass][askpass]] to retrieve the user’s password.
|
||||||
@ -172,13 +172,13 @@ printf "^f3^f0 %d" $NB_CONTAINERS
|
|||||||
:END:
|
:END:
|
||||||
This script comes straight from [[https://charm.sh/blog/kamoji-generator/][this blog post]] and generates kamoji. I
|
This script comes straight from [[https://charm.sh/blog/kamoji-generator/][this blog post]] and generates kamoji. I
|
||||||
modified it a bit in order to work with either =xclipboard= or =wl-copy=
|
modified it a bit in order to work with either =xclipboard= or =wl-copy=
|
||||||
depending on whether I am in a X.org session or a Wayland session.
|
depending on whether I am in an X.org session or a Wayland session.
|
||||||
|
|
||||||
Note that it requires the =OPENAI_API_KEY= environment variable to be
|
Note that it requires the =OPENAI_API_KEY= environment variable to be
|
||||||
set with a valid OpenAI key.
|
set with a valid OpenAI key.
|
||||||
#+begin_src bash
|
#+begin_src bash
|
||||||
# If the user passes '-h', '--help', or 'help' print out a little bit of help.
|
# If the user passes '-h', '--help', or 'help' print out a little bit
|
||||||
# text.
|
# of help. text.
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"-h" | "--help" | "help")
|
"-h" | "--help" | "help")
|
||||||
printf 'Generate kaomojis on request.\n\n'
|
printf 'Generate kaomojis on request.\n\n'
|
||||||
@ -187,28 +187,29 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# The user can pass an argument like "bear" or "angry" to specify the general
|
# The user can pass an argument like "bear" or "angry" to specify the
|
||||||
# kind of Kaomoji produced.
|
# general kind of Kaomoji produced.
|
||||||
sentiment=""
|
sentiment=""
|
||||||
if [[ $1 != "" ]]; then
|
if [[ $1 != "" ]]; then
|
||||||
sentiment=" $1"
|
sentiment=" $1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ask mods to generate Kaomojis. Save the output in a variable.
|
# Ask mods to generate Kaomojis. Save the output in a variable.
|
||||||
kaomoji="$(mods "generate 10${sentiment} kaomojis. number them and put each one on its own line.")"
|
kaomoji="$(mods "generate 10${sentiment} kaomojis. Number them and put each one on its own line.")"
|
||||||
if [[ $kaomoji == "" ]]; then
|
if [[ $kaomoji == "" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Pipe mods output to gum so the user can choose the perfect kaomoji. Save that
|
# Pipe mods output to gum, so the user can choose the perfect kaomoji.
|
||||||
# choice in a variable. Also note that we're using cut to drop the item number
|
# Save that choice in a variable. Also note that we're using cut to
|
||||||
# in front of the Kaomoji.
|
# drop the item number in front of the Kaomoji.
|
||||||
choice="$(echo "$kaomoji" | gum choose | cut -d ' ' -f 2)"
|
choice="$(echo "$kaomoji" | gum choose | cut -d ' ' -f 2)"
|
||||||
if [[ $choice == "" ]]; then
|
if [[ $choice == "" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If the current session is Wayland, copy with wl-copy, otherwise copy with xclipboard
|
# If the current session is Wayland, copy with wl-copy, otherwise copy
|
||||||
|
# with xclipboard
|
||||||
if [ "$XDG_SESSION_TYPE" = "wayland" ]
|
if [ "$XDG_SESSION_TYPE" = "wayland" ]
|
||||||
then printf '%s' "$choice" | wl-copy # Wayland
|
then printf '%s' "$choice" | wl-copy # Wayland
|
||||||
else printf '%s' "$choice" | xclip -sel clip # X11
|
else printf '%s' "$choice" | xclip -sel clip # X11
|
||||||
@ -226,7 +227,7 @@ printf 'Copied %s to the clipboard\n' "$choice"
|
|||||||
unread emails I have through the use of ~mu~.
|
unread emails I have through the use of ~mu~.
|
||||||
|
|
||||||
As you can see, the output string contains two font switchers for
|
As you can see, the output string contains two font switchers for
|
||||||
StumpWM so I can switch from the main font to Siji for the caracter
|
StumpWM so I can switch from the main font to Siji for the character
|
||||||
contained between them: U+E072 (an email icon).
|
contained between them: U+E072 (an email icon).
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
UNREAD=$(mu find "flag:unread AND (maildir:/Inbox OR maildir:/Junk)" | wc -l)
|
UNREAD=$(mu find "flag:unread AND (maildir:/Inbox OR maildir:/Junk)" | wc -l)
|
||||||
@ -254,7 +255,7 @@ nsxiv -abfs f "$HOME/Pictures/Screenshots/$*"
|
|||||||
This is a utility only useful with Wayland for now, using =grim=, =slurp=
|
This is a utility only useful with Wayland for now, using =grim=, =slurp=
|
||||||
(in order to select which area of the screen I wish to capture) and
|
(in order to select which area of the screen I wish to capture) and
|
||||||
=wl-copy= (from =wl-clipboard=). It saves the screenshot in my
|
=wl-copy= (from =wl-clipboard=). It saves the screenshot in my
|
||||||
=$HOME/Pictures/Screenshots= directory with a name formated as
|
=$HOME/Pictures/Screenshots= directory with a name formatted as
|
||||||
=Screenshot_20230425_134550.png= if the screenshot was taken on the 25th
|
=Screenshot_20230425_134550.png= if the screenshot was taken on the 25th
|
||||||
of April 2023 at 1:45:50PM. If the file already exists, the script
|
of April 2023 at 1:45:50PM. If the file already exists, the script
|
||||||
will suffix the name with an underscore followed by an incremental
|
will suffix the name with an underscore followed by an incremental
|
||||||
@ -326,15 +327,15 @@ ssh -L $argv[1]:$argv[3]:$argv[1] $argv[2] -N
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:HEADER-ARGS: :mkdirp yes :tangle no :noweb yes
|
:HEADER-ARGS: :mkdirp yes :tangle no :noweb yes
|
||||||
:END:
|
:END:
|
||||||
One thing I like with ~nsxiv~ is you can trigger different behaviors
|
One thing I like with ~nsxiv~ is you can trigger different behaviours
|
||||||
based on keypresses. For instance, with my current nsxiv configuration,
|
based on keypresses. For instance, with my current nsxiv
|
||||||
if I press the space key followed by a character, it can delete to the
|
configuration, if I press the space key followed by a character, it
|
||||||
trashcan, delete definitively, or open the current image in GIMP. All
|
can delete to the trashcan, delete definitively, or open the current
|
||||||
of that is done through one script file stored in
|
image in GIMP. All of that is done through one script file stored in
|
||||||
~$HOME/.config/nsxiv/exec/key-handler~. The fact it reacts to first the
|
~$HOME/.config/nsxiv/exec/key-handler~. The fact it reacts to first
|
||||||
spacebar instead of /Ctrl-x/ is because I use a custom version of nsxiv I
|
thespace bar instead of /Ctrl-x/ is because I use a custom version of
|
||||||
first modified to fit the bépo layout, and then I decided to change
|
nsxiv I first modified to fit the bépo layout, and then I decided to
|
||||||
the prefix to fit how I use Emacs and StumpWM. You can read the
|
change the prefix to fit how I use Emacs and StumpWM. You can read the
|
||||||
PKGBUILD and my nsxiv patch [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/Documents/code/PKGBUILDs/sxiv][in my dotfiles repo]].
|
PKGBUILD and my nsxiv patch [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/Documents/code/PKGBUILDs/sxiv][in my dotfiles repo]].
|
||||||
|
|
||||||
#+header: :shebang "#!/usr/bin/env fish" :tangle ~/.config/nsxiv/exec/key-handler
|
#+header: :shebang "#!/usr/bin/env fish" :tangle ~/.config/nsxiv/exec/key-handler
|
||||||
@ -466,12 +467,13 @@ telnet towel.blinkenlights.nl
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/tttapping
|
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/tttapping
|
||||||
:END:
|
:END:
|
||||||
For some reasons, my firmware does not recognize the function key for toggling
|
For some reason, my firmware does not recognize the function key for
|
||||||
the touchpad. I’m not going to really complain about it since it lets me program
|
toggling the touchpad. I’m not going to really complain about it since
|
||||||
it like I want. Since I often don’t need to completely deactivate the touchpad,
|
it lets me program it like I want. Since I often don’t need to
|
||||||
I’ll instead toggle whether tapping is enabled or not when pressing
|
completely deactivate the touchpad, I’ll instead toggle whether
|
||||||
~XF86TouchpadToggle~. And for that, I need this small script that will actually
|
tapping is enabled or not when pressing ~XF86TouchpadToggle~. And for
|
||||||
toggle it, and it will be used in my window manager configuration.
|
that, I need this small script that will actually toggle it, and it
|
||||||
|
will be used in my window manager configuration.
|
||||||
|
|
||||||
First let’s declare some variables to make this script more personal. With my
|
First let’s declare some variables to make this script more personal. With my
|
||||||
current computer (a Gazelle by System76), the name of my touchpad is the
|
current computer (a Gazelle by System76), the name of my touchpad is the
|
||||||
@ -533,7 +535,7 @@ emacsclient -c -a emacs -e "(dired \"$*\")"
|
|||||||
:HEADER-ARGS: :shebang "#!/bin/bash" :mkdirp yes :tangle ~/.local/bin/ediff
|
:HEADER-ARGS: :shebang "#!/bin/bash" :mkdirp yes :tangle ~/.local/bin/ediff
|
||||||
:END:
|
:END:
|
||||||
I want Ediff as my merge tool, not just with Git but with other
|
I want Ediff as my merge tool, not just with Git but with other
|
||||||
programs too such as =pacdiff=.
|
programs tooa, such as =pacdiff=.
|
||||||
#+begin_src bash
|
#+begin_src bash
|
||||||
emacsclient -c -a emacs -e "(ediff-files \"$1\" \"$2\")"
|
emacsclient -c -a emacs -e "(ediff-files \"$1\" \"$2\")"
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -564,9 +566,9 @@ ffmpeg -i $argv[1] -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis $argv[1].webm
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/ytplay
|
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/ytplay
|
||||||
:END:
|
:END:
|
||||||
~ytplay~ is a simple script I’ve written that allows me to play in mpv any
|
~ytplay~ is a simple script I’ve written that allows me to play in MPV
|
||||||
YouTube video at the desired resolution. The script relies on ~dmenu~ (or ~rofi~
|
any YouTube video at the desired resolution. The script relies on
|
||||||
in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself.
|
~dmenu~ (or ~rofi~ in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set URL (rofi -dmenu -i -p "Video URL")
|
set URL (rofi -dmenu -i -p "Video URL")
|
||||||
if test -n "$URL"
|
if test -n "$URL"
|
||||||
@ -899,14 +901,15 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
***** Download a Single Video
|
***** Download a Single Video
|
||||||
In order to download a single video, a simple function has been written for this
|
In order to download a single video, a simple function has been
|
||||||
that will display when downloaded how far it is down the list of videos to be
|
written for this that will display when downloaded how far it is down
|
||||||
downloaded and it will add its ID to the file listing all videos downloaded. The
|
the list of videos to be downloaded, and it will add its ID to the
|
||||||
script will also try to download the video according to the ~PREFFERED_FORMAT~
|
file listing all videos downloaded. The script will also try to
|
||||||
variable, but if the download fails it will download the default format selected
|
download the video according to the ~PREFFERED_FORMAT~ variable, but if
|
||||||
by ~youtube-dl~. If both downloads fail, the ID of the video will be added to
|
the download fails it will download the default format selected by
|
||||||
the list of failed videos. If one of the downloads succeeds, it will remove the
|
~youtube-dl~. If both downloads fail, the ID of the video will be added
|
||||||
ID from the list of failed downloads.
|
to the list of failed videos. If one of the downloads succeeds, it
|
||||||
|
will remove the ID from the list of failed downloads.
|
||||||
|
|
||||||
The first argument of the function is the video ID from YouTube, the second
|
The first argument of the function is the video ID from YouTube, the second
|
||||||
argument is the position of the video in the queue, and the third argument is
|
argument is the position of the video in the queue, and the third argument is
|
||||||
@ -969,16 +972,17 @@ by ~#~, ~;~ and ~]~ (just like ~youtube-dl~) and will download them, assuming
|
|||||||
these are channel URLs or playlist URLs, however it should also work with direct
|
these are channel URLs or playlist URLs, however it should also work with direct
|
||||||
video URLs.
|
video URLs.
|
||||||
|
|
||||||
What this function does is for each line, it will fetch the entierty of the
|
What this function does is for each line, it will fetch the entirety
|
||||||
video IDs found in a playlist or channel. Then, it will look each ID up the list
|
of the video IDs found in a playlist or channel. Then, it will look
|
||||||
of already downloaded videos and will add all new IDs to a queue of videos to be
|
each ID up the list of already downloaded videos and will add all new
|
||||||
downloaded. It will then pass each new video ID to ~_ytdl_download_video~
|
IDs to a queue of videos to be downloaded. It will then pass each new
|
||||||
directly. Beware that if you pass directly the URL of the channel, such as
|
video ID to ~_ytdl_download_video~ directly. Beware that if you pass
|
||||||
~https://www.youtube.com/user/enyay~ if you want to download Tom Scott’s videos,
|
directly the URL of the channel, such as
|
||||||
it will download everything on the main page of their channel, which means it
|
~https://www.youtube.com/user/enyay~ if you want to download Tom Scott’s
|
||||||
will even download videos from playlists they decided to put on their channel’s
|
videos, it will download everything on the main page of their channel,
|
||||||
front page, even if it is not theirs. So in that case, we need to append
|
which means it will even download videos from playlists they decided
|
||||||
~/videos~ to any channel URL.
|
to put on their channel’s front page, even if it is not theirs. So in
|
||||||
|
that case, we need to append ~/videos~ to any channel URL.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
function _ytdl_download_batch
|
function _ytdl_download_batch
|
||||||
set -q $FILE
|
set -q $FILE
|
||||||
@ -1212,7 +1216,7 @@ begin
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
What the script does first is detect everything that can be mounted. Between a
|
What the script does first is detect everything that can be mounted. Between a
|
||||||
=begin= and =end=, let’s set =LFS= as a local variable. This si in order to get
|
=begin= and =end=, let’s set =LFS= as a local variable. This is in order to get
|
||||||
sane variables in the current block.
|
sane variables in the current block.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set -l LFS
|
set -l LFS
|
||||||
@ -1243,10 +1247,10 @@ And that’s the end of our first block!
|
|||||||
end
|
end
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Alright, we’ll save what kind on drives we can mount in a temporary file called
|
Alright, we’ll save what kind on drives we can mount in a temporary
|
||||||
=/tmp/drives=. We’ll make sure it’s blank by erasing it then creating it again
|
file called =/tmp/drives=. We’ll make sure it’s blank by erasing it then
|
||||||
with =touch=, like so. The =-f= flag on =rm= is here so we get no error if we
|
creating it again with =touch=, like so. The =-f= flag on =rm= is here, so
|
||||||
try to delete a file that doesn’t exist (yet).
|
we get no error if we try to delete a file that doesn’t exist (yet).
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set -g TMPDRIVES /tmp/drives
|
set -g TMPDRIVES /tmp/drives
|
||||||
rm -f $TMPDRIVES
|
rm -f $TMPDRIVES
|
||||||
@ -1267,16 +1271,16 @@ set -g basemount /media
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
***** Get the mount point
|
***** Get the mount point
|
||||||
Now, let’s declare a function that will allow us to chose the drive we want to
|
Now, let’s declare a function that will allow us to choose the drive
|
||||||
mount.
|
we want to mount.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
function getmount
|
function getmount
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
First, we want to get our mount point. We’ll run a =find= command on each of the
|
First, we want to get our mount point. We’ll run a =find= command on
|
||||||
directories listed in =$basemount= to look for folders on which our drive could
|
each of the directories listed in =$basemount= to look for folders on
|
||||||
be mounted. This list will be passed to rofi from which we will chose our mount
|
which our drive could be mounted. This list will be passed to rofi
|
||||||
point.
|
from which we will choose our mount point.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set -g mp (for d in $basemount
|
set -g mp (for d in $basemount
|
||||||
find $d -maxdepth 5 -type d
|
find $d -maxdepth 5 -type d
|
||||||
@ -1319,9 +1323,10 @@ care of it for us.
|
|||||||
function mountusb
|
function mountusb
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now, the first thing we want to do is select the partition we want to mount.
|
Now, the first thing we want to do is select the partition we want to
|
||||||
Remember, we stored those in =$usbdrives= earlier, so let’s pipe them into rofi
|
mount. Remember, we stored those in =$usbdrives= earlier, so let’s pipe
|
||||||
so we can chose from it. Also, =awk= will get their path in =/dev=.
|
them into rofi, so we can choose from it. Also, =awk= will get their
|
||||||
|
path in =/dev=.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
set -g chosen (echo $usbdrives | \
|
set -g chosen (echo $usbdrives | \
|
||||||
rofi -dmenu -i -p "Mount which drive?" | \
|
rofi -dmenu -i -p "Mount which drive?" | \
|
||||||
@ -1346,8 +1351,8 @@ the script.
|
|||||||
test -z $mp && return 1
|
test -z $mp && return 1
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now, let’s mount it! We’ll use a switch which will detect the filesystem used so
|
Now, let’s mount it! We’ll use a switch which will detect the
|
||||||
we know how to mount the partition.
|
filesystem used, so we know how to mount the partition.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
switch (lsblk -no "fstype" $chosen)
|
switch (lsblk -no "fstype" $chosen)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -1371,8 +1376,8 @@ case '*'
|
|||||||
sudo -A mount $chosen $mp
|
sudo -A mount $chosen $mp
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
We’ll also run a =chown= on this newly mounted filesystem so the user can access
|
We’ll also run a =chown= on this newly mounted filesystem, so the user
|
||||||
it without any issues.
|
can access it without any issues.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
sudo -A chown -R $USER:(id -g $USER) $mp
|
sudo -A chown -R $USER:(id -g $USER) $mp
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -1412,13 +1417,14 @@ Let’s temporarily mount our device.
|
|||||||
jmtpfs -device=$chosen $mp
|
jmtpfs -device=$chosen $mp
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now, we need to allow our computer to mount our Android device. Depending on the
|
Now, we need to allow our computer to mount our Android device.
|
||||||
Android version it is running on, we either need to specify our device is USB
|
Depending on the Android version it is running on, we either need to
|
||||||
connected in order to exchange files, or Android will explicitely ask us if it
|
specify our device is USB connected in order to exchange files, or
|
||||||
is OK for our computer to access it. Let’s inform the user of that.
|
Android will explicitly ask us if it is OK for our computer to access
|
||||||
|
it. Let’s inform the user of that.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
echo "OK" | \
|
echo "OK" | \
|
||||||
rofi -dmenu -i -p "Press (Allow) on your phone screen, or set your USB settings to allow file transfert"
|
rofi -dmenu -i -p "Press (Allow) on your phone screen, or set your USB settings to allow file transfer"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now, let’s get the actual path of our Android filesystem we wish to mount, and
|
Now, let’s get the actual path of our Android filesystem we wish to mount, and
|
||||||
@ -1428,7 +1434,7 @@ set newchosen (jmtpfs -l | grep $bus | awk '{print $1 $2}' | sed 's/,$//')
|
|||||||
sudo -A umount $mp
|
sudo -A umount $mp
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Now we cam mount the new filesystem and send a notification if everything went
|
Now we can mount the new filesystem and send a notification if everything went
|
||||||
well.
|
well.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
jmtpfs -device=$newchosen $mp && \
|
jmtpfs -device=$newchosen $mp && \
|
||||||
@ -1471,15 +1477,15 @@ end
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
***** Ask what type of drive we want to mount
|
***** Ask what type of drive we want to mount
|
||||||
The first thing we will be asked if different types of drives are detected is
|
The first thing we will be asked if different types of drives are
|
||||||
which of these types the user wishes to mount. This is done with the function
|
detected is which of these types the user wishes to mount. This is
|
||||||
=asktype= which is declared below.
|
done with the function =asktype= which is declared below.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
function asktype
|
function asktype
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
We will use a switch statement which will use our anwser to rofi about what we
|
We will use a switch statement which will use our answer to rofi about
|
||||||
wish to mount.
|
what we wish to mount.
|
||||||
#+BEGIN_SRC fish
|
#+BEGIN_SRC fish
|
||||||
switch (cat $TMPDRIVES | rofi -dmenu -i -p "Mount which drive?")
|
switch (cat $TMPDRIVES | rofi -dmenu -i -p "Mount which drive?")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -1823,8 +1829,8 @@ if test -z $password
|
|||||||
end
|
end
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Depending on the arguments passed earlier, we might want some different
|
Depending on the arguments passed earlier, we might want some
|
||||||
behavior.
|
different behaviour.
|
||||||
#+BEGIN_SRC fish :noweb yes
|
#+BEGIN_SRC fish :noweb yes
|
||||||
if test $TYPE = "yes"
|
if test $TYPE = "yes"
|
||||||
<<rofi-pass-type>>
|
<<rofi-pass-type>>
|
||||||
@ -1833,8 +1839,8 @@ else
|
|||||||
end
|
end
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
The default behavior is to copy the password to the clipboard for 45 seconds, so
|
The default behaviour is to copy the password to the clipboard for 45
|
||||||
let’s do that.
|
seconds, so let’s do that.
|
||||||
#+NAME: rofi-pass-copy
|
#+NAME: rofi-pass-copy
|
||||||
#+BEGIN_SRC fish :noweb yes :tangle no
|
#+BEGIN_SRC fish :noweb yes :tangle no
|
||||||
pass show -c $password 2> /dev/null
|
pass show -c $password 2> /dev/null
|
||||||
|
143
docs/stumpwm.org
143
docs/stumpwm.org
@ -8,7 +8,7 @@
|
|||||||
** Introduction
|
** Introduction
|
||||||
*** What is StumpWM?
|
*** What is StumpWM?
|
||||||
[[https://stumpwm.github.io/][StumpWM]] is a tiling window manager inheriting from [[http://www.nongnu.org/ratpoison/][RatPoison]], written
|
[[https://stumpwm.github.io/][StumpWM]] is a tiling window manager inheriting from [[http://www.nongnu.org/ratpoison/][RatPoison]], written
|
||||||
entirely in [[https://common-lisp.net/][Common Lisp]] and compiled with [[http://www.sbcl.org/][SBCL]]. While it is not an
|
entirely in [[https://common-lisp.net/][Common Lisp]] and compiled with [[http://www.sbcl.org/][SBCL]]. While it is not a
|
||||||
dynamic tiling window manager like [[file:Deprecated/awesome.org][Awesome]] is, its ability of managing
|
dynamic tiling window manager like [[file:Deprecated/awesome.org][Awesome]] is, its ability of managing
|
||||||
windows in frames and using keychords with keymaps like Emacs does is
|
windows in frames and using keychords with keymaps like Emacs does is
|
||||||
a huge plus for me, not to mention the fact its configuration file is
|
a huge plus for me, not to mention the fact its configuration file is
|
||||||
@ -28,12 +28,12 @@ This file has two main goals:
|
|||||||
configuration, thanks to Emacs’ org-mode, and thanks to org-mode’s
|
configuration, thanks to Emacs’ org-mode, and thanks to org-mode’s
|
||||||
literate config capabilities.
|
literate config capabilities.
|
||||||
|
|
||||||
Almost all of the visible source blocks if not all will be included
|
Almost all the visible source blocks if not all will be included in
|
||||||
in my configuration files through tangling, which can be done in
|
my configuration files through tangling, which can be done in Emacs
|
||||||
Emacs when this file is opened through ~M-x org-babel-tangle~, which
|
when this file is opened through ~M-x org-babel-tangle~, which will
|
||||||
will write my configuration files based on the source blocks present
|
write my configuration files based on the source blocks present in
|
||||||
in this document. This file is not only my config’s documentation,
|
this document. This file is not only my config’s documentation, it
|
||||||
it /*is*/ my configuration.
|
/*is*/ my configuration.
|
||||||
- Be my documentation on my StumpWM configuration. That way, I’ll
|
- Be my documentation on my StumpWM configuration. That way, I’ll
|
||||||
never forget which block of code does what.
|
never forget which block of code does what.
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ follows this architecture:
|
|||||||
- ~init.el~ :: My main configuration file, glues everything together. It
|
- ~init.el~ :: My main configuration file, glues everything together. It
|
||||||
loads all of my configuration files as well as some modules I find
|
loads all of my configuration files as well as some modules I find
|
||||||
useful;
|
useful;
|
||||||
- ~colors.lisp~ :: This file defines colors that will be used in my
|
- ~colors.lisp~ :: This file defines colours that will be used in my
|
||||||
~theme.lisp~ and ~modeline.lisp~ files. Let’s make my code DRY, or as I
|
~theme.lisp~ and ~modeline.lisp~ files. Let’s make my code DRY, or as I
|
||||||
prefer to say, DRYD (/Don’t Repeat Yourself Dummy/).
|
prefer to say, DRYD (/Don’t Repeat Yourself Dummy/).
|
||||||
- ~commands.lisp~ :: Lisp commands, in case I want to bind some
|
- ~commands.lisp~ :: Lisp commands, in case I want to bind some
|
||||||
@ -66,7 +66,7 @@ follows this architecture:
|
|||||||
- ~utilities.lisp~ :: Here you can find my StumpWM configuration that
|
- ~utilities.lisp~ :: Here you can find my StumpWM configuration that
|
||||||
isn’t really related to the rest of the config, for instance utility
|
isn’t really related to the rest of the config, for instance utility
|
||||||
code for connecting by SSH to some host.
|
code for connecting by SSH to some host.
|
||||||
- ~theme.lisp~ :: manages the color theme of StumpWM, the default
|
- ~theme.lisp~ :: manages the colour theme of StumpWM, the default
|
||||||
placement of some windows and StumpWM’s gaps.
|
placement of some windows and StumpWM’s gaps.
|
||||||
|
|
||||||
You will also find below my ~xinit~ file for StumpWM, exported to
|
You will also find below my ~xinit~ file for StumpWM, exported to
|
||||||
@ -239,13 +239,13 @@ Finally, we can notify the user everything is ready.
|
|||||||
|
|
||||||
And it’s done! We can now move on to the creation of the other CLisp files.
|
And it’s done! We can now move on to the creation of the other CLisp files.
|
||||||
|
|
||||||
** Colors
|
** Colours
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/colors.lisp
|
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/colors.lisp
|
||||||
:END:
|
:END:
|
||||||
If you’ve taken a look at the rest of my dotfiles, you may have
|
If you’ve had a look at the rest of my dotfiles, you may have noticed
|
||||||
noticed I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here
|
I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here again!
|
||||||
again! Here is a small table listing the Nord colors:
|
Here is a small table listing the Nord colours:
|
||||||
#+name: nord-colors
|
#+name: nord-colors
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
|--------+---------|
|
|--------+---------|
|
||||||
@ -299,7 +299,7 @@ code looks like so:
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Finally, let’s also modify the default colors StumpWM has. I’ll try to
|
Finally, let’s also modify the default colors StumpWM has. I’ll try to
|
||||||
respect the original colors while converting them to Nord. We also
|
respect the original colours while converting them to Nord. We also
|
||||||
need to reload them now that we modified them.
|
need to reload them now that we modified them.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(setq *colors*
|
(setq *colors*
|
||||||
@ -352,7 +352,7 @@ The modeline is pretty easy. First, let’s load the ~colors.lisp~ file we just
|
|||||||
(load "~/.stumpwm.d/colors.lisp")
|
(load "~/.stumpwm.d/colors.lisp")
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Next, we can set some colors for the modeline. Let’s set the
|
Next, we can set some colours for the modeline. Let’s set the
|
||||||
background of the modeline to Nord1 and the foreground to Nord5, I
|
background of the modeline to Nord1 and the foreground to Nord5, I
|
||||||
think this is a pretty good combination.
|
think this is a pretty good combination.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
@ -361,7 +361,7 @@ think this is a pretty good combination.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
We /could/ also use some borders in the modeline. But we won’t. Let’s
|
We /could/ also use some borders in the modeline. But we won’t. Let’s
|
||||||
still set its color to Nord1, just in case.
|
still set its colour to Nord1, just in case.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(setf *mode-line-border-color* phundrak-nord1
|
(setf *mode-line-border-color* phundrak-nord1
|
||||||
,*mode-line-border-width* 0)
|
,*mode-line-border-width* 0)
|
||||||
@ -394,7 +394,7 @@ Here are some modules that we will load for the modeline:
|
|||||||
(load-module "mem")
|
(load-module "mem")
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
We need to set some variables so modules can be displayed correctly.
|
We need to set some variables, so modules can be displayed correctly.
|
||||||
Note that the character between the font switchers in the second CPU
|
Note that the character between the font switchers in the second CPU
|
||||||
formatter is U+E082, which symbolizes the CPU.
|
formatter is U+E082, which symbolizes the CPU.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
@ -474,7 +474,7 @@ when the `car' is a formatter and t when it is a shell command."
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
It is then easy to define a command that can call this function and
|
It is then easy to define a command that can call this function and
|
||||||
set this variable so we can sort of reload the mode-line.
|
set this variable, so we can sort of reload the mode-line.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defcommand reload-modeline () ()
|
(defcommand reload-modeline () ()
|
||||||
"Reload modeline."
|
"Reload modeline."
|
||||||
@ -554,7 +554,7 @@ are manual tiling groups. Otherwise, as you can see above, they can
|
|||||||
also be dynamic tiling groups or floating groups.
|
also be dynamic tiling groups or floating groups.
|
||||||
|
|
||||||
Next, let’s make sure no previous window placement rule is in place,
|
Next, let’s make sure no previous window placement rule is in place,
|
||||||
this will avoid unexpected and hard-to-debug behavior.
|
this will avoid unexpected and hard-to-debug behaviour.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(clear-window-placement-rules)
|
(clear-window-placement-rules)
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -595,7 +595,8 @@ of the available space.
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/theme.lisp :noweb yes
|
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/theme.lisp :noweb yes
|
||||||
:END:
|
:END:
|
||||||
As in the modeline file, the first thing we’ll do is to load our colors.
|
As in the modeline file, the first thing we’ll do is to load our
|
||||||
|
colours.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(load "~/.stumpwm.d/colors.lisp")
|
(load "~/.stumpwm.d/colors.lisp")
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -627,7 +628,7 @@ src_lisp[:exports code]{(ql:add-to-init-file)} so it is loaded each
|
|||||||
time you start your Lisp interpreter. ~SBCL~ should be your CommonLisp
|
time you start your Lisp interpreter. ~SBCL~ should be your CommonLisp
|
||||||
interpreter of choice since StumpWM is generally compiled with it. The
|
interpreter of choice since StumpWM is generally compiled with it. The
|
||||||
main advantage is also that SBCL supports multithreading, unlike
|
main advantage is also that SBCL supports multithreading, unlike
|
||||||
clisp. In case StumpWM doesn’t find your font, spin up SBCL and
|
CLisp. In case StumpWM doesn’t find your font, spin up SBCL and
|
||||||
execute the following lines:
|
execute the following lines:
|
||||||
#+begin_src lisp :tangle no
|
#+begin_src lisp :tangle no
|
||||||
(ql:quickload :clx-truetype)
|
(ql:quickload :clx-truetype)
|
||||||
@ -728,7 +729,7 @@ want to get them back, they’ll be nice to have.
|
|||||||
(set-float-unfocus-color phundrak-nord3)
|
(set-float-unfocus-color phundrak-nord3)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Let’s also set the colors of the message and input windows:
|
Let’s also set the colours of the message and input windows:
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(set-fg-color phundrak-nord4)
|
(set-fg-color phundrak-nord4)
|
||||||
(set-bg-color phundrak-nord1)
|
(set-bg-color phundrak-nord1)
|
||||||
@ -794,7 +795,7 @@ Finally, let’s enable our gaps:
|
|||||||
:END:
|
:END:
|
||||||
The first command I declare in this file is a command that will avoid
|
The first command I declare in this file is a command that will avoid
|
||||||
me invoking too many Firefox instances. Either Firefox is not already
|
me invoking too many Firefox instances. Either Firefox is not already
|
||||||
running and an instance is launched, or one already is and we are
|
running and an instance is launched, or one already is, and we are
|
||||||
brought to it. This is done like so:
|
brought to it. This is done like so:
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defcommand firefox () ()
|
(defcommand firefox () ()
|
||||||
@ -837,56 +838,6 @@ a program.
|
|||||||
"kitty")))))
|
"kitty")))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** At work
|
|
||||||
When I’m at work, I have a desktop layout I always use. No need to
|
|
||||||
describe it here, but I want a quick command to save my layout in case
|
|
||||||
I change it a bit as well as a command to load it. That way, I can
|
|
||||||
automatically organize my screens. These command will save and load
|
|
||||||
the dump where the variable ~*my/desktop-dump-file*~ points at.
|
|
||||||
#+begin_src lisp
|
|
||||||
(defvar *my/desktop-dump-file* "~/.cache/stump-at-work"
|
|
||||||
"Where my desktop dump should go and be loaded from.")
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
To save the current desktop, I can write a wrapper around
|
|
||||||
~dump-desktop-to-file~.
|
|
||||||
#+begin_src lisp
|
|
||||||
(defcommand dump-work () ()
|
|
||||||
"Save desktop layout when at work."
|
|
||||||
(dump-desktop-to-file *my/desktop-dump-file*))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Basically the same goes for loading the desktop layout, but this time
|
|
||||||
it’s ~restore-from-file~ that’s wrapped. I also want to launch Global
|
|
||||||
Protect at the same time, because I always forget to before launching
|
|
||||||
~launch-work~ described below, and automatically connect my bluetooth
|
|
||||||
headset.
|
|
||||||
#+begin_src lisp
|
|
||||||
(load-module "swm-gaps")
|
|
||||||
(defcommand at-work () ()
|
|
||||||
"Restore desktop layout when at work."
|
|
||||||
(swm-gaps:toggle-gaps-off)
|
|
||||||
(run-shell-command "pkill picom" t)
|
|
||||||
(run-shell-command "autorandr -l work" t)
|
|
||||||
(run-shell-command "xwallpaper --zoom $(cat $HOME/.cache/wallpaper)" t)
|
|
||||||
(run-shell-command "gpclient")
|
|
||||||
(run-shell-command "bluetoothctl power on && bluetoothctl connect 14:3F:A6:6D:E3:D9"))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
If I want to quickly launch all programs I will need, I can also
|
|
||||||
invoke the command ~launch-work~.
|
|
||||||
#+begin_src lisp
|
|
||||||
(defcommand launch-work () ()
|
|
||||||
"Launch programs I need at work."
|
|
||||||
(run-shell-command "firefox")
|
|
||||||
(run-shell-command "remmina")
|
|
||||||
(run-shell-command "kitty tmux")
|
|
||||||
(run-shell-command "teams")
|
|
||||||
(run-shell-command "discord")
|
|
||||||
(restore-from-file *my/desktop-dump-file*)
|
|
||||||
(restore-window-placement-rules "~/.cache/placement-rules"))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Keybinds
|
** Keybinds
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/keybindings.lisp :noweb yes
|
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/keybindings.lisp :noweb yes
|
||||||
@ -911,7 +862,7 @@ a couple of keybinds to other keymaps. I hope this will get improved
|
|||||||
soon.
|
soon.
|
||||||
|
|
||||||
There are also two keymaps you need to be aware of:
|
There are also two keymaps you need to be aware of:
|
||||||
- ~*top-map*~ :: This is the keymap available litteraly everywhere. With
|
- ~*top-map*~ :: This is the keymap available literally everywhere. With
|
||||||
this keymap, you can emulate most of your keybinds you have in other
|
this keymap, you can emulate most of your keybinds you have in other
|
||||||
window managers. For instance, I cannot live without ~s-RET~ for
|
window managers. For instance, I cannot live without ~s-RET~ for
|
||||||
creating new shells, so I’ll bind it to ~*top-map*~. But it’s good
|
creating new shells, so I’ll bind it to ~*top-map*~. But it’s good
|
||||||
@ -928,7 +879,7 @@ which would be displayed instead of the actual function or keymap
|
|||||||
called by keybind. It would be nicer to see ~frames~ rather than
|
called by keybind. It would be nicer to see ~frames~ rather than
|
||||||
~*my-frames-management-keymap*~.
|
~*my-frames-management-keymap*~.
|
||||||
|
|
||||||
Anyways, as mentionned above, ~*root-map*~ is already pre-populated with
|
Anyway, as mentioned above, ~*root-map*~ is already pre-populated with
|
||||||
some cool stuff for you, and you can access it with a prefix which is
|
some cool stuff for you, and you can access it with a prefix which is
|
||||||
by default ~C-t~. But if this doesn’t suit you, you can always redefine
|
by default ~C-t~. But if this doesn’t suit you, you can always redefine
|
||||||
it with ~set-prefix-key~. I personally like to have my space key as a
|
it with ~set-prefix-key~. I personally like to have my space key as a
|
||||||
@ -1020,7 +971,7 @@ such as « or » and have them replaced with their actual name when
|
|||||||
|
|
||||||
*** Applications
|
*** Applications
|
||||||
When I speak about applications, I speak about programs and scripts in
|
When I speak about applications, I speak about programs and scripts in
|
||||||
general. With these keymaps, I can launch programs I often have use
|
general. With these keymaps, I can launch programs I have often use
|
||||||
for, but I can also launch some scripts as well as take screenshots.
|
for, but I can also launch some scripts as well as take screenshots.
|
||||||
|
|
||||||
First, let’s create my ~rofi~ scripts keymap.
|
First, let’s create my ~rofi~ scripts keymap.
|
||||||
@ -1107,7 +1058,7 @@ and the ~XF86Mail~ key opens mu4e in Emacs.
|
|||||||
The module ~end-session~ provides functions for gracefully ending the
|
The module ~end-session~ provides functions for gracefully ending the
|
||||||
user session, powering off, restarting, and suspending the computer.
|
user session, powering off, restarting, and suspending the computer.
|
||||||
It also provides a function that interactively asks what the user
|
It also provides a function that interactively asks what the user
|
||||||
whishes to do.
|
wishes to do.
|
||||||
#+name: end-session-keymap
|
#+name: end-session-keymap
|
||||||
| Keychord | Function |
|
| Keychord | Function |
|
||||||
|----------+-------------------|
|
|----------+-------------------|
|
||||||
@ -1539,7 +1490,7 @@ anywhere else:
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
From time to time, I need to switch between different keyboard
|
From time to time, I need to switch between different keyboard
|
||||||
layouts, especially to the US Qwerty layout when I’m playing some
|
layouts, especially to the US QWERTY layout when I’m playing some
|
||||||
games and the bépo layout most of the time. I’ll use the command
|
games and the bépo layout most of the time. I’ll use the command
|
||||||
~switch-layout~ defined above.
|
~switch-layout~ defined above.
|
||||||
#+name: keyboard-layout-map
|
#+name: keyboard-layout-map
|
||||||
@ -1562,7 +1513,7 @@ games and the bépo layout most of the time. I’ll use the command
|
|||||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/utilities.lisp :noweb yes
|
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/utilities.lisp :noweb yes
|
||||||
:END:
|
:END:
|
||||||
Part of my configuration is not really related to StumpWM itself, or
|
Part of my configuration is not really related to StumpWM itself, or
|
||||||
rather it adds new behavior StumpWM doesn’t have. ~utilities.lisp~
|
rather it adds new behaviour StumpWM doesn’t have. ~utilities.lisp~
|
||||||
stores all this code in one place.
|
stores all this code in one place.
|
||||||
|
|
||||||
*** Binwarp
|
*** Binwarp
|
||||||
@ -1593,12 +1544,12 @@ Binwarp mode is now available from the keybind ~s-m~ at top level.
|
|||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/bluetooth.lisp :noweb yes
|
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/bluetooth.lisp :noweb yes
|
||||||
:END:
|
:END:
|
||||||
Although there is a bluetooth module for the modeline, this is about
|
Although there is a Bluetooth module for the modeline, this is about
|
||||||
the extent to which StumpWM can interact with the system’s bluetooth.
|
the extent to which StumpWM can interact with the system’s Bluetooth.
|
||||||
However, I wish for some more interecactivity, like powering on and
|
However, I wish for some more interactivity, like powering on and
|
||||||
off bluetooth, connecting to devices and so on.
|
off Bluetooth, connecting to devices and so on.
|
||||||
|
|
||||||
First, out code relies on ~cl-ppcre~, so let’s quickload it.
|
Firstly, our code relies on ~cl-ppcre~, so let’s quickload it.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(ql:quickload :cl-ppcre)
|
(ql:quickload :cl-ppcre)
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -1610,7 +1561,7 @@ Let’s indicate which command we’ll be using.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Utilities
|
**** Utilities
|
||||||
We’ll need a couple of functions that will take care of stuff for us
|
We’ll need a couple of functions that will take care of stuff for us,
|
||||||
so we don’t have to repeat ourselves. The first one is a way for us to
|
so we don’t have to repeat ourselves. The first one is a way for us to
|
||||||
share a message. The function ~bluetooth-message~ will first display
|
share a message. The function ~bluetooth-message~ will first display
|
||||||
~Bluetooth:~ in green, then it will display the message we want it to
|
~Bluetooth:~ in green, then it will display the message we want it to
|
||||||
@ -1637,7 +1588,7 @@ with a space as their separator.
|
|||||||
|
|
||||||
Now we can put ~bluetooth-make-command~ to use with ~bluetooth-command~
|
Now we can put ~bluetooth-make-command~ to use with ~bluetooth-command~
|
||||||
which will actually run the result of the former. As you can see, it
|
which will actually run the result of the former. As you can see, it
|
||||||
also collects the output so we can display it later in another
|
also collects the output, so we can display it later in another
|
||||||
function.
|
function.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defmacro bluetooth-command (&rest args)
|
(defmacro bluetooth-command (&rest args)
|
||||||
@ -1656,8 +1607,8 @@ call src_lisp[:exports code]{(bluetooth-message-command "power"
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Toggle Bluetooth On and Off
|
**** Toggle Bluetooth On and Off
|
||||||
This part is easy. Now that we can call our bluetooth commands easily,
|
This part is easy. Now that we can call our Bluetooth commands easily,
|
||||||
we can easily define how to turn on bluetooth.
|
we can easily define how to turn on Bluetooth.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defcommand bluetooth-turn-on () ()
|
(defcommand bluetooth-turn-on () ()
|
||||||
"Turn on bluetooth."
|
"Turn on bluetooth."
|
||||||
@ -1672,7 +1623,7 @@ And how to power it off.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Bluetooth Devices
|
**** Bluetooth Devices
|
||||||
In order to manipulate bluetooth device, which we can represent as a
|
In order to manipulate Bluetooth device, which we can represent as a
|
||||||
MAC address and a name, we can create a structure that will make use
|
MAC address and a name, we can create a structure that will make use
|
||||||
of a constructor for simpler use. The constructor
|
of a constructor for simpler use. The constructor
|
||||||
~make-bluetooth-device-from-command~ expects an entry such as ~Device
|
~make-bluetooth-device-from-command~ expects an entry such as ~Device
|
||||||
@ -1704,10 +1655,10 @@ We can now collect our devices easily.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Connect to a device
|
**** Connect to a device
|
||||||
When we want to connect to a bluetooth device, we always need
|
When we want to connect to a Bluetooth device, we always need
|
||||||
bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then
|
Bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then
|
||||||
the function will attempt to connect to the device specified by the
|
the function will attempt to connect to the device specified by the
|
||||||
~device~ argument, whether the argument is a bluetooth structure as
|
~device~ argument, whether the argument is a Bluetooth structure as
|
||||||
defined above or a plain MAC address.
|
defined above or a plain MAC address.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defun bluetooth-connect-device (device)
|
(defun bluetooth-connect-device (device)
|
||||||
@ -1722,7 +1673,7 @@ defined above or a plain MAC address.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The command to connect to a device displays a choice between the
|
The command to connect to a device displays a choice between the
|
||||||
collected bluetooth device and the user only has to select it. It will
|
collected Bluetooth device and the user only has to select it. It will
|
||||||
then attempt to connect to it.
|
then attempt to connect to it.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defcommand bluetooth-connect () ()
|
(defcommand bluetooth-connect () ()
|
||||||
@ -1739,7 +1690,7 @@ then attempt to connect to it.
|
|||||||
|
|
||||||
**** Keybinds
|
**** Keybinds
|
||||||
It’s all nice and all, but typing manually the commands with ~s-SPC ;~
|
It’s all nice and all, but typing manually the commands with ~s-SPC ;~
|
||||||
is a bit tiring, so let’s define our bluetooth keymap which we will
|
is a bit tiring, so let’s define our Bluetooth keymap which we will
|
||||||
bind to ~s-SPC B~.
|
bind to ~s-SPC B~.
|
||||||
#+name: bluetooth-keymap
|
#+name: bluetooth-keymap
|
||||||
| Keychord | Command |
|
| Keychord | Command |
|
||||||
@ -1843,8 +1794,8 @@ I’m currently in the process of writing functions to interact with
|
|||||||
Systemd directly through StumpWM. For now, not much work is done, but
|
Systemd directly through StumpWM. For now, not much work is done, but
|
||||||
it’s a start.
|
it’s a start.
|
||||||
|
|
||||||
First of all, I have the following function that lists all the system
|
Firstly, I have the following function that lists all the system or
|
||||||
or user services.
|
user services.
|
||||||
#+begin_src lisp
|
#+begin_src lisp
|
||||||
(defun systemd-get-services (&key user-p)
|
(defun systemd-get-services (&key user-p)
|
||||||
"Collect all systemd services running.
|
"Collect all systemd services running.
|
||||||
|
@ -32,7 +32,7 @@ set-window-option -g mode-keys vi
|
|||||||
** Windows and panes configuration
|
** Windows and panes configuration
|
||||||
Although I agree in computer science most things should begin with
|
Although I agree in computer science most things should begin with
|
||||||
zero, I find it quite weird to see my first window and my first pane
|
zero, I find it quite weird to see my first window and my first pane
|
||||||
to be labeled with it rather than one. So, let’s pull a Lua on Tmux
|
to be labelled with it rather than one. So, let’s pull a Lua on Tmux
|
||||||
and force it to begin with 1 instead of 0.
|
and force it to begin with 1 instead of 0.
|
||||||
#+begin_src tmux
|
#+begin_src tmux
|
||||||
set -g base-index 1
|
set -g base-index 1
|
||||||
@ -106,9 +106,9 @@ set -g @resurrect-processes '<<resurrect-processes()>>'
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Keybindings
|
** Keybindings
|
||||||
First of all, I don’t like prefixing all of my keybindings with ~C-b~,
|
Firstly, I don’t like prefixing all of my keybindings with ~C-b~, that’s
|
||||||
that’s what I use in ~insert-mode~ in Emacs to make the cursor go back.
|
what I use in ~insert-mode~ in Emacs to make the cursor go back. So
|
||||||
So instead, let’s set meta with space as my prefix.
|
instead, let’s set meta with space as my prefix.
|
||||||
#+begin_src tmux
|
#+begin_src tmux
|
||||||
unbind C-b
|
unbind C-b
|
||||||
set -g prefix M-Space
|
set -g prefix M-Space
|
||||||
@ -222,7 +222,10 @@ with the main prefix.
|
|||||||
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
|
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
In order to access more easily the different windows, I want to be able to type =<prefix> TAB <window number>=. However, I’m using the bépo layout, numbers are available only when pressing shift. Otherwise, the characters typed are ="«»()@+-/*= (from 1 to 0).
|
In order to access more easily the different windows, I want to be
|
||||||
|
able to type =<prefix> TAB <window number>=. However, I’m using the bépo
|
||||||
|
layout, numbers are available only when pressing shift. Otherwise, the
|
||||||
|
characters typed are ="«»()@+-/*= (from 1 to 0).
|
||||||
#+begin_src emacs-lisp :wrap src tmux :exports code
|
#+begin_src emacs-lisp :wrap src tmux :exports code
|
||||||
(let ((keybinds "")
|
(let ((keybinds "")
|
||||||
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
|
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
|
||||||
@ -251,7 +254,7 @@ bind-key -T windows * select-window -t :=10
|
|||||||
|
|
||||||
*** Copy in vi mode
|
*** Copy in vi mode
|
||||||
Tmux has a nice mode for vim keybindings users: =copy-mode-vi= which
|
Tmux has a nice mode for vim keybindings users: =copy-mode-vi= which
|
||||||
allows to move the cursor around in the pane, select some stuff, and
|
allows moving the cursor around in the pane, select some stuff, and
|
||||||
copy it. But first, I need to unbind some keys:
|
copy it. But first, I need to unbind some keys:
|
||||||
#+begin_src tmux
|
#+begin_src tmux
|
||||||
unbind -T copy-mode-vi H
|
unbind -T copy-mode-vi H
|
||||||
|
Loading…
Reference in New Issue
Block a user