This commit is contained in:
parent
dbf3c5e212
commit
3354f79554
@ -19,14 +19,14 @@ respectively. These servers are also located in France.
|
||||
** Cookies
|
||||
*** What are cookies?
|
||||
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
|
||||
of them, they are nevertheless extremely common in order to allow
|
||||
phone when you visit a website. Although not all sites make use of
|
||||
them, they are nevertheless extremely common in order to allow
|
||||
websites to function properly or function properly or more
|
||||
efficiently.
|
||||
|
||||
This website uses some functional cookies in order to remember your
|
||||
preferences, such as your preferred language or its color theme. These
|
||||
cookies are not and cannot be used to track you.
|
||||
preferences, such as your preferred language or its colour theme.
|
||||
These cookies are not and cannot be used to track you.
|
||||
|
||||
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
|
||||
@ -47,8 +47,8 @@ Google).
|
||||
*** What about other methods of tracking users?
|
||||
There are other more subtle methods of tracking someone 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
|
||||
possible to store Flash cookies or local shared objects.
|
||||
screen, such as web beacons (minuscule images). It is also possible to
|
||||
store Flash cookies or local shared objects.
|
||||
|
||||
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
|
||||
|
||||
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]].
|
||||
|
@ -1,4 +1,4 @@
|
||||
#+TITLE: Arch Linux, Phundrak-flavored
|
||||
#+TITLE: Arch Linux, Phundrak-flavoured
|
||||
#+setupfile: headers
|
||||
#+PROPERTY: header-args :tangle no :exports none
|
||||
#+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
|
||||
|
||||
* Bootstrap Script
|
||||
Here will be presented what I do to get my system up and running on a fresh Arch
|
||||
Linux install. These installation instructions were written in order to get an
|
||||
Arch Linux distribution up and running with the same configuration as my main
|
||||
computer’s and my travelling laptop’s configuration.
|
||||
Here will be presented what I do to get my system up and running on a
|
||||
fresh Arch Linux install. These installation instructions were written
|
||||
in order to get an Arch Linux distribution up and running with the
|
||||
same configuration as my main computer’s and my travelling laptop’s
|
||||
configuration.
|
||||
|
||||
** 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
|
||||
install easily the distro (I’ve done it so many times, I know how it works now).
|
||||
Usually, my distros will be installed on two partitions: ~/home~ and ~/~ (root).
|
||||
I usually install Arch from the [[https://www.archlinux.org/download/][vanilla ISO]], however I began using
|
||||
[[https://github.com/MatMoul/archfi][archfi]] to install easily the distro (I’ve done it so many times, I
|
||||
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
|
||||
~/boot/efi~. I generally use ~systemd-boot~ as my boot manager, but if you are
|
||||
more comfortable with another one, just install what you want. Be aware that if
|
||||
you format your ~/boot~ partition, you will delete all boot managers that
|
||||
already exist; so, if you are dual-booting, *DO NOT FORMAT IT*. Yes, I made the
|
||||
mistake of wiping the Windows boot manager when I used to dual-boot.
|
||||
If the computer supports EFI bootloaders, the EFI partition will be
|
||||
mounted on ~/boot/efi~. I generally use ~systemd-boot~ as my boot manager,
|
||||
but if you are more comfortable with another one, just install what
|
||||
you want. Be aware that if you format your ~/boot~ partition, you will
|
||||
delete all boot managers that already exist; so, if you are
|
||||
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
|
||||
have a swap partition at least twice the size of your installed RAM. That is
|
||||
because when this command will be run, the system will try to save the current
|
||||
state of your machine, stored in your RAM, to the swap filesystem. If there is
|
||||
not enough space, the 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
|
||||
In order to use the ~suspend-then-hibernate~ systemd command, it is
|
||||
necessary to have a swap partition at least twice the size of your
|
||||
installed RAM. That is because when this command will be run, the
|
||||
system will try to save the current state of your machine, stored in
|
||||
your RAM, to the swap filesystem. If there is not enough space, the
|
||||
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.
|
||||
|
||||
*** 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
|
||||
#+END_SRC
|
||||
|
||||
This will update the packages from your live ISO, and you will get the best
|
||||
mirrors for your installation. Of course, change the countries accordingly to
|
||||
your location. In my case, I am only interested in French, German, and Belgian
|
||||
mirrors.
|
||||
This will update the packages from your live ISO, and you will get the
|
||||
best mirrors for your installation. Of course, change the countries
|
||||
accordingly to your location. In my case, I am only interested in
|
||||
French, German, and Belgian mirrors.
|
||||
|
||||
*** Install the system
|
||||
Then you can use a custom script to ease your installation of Arch if you do not
|
||||
wish to do it manually. Personally, I’ve done it several times already, I know
|
||||
how the distro works, I just want to be able to install my distro quickly now.
|
||||
I’ll need to download the script with ~wget~, but apparently it isn’t installed
|
||||
by default on Arch ISOs anymore, so I’ll need to install it.
|
||||
Then you can use a custom script to ease your installation of Arch if
|
||||
you do not wish to do it manually. Personally, I’ve done it several
|
||||
times already, I know how the distro works, I just want to be able to
|
||||
install my distro quickly now. I’ll need to download the script with
|
||||
~wget~, but apparently it isn’t installed by default on Arch ISOs any
|
||||
more, so I’ll need to install it.
|
||||
#+BEGIN_SRC sh
|
||||
pacman -S wget
|
||||
#+END_SRC
|
||||
@ -60,13 +65,14 @@ wget archfi.sf.net/archfi
|
||||
sh archfi
|
||||
#+END_SRC
|
||||
|
||||
Then, follow the instructions and install Arch Linux. Take the opportunity to
|
||||
install as many packages as you need, mainly ~paru~ which I use as my package
|
||||
manager (it is just a wrapper for ~pacman~) and AUR helper, and ~pacman-contrib~
|
||||
which will help us to install some packages later.
|
||||
Then, follow the instructions and install Arch Linux. Take the
|
||||
opportunity to install as many packages as you need, mainly ~paru~ which
|
||||
I use as my package manager (it is just a wrapper for ~pacman~) and AUR
|
||||
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
|
||||
your computer.
|
||||
Once your system is installed, reboot and remove your installation
|
||||
media from your computer.
|
||||
|
||||
** Execute bootstrap
|
||||
:PROPERTIES:
|
||||
@ -85,8 +91,8 @@ And now that ~paru~ is available, we can install ~yadm~:
|
||||
paru -S yadm
|
||||
#+END_SRC
|
||||
|
||||
~yadm~ comes with a very handy feature: its bootstrap script. It can be executed
|
||||
automatically once the dotfiles are cloned with yadm:
|
||||
~yadm~ comes with a very handy feature: its bootstrap script. It can be
|
||||
executed automatically once the dotfiles are cloned with yadm:
|
||||
#+BEGIN_SRC sh
|
||||
yadm clone https://labs.phundrak.com/phundrak/dotfiles
|
||||
# or if labs.phundrak.com is down or too slow for you
|
||||
@ -107,11 +113,11 @@ end
|
||||
#+END_SRC
|
||||
|
||||
*** Get a correct keyboard layout
|
||||
I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by Dvorak
|
||||
layouts, however I sometimes need to switch back to the standard French AZERTY
|
||||
or the American QWERTY layout, so I make it so the Menu key switches for me my
|
||||
layout between these three. This makes it so my xorg configuration of my
|
||||
keyboard looks like this:
|
||||
I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by
|
||||
Dvorak layouts, however I sometimes need to switch back to the
|
||||
standard French AZERTY or the American QWERTY layout, so I make it so
|
||||
the Menu key switches for me my layout between these three. This makes
|
||||
it so my Xorg configuration of my keyboard looks like this:
|
||||
#+BEGIN_SRC fish
|
||||
set keyboardconf \
|
||||
'Section "InputClass"
|
||||
@ -124,7 +130,8 @@ set keyboardconf \
|
||||
EndSection'
|
||||
#+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
|
||||
printf "\n# Set keyboard layout #########################################################\n\n"
|
||||
whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
|
||||
@ -134,8 +141,8 @@ end
|
||||
#+END_SRC
|
||||
|
||||
*** Set our locale
|
||||
I use two main locales, the French and US UTF-8 locales, and I like to keep the
|
||||
Japanese locale activated just in case.
|
||||
I use two main locales, the French and US UTF-8 locales, and I like to
|
||||
keep the Japanese locale activated just in case.
|
||||
#+BEGIN_SRC fish
|
||||
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
|
||||
#+END_SRC
|
||||
@ -164,7 +171,7 @@ LC_ADDRESS=fr_FR.UTF-8
|
||||
LC_MEASUREMENT=fr_FR.UTF-8"
|
||||
#+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
|
||||
whiptail --yesno "Do you agree to have the following locale set?\n\n $localeconf" 20 43
|
||||
if test $status -eq 0
|
||||
@ -179,8 +186,8 @@ sudo locale-gen
|
||||
#+END_SRC
|
||||
|
||||
*** Create some folders
|
||||
Let’s create some folders we might need for mounting our drives, Android devices
|
||||
and CDs.
|
||||
Let’s create some folders we might need for mounting our drives,
|
||||
Android devices and CDs.
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Create directories for mounting #############################################\n\n"
|
||||
sudo mkdir -p /mnt/{USB,CD,Android}
|
||||
@ -198,7 +205,7 @@ end
|
||||
#+END_SRC
|
||||
|
||||
*** 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.
|
||||
#+name: packages-system
|
||||
| Package name | Why I need it |
|
||||
@ -381,7 +388,7 @@ Terminal utilities
|
||||
| unrar | Support for rar file format |
|
||||
| w3m | Terminal web browser |
|
||||
| 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 |
|
||||
| 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()>>
|
||||
#+END_SRC
|
||||
|
||||
The next step is to tangle all the Org files. Here is the list of files that are
|
||||
to be tangled:
|
||||
The next step is to tangle all the Org files. Here is the list of
|
||||
files that are to be tangled:
|
||||
#+NAME: tangled-files
|
||||
| filename |
|
||||
|--------------|
|
||||
@ -636,8 +643,8 @@ printf "\n# Tangling org files #################################################
|
||||
|
||||
*** Set up dotfiles’ git repository
|
||||
**** Update our dotfiles’ remotes
|
||||
This line in the bootstrap script will test if the current user is using my
|
||||
username. If yes, it’s probably me.
|
||||
This line in the bootstrap script will test if the current user is
|
||||
using my username. If yes, it’s probably me.
|
||||
#+BEGIN_SRC fish
|
||||
if test "$USER" = 'phundrak'
|
||||
#+END_SRC
|
||||
@ -661,20 +668,21 @@ end
|
||||
#+END_SRC
|
||||
|
||||
**** Update our submodules
|
||||
Now we can download the various dependencies of our dotfiles. To do so, let’s
|
||||
run the following command:
|
||||
Now we can download the various dependencies of our dotfiles. To do
|
||||
so, let’s run the following command:
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Getting yadm susbmodules ####################################################\n\n"
|
||||
yadm submodule update --init --recursive
|
||||
#+END_SRC
|
||||
|
||||
*** Enable some services
|
||||
We have installed some packages which require some services to run. Let’s enable
|
||||
them.
|
||||
We have installed some packages which require some services to run.
|
||||
Let’s enable them.
|
||||
|
||||
**** Systemd-timesyncd
|
||||
This service enables time syncing with the NTP protocol, so I can be sure my
|
||||
computer’s time is correct. The service first needs to be enabled:
|
||||
This service enables time syncing with the NTP protocol, so I can be
|
||||
sure my computer’s time is correct. The service first needs to be
|
||||
enabled:
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Enabling timesync ###########################################################\n\n"
|
||||
sudo systemctl enable --now systemd-timesyncd
|
||||
@ -712,10 +720,11 @@ end
|
||||
#+END_SRC
|
||||
|
||||
**** Emacs
|
||||
Emacs will run as a user service, which means it won’t be launched until we log
|
||||
in. However, the service won’t be started immediately, I personally prefer to
|
||||
start a standalone instance in which installing and compiling the Emacs packages
|
||||
will happen, and then once that is done I will start the service.
|
||||
Emacs will run as a user service, which means it won’t be launched
|
||||
until we log in. However, the service won’t be started immediately, I
|
||||
personally prefer to start a standalone instance in which installing
|
||||
and compiling the Emacs packages will happen, and then once that is
|
||||
done I will start the service.
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Enabling Emacs as user service ##############################################\n\n"
|
||||
systemctl --user enable emacs
|
||||
@ -730,8 +739,8 @@ systemctl --user start emacs
|
||||
#+end_src
|
||||
|
||||
**** Mpd
|
||||
Mpd will also use as a user service in order to get rid of some lines of code in
|
||||
my configuration.
|
||||
Mpd will also use as a user service in order to get rid of some lines
|
||||
of code in my configuration.
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Enabling Mpd as a user service ##############################################\n\n"
|
||||
mkdir -p ~/.config/mpd/playlists
|
||||
@ -739,9 +748,9 @@ systemctl --user enable --now mpd
|
||||
#+END_SRC
|
||||
|
||||
**** NordVPN
|
||||
Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually maintain
|
||||
my VPN connections with OpenVPN. However, it requires a service that we should
|
||||
activate:
|
||||
Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually
|
||||
maintain my VPN connections with OpenVPN. However, it requires a
|
||||
service that we should activate:
|
||||
#+BEGIN_SRC fish
|
||||
sudo systemctl enable --now nordvpnd
|
||||
#+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
|
||||
noise-canceling source. The same source should be your input device
|
||||
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
|
||||
Maybe we want to activate an SSH server on our machine. If so, we can enable it.
|
||||
Let’s ask the question.
|
||||
Maybe we want to activate an SSH server on our machine. If so, we can
|
||||
enable it. Let’s ask the question.
|
||||
#+BEGIN_SRC fish
|
||||
whiptail --yesno 'Do you want to activate the ssh server?' 8 50
|
||||
if test $status -eq 0
|
||||
@ -845,23 +854,24 @@ git clone https://github.com/hakimel/reveal.js.git
|
||||
|
||||
*** Install Rust
|
||||
**** Install the toolchains
|
||||
When using Rust, I bounce between two toolchains, the ~stable~ toolchain and the
|
||||
~nightly~ toolchain, although I try to stick with Rust Stable. To install them,
|
||||
I will use ~rustup~ which has already been installed previously.
|
||||
When using Rust, I bounce between two toolchains, the ~stable~ toolchain
|
||||
and the ~nightly~ toolchain, although I try to stick with Rust Stable.
|
||||
To install them, I will use ~rustup~ which has already been installed
|
||||
previously.
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
|
||||
rustup default stable
|
||||
#+END_SRC
|
||||
|
||||
This will both download the stable toolchain and set it as the default one. Now
|
||||
to install the nightly toolchain, let’s run this:
|
||||
This will both download the stable toolchain and set it as the default
|
||||
one. Now to install the nightly toolchain, let’s run this:
|
||||
#+BEGIN_SRC fish
|
||||
rustup toolchain install nightly
|
||||
#+END_SRC
|
||||
|
||||
**** Install some utilities
|
||||
We’ll need some utilities when developing Rust from Emacs, namely ~rustfmt~ and
|
||||
~racer~. Let’s install them with ~cargo~.
|
||||
We’ll need some utilities when developing Rust from Emacs, namely
|
||||
~rustfmt~. Let’s install it with ~cargo~.
|
||||
#+BEGIN_SRC fish
|
||||
printf "\n# Add rust utilities ##########################################################\n\n"
|
||||
cargo install rustfmt
|
||||
@ -881,7 +891,7 @@ We will also need some components for development purposes.
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[b3935b1c09d86fe506b43670f52960306a1e9809]: rust-components-gen
|
||||
#+RESULTS[2499c179aa97dc038832188f53dd855a23eba70c]: rust-components-gen
|
||||
: rustup component add rust-src
|
||||
: rustup component add clippy
|
||||
|
||||
@ -891,11 +901,12 @@ Here is the code to do so:
|
||||
#+END_SRC
|
||||
|
||||
*** Set up our fish shell
|
||||
The last thing we want to do is to set up our fish shell with some extensions in
|
||||
order to improve the user experience.
|
||||
The last thing we want to do is to set up our fish shell with some
|
||||
extensions in order to improve the user experience.
|
||||
|
||||
**** 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
|
||||
printf "\n# Installing fisher ###########################################################\n\n"
|
||||
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
|
||||
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
|
||||
*** GTK Settings
|
||||
**** GTK2
|
||||
@ -407,8 +48,8 @@ gtk-menu-popup-delay=0
|
||||
[Filechooser Settings]
|
||||
#+END_SRC
|
||||
|
||||
The first option alows me to open the file chooser in the current working
|
||||
directory:
|
||||
The first option allows me to open the file chooser in the current
|
||||
working directory:
|
||||
#+BEGIN_SRC conf-unix
|
||||
StartupMode=cwd
|
||||
#+END_SRC
|
||||
@ -513,7 +154,8 @@ gtk-decoration-layout=
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
|
||||
:END:
|
||||
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
|
||||
#define nord0 #2E3440
|
||||
#define nord1 #3B4252
|
||||
|
@ -42,7 +42,7 @@ I sure don’t. Let’s tell Emacs.
|
||||
(setq-default sentence-end-double-space nil)
|
||||
#+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
|
||||
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.
|
||||
@ -144,7 +144,7 @@ of indentation (Python, why…?). The minor-mode that enables that is
|
||||
*** Stay Clean, Emacs!
|
||||
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,
|
||||
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,
|
||||
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.
|
||||
@ -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)
|
||||
#+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!
|
||||
#+begin_src emacs-lisp
|
||||
(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!
|
||||
|
||||
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
|
||||
(global-auto-revert-mode 1)
|
||||
#+end_src
|
||||
@ -222,7 +223,7 @@ set it up correctly.
|
||||
** Visual Configuration
|
||||
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
|
||||
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.
|
||||
#+begin_src emacs-lisp
|
||||
(setq visible-bell t)
|
||||
@ -346,9 +347,9 @@ to the one ~setq~ uses?
|
||||
"Bind each custom variable FORM to the value of its 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
|
||||
`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
|
||||
the value of the first FORM can be used to set the second FORM.
|
||||
|
||||
|
@ -54,7 +54,7 @@ it as.
|
||||
#+begin_src emacs-lisp
|
||||
(defun self-screenshot (&optional type)
|
||||
"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'.
|
||||
|
||||
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
|
||||
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
|
||||
Emacs is a great operating system, it just lacks a good text editor.
|
||||
#+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
|
||||
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
|
||||
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
|
||||
globally enable its mode.
|
||||
#+begin_src emacs-lisp
|
||||
@ -185,7 +185,7 @@ globally enable its mode.
|
||||
undo-outer-limit (* 128 1024 1024)))
|
||||
#+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
|
||||
much smaller files (according to DoomEmacs, we get something like 80%
|
||||
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
|
||||
it installs. This means development can be done directly on the
|
||||
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
|
||||
the one I want Forge to interact with by default. Therefore,
|
||||
=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
|
||||
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
|
||||
[[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
|
||||
|
||||
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.
|
||||
#+name: mu4e-ical-config
|
||||
#+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
|
||||
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
|
||||
package ~eshell-info-banner.el~ (*see here*). Here are the addresses to
|
||||
package ~eshell-info-banner.el~. Here are the addresses to
|
||||
match:
|
||||
|
||||
# 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
|
||||
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
|
||||
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.
|
||||
|
||||
With this piece of code, I can simply jump to my inbox maildir with
|
||||
@ -1303,8 +1303,8 @@ reader?
|
||||
** PDF Tools
|
||||
~pdf-tools~ enables PDF support for Emacs, much better than its built-in
|
||||
support with DocView. Aside from the classical settings such as
|
||||
keybinds, I also enable the midnight colors by default; think of it as
|
||||
an equivalent of Zathura’s recolor feature which kind of enables a
|
||||
keybinds, I also enable the midnight colours by default; think of it
|
||||
as an equivalent of Zathura’s recolour feature which kind of enables a
|
||||
dark mode for PDFs.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package pdf-tools
|
||||
@ -1508,7 +1508,7 @@ deactivate `magit-todos-mode', otherwise enable it."
|
||||
#+end_src
|
||||
|
||||
*** 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
|
||||
pull requests, create them, and fork projects among other things.
|
||||
|
||||
|
@ -43,7 +43,7 @@ major-mode.
|
||||
#+end_src
|
||||
|
||||
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
|
||||
~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
|
||||
|
||||
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
|
||||
(use-package ivy-posframe
|
||||
:defer t
|
||||
|
@ -134,7 +134,7 @@ behavior.
|
||||
~smartparens~ is a package similar to ~parinfer~, but while the latter is
|
||||
more specialized for Lisp dialects, ~smartparens~ works better with
|
||||
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.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package smartparens
|
||||
@ -159,7 +159,7 @@ escaping your strings!
|
||||
** Writeroom
|
||||
On the other hand, ~writeroom~ allows the user to enter a
|
||||
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
|
||||
(use-package writeroom-mode
|
||||
: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:
|
||||
- I am not limited to /x/ tabs or panes
|
||||
- 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.
|
||||
I used to have an extensive configuration for Dired with a couple of
|
||||
additional packages to make it more usable. Dirvish rendered that
|
||||
@ -97,18 +97,19 @@ otherwise some commands won’t work.
|
||||
" "))
|
||||
#+end_src
|
||||
|
||||
However, it is possible to instead use ~exa~ when it is available.
|
||||
Instead of making Emacs’ main thread to the file listing in a
|
||||
directory, we offload it to an external thread.
|
||||
However, it is possible to instead use =eza= when it is available (it’s
|
||||
a replacement to the unmaintained =exa=). Instead of making Emacs’ main
|
||||
thread to the file listing in a directory, we offload it to an
|
||||
external thread.
|
||||
#+name: dirvish-exa-offload
|
||||
#+begin_src emacs-lisp :tangle no
|
||||
(dirvish-define-preview exa (file)
|
||||
"Use `exa' to generate directory preview."
|
||||
:require ("exa")
|
||||
(dirvish-define-preview eza (file)
|
||||
"Use `eza' to generate directory preview."
|
||||
:require ("eza")
|
||||
(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
|
||||
|
||||
Finally, some directories need to be set for Dired to store various
|
||||
@ -243,9 +244,9 @@ window.
|
||||
(defalias 'openo #'find-file-other-window)
|
||||
#+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
|
||||
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
|
||||
#+begin_src emacs-lisp :tangle no
|
||||
(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 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
|
||||
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.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package eshell-info-banner
|
||||
@ -370,7 +371,7 @@ the git repository.
|
||||
#+end_src
|
||||
|
||||
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
|
||||
(use-package eshell-syntax-highlighting
|
||||
:after (esh-mode eshell)
|
||||
|
@ -7,7 +7,7 @@
|
||||
* EXWM
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -62,14 +62,14 @@ exec emacs --with-exwm
|
||||
#+end_src
|
||||
|
||||
** 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
|
||||
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
|
||||
line will depend on this Git repository, so I might as well just clone
|
||||
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
|
||||
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
|
||||
@ -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)))
|
||||
#+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
|
||||
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
|
||||
@ -362,7 +362,7 @@ The complete configuration for the ~exwm~ package can be found below.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(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
|
||||
human-friendly name."
|
||||
(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
|
||||
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
|
||||
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~
|
||||
to ~p~ since it would conflict with my main ~general~ prefix.
|
||||
#+begin_src emacs-lisp
|
||||
|
@ -114,11 +114,11 @@ quickly find files across my filesystem.
|
||||
:host github
|
||||
:repo "phundrak/quick-find-files.el"
|
||||
:build t)
|
||||
:config
|
||||
(setq quick-find-files-program 'fd
|
||||
quick-find-files-dirs-and-exts '(("~/org" . "org")
|
||||
("~/Documents/university" . "org"))
|
||||
quick-find-files-fd-additional-options "-L"))
|
||||
:custom
|
||||
(quick-find-files-program 'fd)
|
||||
(quick-find-files-dirs-and-exts '(("~/org" . "org")
|
||||
("~/Documents/university" . "org")))
|
||||
(quick-find-files-fd-additional-options "-L"))
|
||||
#+end_src
|
||||
|
||||
** Keycast
|
||||
@ -255,7 +255,7 @@ Moreover, inside Emacs?
|
||||
|
||||
** Winum
|
||||
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
|
||||
just going to the frame above, then left, left, and up.
|
||||
#+begin_src emacs-lisp
|
||||
|
@ -35,7 +35,7 @@ the ~citeproc~ package, a citation processor.
|
||||
:straight (:build t))
|
||||
#+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
|
||||
programming-related, though it absolutely can be! Org can be a
|
||||
replacement for anything similar to LibreOffice Writer, LibreOffice
|
||||
@ -488,7 +488,7 @@ The capture templates are set like so:
|
||||
** Custom functions
|
||||
*** Emphasize text
|
||||
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
|
||||
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
|
||||
@ -574,7 +574,7 @@ the value `split-window-right', then it will be changed to
|
||||
#+end_src
|
||||
|
||||
** 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 ~_{}~
|
||||
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
|
||||
@ -614,12 +614,6 @@ exported HTML. Let’s disable that since I never use it.
|
||||
(setq org-html-validation-link nil)
|
||||
#+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
|
||||
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
|
||||
@ -700,11 +694,11 @@ coloring is ~engraved~.
|
||||
(setq org-latex-src-block-backend 'engraved)
|
||||
#+end_src
|
||||
|
||||
The default packages break my LaTeX exports: for some reasons, images
|
||||
are not loaded and exported in PDFs, so I needed to redifine the
|
||||
The default packages break my LaTeX exports: for some reason, images
|
||||
are not loaded and exported in PDFs, so I needed to redefine the
|
||||
default packages excluding the one that broke my exports; namely, I
|
||||
need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some default
|
||||
packages:
|
||||
need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some
|
||||
default packages:
|
||||
- ~cleveref~ for better references to various elements.
|
||||
- ~svg~ for inserting SVG files in PDF outputs
|
||||
- ~booktabs~ for nicer tables
|
||||
@ -927,9 +921,9 @@ Finally, let’s make enabling and disabling stuff accessible:
|
||||
:PROPERTIES:
|
||||
:header-args:emacs-lisp: :tangle no :exports code :results silent
|
||||
:END:
|
||||
I currently have two custom formats for my Org-mode exports: one for general use
|
||||
(initialy for my conlanging files, hence its ~conlang~ name), and one for beamer
|
||||
exports.
|
||||
I currently have two custom formats for my Org-mode exports: one for
|
||||
general use (initially for my conlanging files, hence its ~conlang~
|
||||
name), and one for beamer exports.
|
||||
|
||||
Below is the declaration of the ~conlang~ LaTeX class:
|
||||
#+NAME: org-latex-class-conlang
|
||||
|
@ -64,9 +64,9 @@ it is.
|
||||
|
||||
*** Databases
|
||||
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
|
||||
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.
|
||||
#+begin_src emacs-lisp
|
||||
(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))
|
||||
#+end_src
|
||||
|
||||
And let’s enable some intergration with ~ivy~.
|
||||
And let’s enable some integration with ~ivy~.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-ivy
|
||||
:straight (:build t)
|
||||
@ -491,7 +491,7 @@ language [[http://www.gnuplot.info/][Gnuplot]]. Let’s make some beautiful grap
|
||||
#+end_src
|
||||
|
||||
*** 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.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package graphviz-dot-mode
|
||||
@ -1243,7 +1243,7 @@ Access pydoc through counsel.
|
||||
#+end_src
|
||||
|
||||
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
|
||||
(use-package sphinx-doc
|
||||
:defer t
|
||||
@ -1402,7 +1402,7 @@ modifications.
|
||||
#+end_src
|
||||
|
||||
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
|
||||
(use-package web-mode
|
||||
:defer t
|
||||
@ -1540,7 +1540,7 @@ activate when I open ~.less~ files by default. Let’s fix that.
|
||||
**** Javascript
|
||||
:END:
|
||||
~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.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package rjsx-mode
|
||||
@ -1577,7 +1577,7 @@ Next.JS.
|
||||
js2-idle-timer-delay 0.15))
|
||||
#+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
|
||||
receives some commits!
|
||||
#+begin_src emacs-lisp
|
||||
@ -1589,8 +1589,8 @@ receives some commits!
|
||||
:hook (rjsx-mode . js2-refactor-mode))
|
||||
#+end_src
|
||||
|
||||
Which Emacser prefers the command line over Emacs itself? I don’t.
|
||||
Let’s interact with NPM through Emacs then.
|
||||
Is there any Emacser who prefers the command line over Emacs itself? I
|
||||
don’t. Let’s interact with NPM through Emacs then.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package npm-transient
|
||||
:defer t
|
||||
@ -1605,7 +1605,7 @@ Let’s interact with NPM through Emacs then.
|
||||
;; "n" #'npm-transient))
|
||||
#+end_src
|
||||
|
||||
And finally, here is a formatter for Javascript.
|
||||
And finally, here is a formatter for JavaScript.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package prettier-js
|
||||
:defer t
|
||||
@ -1618,7 +1618,7 @@ And finally, here is a formatter for Javascript.
|
||||
|
||||
**** Typescript
|
||||
: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
|
||||
(use-package typescript-mode
|
||||
: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
|
||||
paru --skipreview --noconfirm -S zls-bin 2>&1
|
||||
#+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
|
||||
|
||||
** Ligatures
|
||||
The font I’m using (see *here*) supports ligatures, but Emacs in GUI
|
||||
mode does not. And of course, there’s a package for that.
|
||||
|
||||
# Insert equivalent of #Basic-configuration-Visual-Configuration-Fontsxfkjel6184j0 in *here*
|
||||
The font I’m using supports ligatures, but Emacs in GUI mode does not.
|
||||
And of course, there’s a package for that.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package ligature
|
||||
@ -175,9 +173,8 @@ The DoomEmacs modeline looks nice in my opinion, let’s use it.
|
||||
#+end_src
|
||||
|
||||
** Pixel-perfect alignment of Markdown and org-mode tables
|
||||
:END:
|
||||
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
|
||||
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
|
||||
@ -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*~
|
||||
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
|
||||
the background of other buffers. (Or is it other buffers that have a
|
||||
slightly darker background? I’m not sure.)
|
||||
@ -229,7 +226,7 @@ slightly darker background? I’m not sure.)
|
||||
** Theme
|
||||
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
|
||||
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.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package doom-themes
|
||||
@ -248,9 +245,9 @@ for any language that has delimiters like brackets too.
|
||||
:hook (prog-mode . rainbow-delimiters-mode))
|
||||
#+end_src
|
||||
|
||||
** Y’all want some more /COLORS/?
|
||||
It is possible to make info buffers much more colorful (and imo easier
|
||||
to read) with this simple package:
|
||||
** Y’all want some more /COLOURS/?
|
||||
It is possible to make info buffers much more colourful (and, in my
|
||||
opinion, easier to read) with this simple package:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package info-colors
|
||||
:straight (:build t)
|
||||
|
122
docs/fish.org
122
docs/fish.org
@ -17,8 +17,8 @@ end
|
||||
#+END_SRC
|
||||
|
||||
** Fish from within Emacs
|
||||
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
|
||||
variable =TERM= needs to have the value =eterm-color=.
|
||||
I sometimes call fish from within Emacs, with =M-x ansi-term=. In this
|
||||
case, the variable =TERM= needs to have the value =eterm-color=.
|
||||
#+BEGIN_SRC fish
|
||||
if test -n "$EMACS"
|
||||
set -x TERM eterm-color
|
||||
@ -33,8 +33,8 @@ fenv source ~/.profile
|
||||
#+end_src
|
||||
|
||||
*** Development
|
||||
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
|
||||
let’s do so.
|
||||
Finally, some development packages require the =PKG_CONFIG_PATH= to be
|
||||
set, so let’s do so.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
|
||||
#+END_SRC
|
||||
@ -64,7 +64,8 @@ function. I just want it empty.
|
||||
function fish_greeting; end
|
||||
#+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
|
||||
starship init fish | source
|
||||
#+end_src
|
||||
@ -74,9 +75,13 @@ starship init fish | source
|
||||
:PROPERTIES:
|
||||
:header-args:toml: :tangle ~/.config/starship.toml
|
||||
: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
|
||||
format = """
|
||||
$username\
|
||||
@ -117,7 +122,9 @@ $shell\
|
||||
$character"""
|
||||
#+end_src
|
||||
|
||||
I want starship to be able to detect Lisp files, be it CommonLisp or EmacsLisp. Unfortunately, it seems nerd-font doesn’t have any symbol for either language, so I’m just using a lambda character.
|
||||
I want starship to be able to detect Lisp files, be it CommonLisp or
|
||||
EmacsLisp. Unfortunately, it seems nerd-font doesn’t have any symbol
|
||||
for either language, so I’m just using a lambda character.
|
||||
#+begin_src toml
|
||||
[custom.lisp]
|
||||
extensions = ["lisp", "el"]
|
||||
@ -186,7 +193,8 @@ disable = true
|
||||
#+end_src
|
||||
|
||||
*** 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
|
||||
zoxide init fish | source
|
||||
#+end_src
|
||||
@ -202,13 +210,14 @@ zoxide init fish | source
|
||||
t t)
|
||||
#+END_SRC
|
||||
|
||||
Abbreviations are a great way to keep correctly track of which commands are run
|
||||
in the shell without polluting the history of the shell with obscure commands.
|
||||
When typing an abbreviation, fish will replace it with replace it with its
|
||||
expanded equivalent. Below are some of the abbreviations I use. Be aware some of
|
||||
them that invoke GUI programs can be invoked through ~devour~ which will make
|
||||
the terminal disappear while the program runs, and once the GUI program exists
|
||||
the terminal window will come back.
|
||||
Abbreviations are a great way to keep correctly track of which
|
||||
commands are run in the shell without polluting the history of the
|
||||
shell with obscure commands. When typing an abbreviation, fish will
|
||||
replace it with replace it with its expanded equivalent. Below are
|
||||
some of the abbreviations I use. Be aware some of them that invoke GUI
|
||||
programs can be invoked through ~devour~ which will make the terminal
|
||||
disappear while the program runs, and once the GUI program exists the
|
||||
terminal window will come back.
|
||||
|
||||
*** System monitoring
|
||||
Here I have some abbreviations which are quite useful when performing
|
||||
@ -241,14 +250,15 @@ important threads in terms of memory usage.
|
||||
#+END_SRC
|
||||
|
||||
*** System management (packages and services)
|
||||
I added some of these abbreviations due to how often I have to write the whole
|
||||
thing.
|
||||
I added some of these abbreviations due to how often I have to write
|
||||
the whole thing.
|
||||
|
||||
**** Package management
|
||||
The first command is =remove= which removes a package from my system, as well as
|
||||
its dependencies no longer needed. =p=. =pacman='s or =paru='s. This is why I
|
||||
simply type =purge=. And if I want to simply seach among the =pacman= repos, I
|
||||
can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru=.
|
||||
The first command is =remove= which removes a package from my system, as
|
||||
well as its dependencies no longer needed. =p=. =pacman='s or =paru='s. This
|
||||
is why I simply type =purge=. And if I want to simply search among the
|
||||
=pacman= repos, I can type =search=. Otherwise, if I want to include AUR
|
||||
results, I’ll use =paru=.
|
||||
|
||||
#+NAME: pm-abbr
|
||||
| abbreviation | command |
|
||||
@ -261,9 +271,9 @@ can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru
|
||||
#+END_SRC
|
||||
|
||||
**** Service management
|
||||
I don’t have the muscle memory of =systemctl=. So instead, I simply type =c=
|
||||
when I want to do something user service related. And if I want to manipulate
|
||||
system services, I can instead type a simple capital =S=.
|
||||
I don’t have the muscle memory of =systemctl=. So instead, I simply type
|
||||
=c= when I want to do something user service related. And if I want to
|
||||
manipulate system services, I can instead type a simple capital =S=.
|
||||
#+NAME: service-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+------------------|
|
||||
@ -275,8 +285,8 @@ system services, I can instead type a simple capital =S=.
|
||||
#+END_SRC
|
||||
|
||||
*** Development
|
||||
A good amount of these commands are development related, especially when it
|
||||
comes to compilation or Docker.
|
||||
A good amount of these commands are development related, especially
|
||||
when it comes to compilation or Docker.
|
||||
|
||||
**** CMake
|
||||
I have the following abbreviations to quickly run CMake and create a
|
||||
@ -411,12 +421,13 @@ Here is the corresponding fish configuration:
|
||||
#+END_SRC
|
||||
|
||||
*** Typos
|
||||
Let's admit it, we all make typos from time to time in the shell, and some are
|
||||
recurrent enough we make abbreviations or aliases of the correct command. Well,
|
||||
I have some of my abbreviations which were make exactly because of this.
|
||||
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~.
|
||||
So, let's just replace the former by the latter. I'm also very bad at typing
|
||||
~exit~. And sometimes I suck at typing ~htop~.
|
||||
Let's admit it, we all make typos from time to time in the shell, and
|
||||
some are recurrent enough we make abbreviations or aliases of the
|
||||
correct command. Well, I have some of my abbreviations which were make
|
||||
exactly because of this. Sometimes for some reason, my brain makes me
|
||||
write ~clean~ instead of ~clear~. So, let's just replace the former by the
|
||||
latter. I'm also very bad at typing ~exit~. And sometimes I suck at
|
||||
typing ~htop~.
|
||||
#+NAME: typo-abbr
|
||||
| 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
|
||||
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
|
||||
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
|
||||
@ -453,7 +453,7 @@ YouTube channel]]'s livestream.
|
||||
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &'
|
||||
#+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
|
||||
that window. So, I declared this abbreviation.
|
||||
#+BEGIN_SRC fish
|
||||
@ -467,7 +467,7 @@ abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(upl
|
||||
#+END_SRC
|
||||
|
||||
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
|
||||
stdout the selected files in case I want to pipe them to another
|
||||
program.
|
||||
@ -481,8 +481,8 @@ GPU.
|
||||
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
|
||||
#+end_src
|
||||
|
||||
Finally, let's declare the following abbreviation that will launch a MPV
|
||||
instance displaying my webcam:
|
||||
Finally, let's declare the following abbreviation that will launch an
|
||||
MPV instance displaying my webcam:
|
||||
#+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'
|
||||
#+END_SRC
|
||||
@ -519,29 +519,29 @@ abbreviation of ~remove~ (see [[file:./fish.md#package-management][Package manag
|
||||
#+END_SRC
|
||||
|
||||
**** exa
|
||||
#+NAME: exa-abbr
|
||||
#+NAME: eza-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+--------------------------------------------|
|
||||
| exa | exa -halg@ --group-directories-first --git |
|
||||
| lsl | exa -halg@ --group-directories-first --git |
|
||||
| eza | eza -halg@ --group-directories-first --git |
|
||||
| lsl | eza -halg@ --group-directories-first --git |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=exa-abbr)>>
|
||||
<<generate-abbr(table=eza-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
**** Network Management
|
||||
First, we have just =nmcli= with sane default options, that is a pretty output
|
||||
with colors.
|
||||
First, we have just =nmcli= with sane default options, that is a pretty
|
||||
output with colours.
|
||||
#+BEGIN_SRC fish
|
||||
abbr nmcli 'nmcli -p -c auto'
|
||||
#+END_SRC
|
||||
|
||||
**** NordVPN
|
||||
Next, we have some NordVPN-related shortcuts. The first one is a simple
|
||||
abbreviation to =nordvpn=. The second one is a shortcut to connect to a server,
|
||||
and to disconnect from the current server. I also have a couple of shortcuts to
|
||||
quickly connect to some preselected countries, mainly France, Germany, Japan and
|
||||
the US.
|
||||
Next, we have some NordVPN-related shortcuts. The first one is a
|
||||
simple abbreviation to =nordvpn=. The second one is a shortcut to
|
||||
connect to a server, and to disconnect from the current server. I also
|
||||
have a couple of shortcuts to quickly connect to some preselected
|
||||
countries, mainly France, Germany, Japan and the US.
|
||||
#+NAME: nordvpn-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+-------------------------|
|
||||
@ -558,7 +558,7 @@ the US.
|
||||
#+END_SRC
|
||||
|
||||
**** Wget
|
||||
By default, continue a download that was interupted.
|
||||
By default, continue a download that was interrupted.
|
||||
#+BEGIN_SRC fish
|
||||
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
|
||||
#+END_SRC
|
||||
@ -581,7 +581,7 @@ function fish_command_not_found
|
||||
end
|
||||
#+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
|
||||
about that I store in a separate configuration file.
|
||||
|
@ -67,8 +67,8 @@ MPD each time we run it.
|
||||
#+end_src
|
||||
|
||||
** Audio outputs
|
||||
Two audio outputs will be defined. The first one sets Pulseaudio up so
|
||||
I can actually hear my music. Its configuration is simple, really.
|
||||
Two audio outputs will be defined. The first one sets Pulseaudio up,
|
||||
so I can actually hear my music. Its configuration is simple, really.
|
||||
#+begin_src conf-space
|
||||
audio_output {
|
||||
type "pulse"
|
||||
|
@ -5,30 +5,32 @@
|
||||
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
|
||||
|
||||
* Neofetch
|
||||
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was written in
|
||||
Bash, and thus its configuration file is written as a Bash script too. This
|
||||
document was written with org-mode, and my configuration file is tangled from
|
||||
the source blocks you will see below to ~~/.config/neofetch/config.conf~. This
|
||||
configuration will only 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]].
|
||||
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was
|
||||
written in Bash, and thus its configuration file is written as a Bash
|
||||
script too. This document was written with org-mode, and my
|
||||
configuration file is tangled from the source blocks you will see
|
||||
below to ~~/.config/neofetch/config.conf~. This configuration will only
|
||||
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~ function is the function called by Neofetch in order to print
|
||||
the system information it could fetch. In this function, we’ll choose what to
|
||||
display, and how. This function looks like this:
|
||||
The ~print_info~ function is the function called by Neofetch in order to
|
||||
print the system information it could fetch. In this function, we’ll
|
||||
choose what to display, and how. This function looks like this:
|
||||
#+BEGIN_SRC sh :tangle no
|
||||
print_info() {
|
||||
# Print information here…
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
Generally, what we will display will be shown through the ~info~ function,
|
||||
redefined inside Neofetch (this is not ~info(1)~). This ~info~ function accepts
|
||||
one or two arguments. With one argument, such as with ~info memory~, we can get
|
||||
a result that looks like ~5136MiB / 15873MiB~, while calling it with two
|
||||
arguments will treat the first one as a prefix and the second one as the
|
||||
interesting information; ~info "Memory" memory~ will look like
|
||||
~Memory: 5136MiB / 15873MiB~. Here is what we want to display:
|
||||
Generally, what we will display will be shown through the ~info~
|
||||
function, redefined inside Neofetch (this is not ~info(1)~). This ~info~
|
||||
function accepts one or two arguments. With one argument, such as with
|
||||
~info memory~, we can get a result that looks like ~5136MiB / 15873MiB~,
|
||||
while calling it with two arguments will treat the first one as a
|
||||
prefix and the second one as the interesting information;
|
||||
~info "Memory" memory~ will look like ~Memory: 5136MiB / 15873MiB~. Here
|
||||
is what we want to display:
|
||||
#+NAME: info-elements-table
|
||||
| Prefix | Information | What it does |
|
||||
|----------+-------------+------------------------------|
|
||||
@ -90,10 +92,11 @@ Each of these modules can be tuned with the variables presented below.
|
||||
|
||||
** Information settings
|
||||
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
|
||||
document or the configuration file itself, and they can be overridden by the
|
||||
command line with flags passed to ~neofetch~. I will divide these variables in
|
||||
two main categories: hardware and software-related properties.
|
||||
~print_info~ described above. It is possible to tune them by modifying
|
||||
this document or the configuration file itself, and they can be
|
||||
overridden by the command line with flags passed to ~neofetch~. I will
|
||||
divide these variables in two main categories: hardware and
|
||||
software-related properties.
|
||||
|
||||
*** Software
|
||||
**** OS
|
||||
@ -112,15 +115,16 @@ This variable can shorten the output of the ~distro~ function.
|
||||
distro_shorthand="off"
|
||||
#+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
|
||||
By default, Neofetch will display ascii art next to our system information
|
||||
representing our distro’s logo. We’ll customize it a bit. First, let’s change
|
||||
the ~backend~ value. Note that most of them (except ~off~ of course) support
|
||||
shorthands such as ~--kitty~ when passed as arguments from the command line. In
|
||||
my case, I will use the Kitty backend since it is the native backend of the
|
||||
terminal emulator I use.
|
||||
By default, Neofetch will display ASCII art next to our system
|
||||
information representing our distro’s logo. We’ll customize it a bit.
|
||||
First, let’s change the ~backend~ value. Note that most of them (except
|
||||
~off~ of course) support shorthands such as ~--kitty~ when passed as
|
||||
arguments from the command line. In my case, I will use the Kitty
|
||||
backend since it is the native backend of the terminal emulator I use.
|
||||
- Default value :: ~"ascii"~
|
||||
- Values ::
|
||||
- ~ascii~
|
||||
@ -143,10 +147,10 @@ terminal emulator I use.
|
||||
image_backend="kitty"
|
||||
#+END_SRC
|
||||
|
||||
Now, since I indicated I wanted an image engine, I’ll indicate neofetch which
|
||||
image to find. Note that ~auto~ will pick the best image source for whatever
|
||||
image backend is used. In ascii mode, distro ascii art will be used and in an
|
||||
image mode, your wallpaper will be used.
|
||||
Now, since I indicated I wanted an image engine, I’ll indicate
|
||||
Neofetch which image to find. Note that ~auto~ will pick the best image
|
||||
source for whatever image backend is used. In ASCII mode, distro ASCII
|
||||
art will be used and in an image mode, your wallpaper will be used.
|
||||
- Default value :: ~auto~
|
||||
- Values ::
|
||||
- ~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"
|
||||
#+end_src
|
||||
|
||||
# - Default value :: ~""~
|
||||
# - Values ::
|
||||
# - ~""~
|
||||
# - ~""~
|
||||
# - Flag :: ~""~
|
||||
# - Supports ::
|
||||
# - Examples ::
|
||||
# - on :: ~~
|
||||
# - off :: ~~
|
||||
# #+begin_src sh
|
||||
# #+end_src
|
||||
|
||||
**** Theming
|
||||
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
|
||||
@ -413,10 +405,10 @@ cpu_cores="off"
|
||||
#+end_src
|
||||
|
||||
***** CPU temperature
|
||||
This variable allows the user to hide or show the CPU’s temperature, and if
|
||||
shown, the user can display it in Celcius or Farenheit degrees. For FreeBSD and
|
||||
NetBSD-based systems, you’ll need to enable the ~coretemp~ kernel module. This
|
||||
only supports newer Intel processors.
|
||||
This variable allows the user to hide or show the CPU’s temperature,
|
||||
and if shown, the user can display it in Celsius or Fahrenheit
|
||||
degrees. For FreeBSD and NetBSD-based systems, you’ll need to enable
|
||||
the ~coretemp~ kernel module. This only supports newer Intel processors.
|
||||
- Default value :: ~"off"~
|
||||
- Values ::
|
||||
- ~"C"~
|
||||
|
@ -37,10 +37,10 @@ shadow-offset-x = -16;
|
||||
shadow-offset-y = -16;
|
||||
#+END_SRC
|
||||
|
||||
It is possible to set the color of the shadow with the string contained in
|
||||
~shadow-color~ with a hexadecimal value. I haven’t included these values in my
|
||||
config, but this value will override any value in ~shadow-red~, ~shadow-green~,
|
||||
or ~shadow-blue~.
|
||||
It is possible to set the colour of the shadow with the string
|
||||
contained in ~shadow-color~ with a hexadecimal value. I haven’t included
|
||||
these values in my config, but this value will override any value in
|
||||
~shadow-red~, ~shadow-green~, or ~shadow-blue~.
|
||||
#+BEGIN_SRC conf
|
||||
shadow-color = "#171A20"
|
||||
#+END_SRC
|
||||
@ -130,10 +130,10 @@ rounded-corners-exclude = [
|
||||
#+END_SRC
|
||||
|
||||
** Fading
|
||||
Picom has the ability to create some fading effects on windows when opening or
|
||||
closing or when the opacity changes. The following parameter toggles this
|
||||
feature on or off. However, its behavior can be changed with
|
||||
~no-fading-openclose~.
|
||||
Picom has the ability to create some fading effects on windows when
|
||||
opening or closing or when the opacity changes. The following
|
||||
parameter toggles this feature on or off. However, its behaviour can
|
||||
be changed with ~no-fading-openclose~.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
fading = true
|
||||
@ -204,7 +204,8 @@ This however describes the opacity of window titlebars and borders.
|
||||
frame-opacity = 1.0;
|
||||
#+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~ |
|
||||
| Min value | ~0.1~ |
|
||||
| Max value | ~1.0~ |
|
||||
@ -270,9 +271,10 @@ blur: {
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
This value enables or disables the blur for the background of semi-transparent
|
||||
or ARGB windows. It has bad performances though, with driver-dependent behavior.
|
||||
The name of the switch may change without prior notifications.
|
||||
This value enables or disables the blur for the background of
|
||||
semi-transparent or ARGB windows. It has bad performances though, with
|
||||
driver-dependent behaviour. The name of the switch may change without
|
||||
prior notifications.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
blur-background = true;
|
||||
@ -338,8 +340,8 @@ details.
|
||||
dbus = false;
|
||||
#+END_SRC
|
||||
|
||||
Try to detect WM windows (a non-override-redirect window with no child that has
|
||||
~WM_STATE~) and markz them as active.
|
||||
Try to detect WM windows (a non-override-redirect window with no child
|
||||
that has ~WM_STATE~) and marks them as active.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
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;
|
||||
#+END_SRC
|
||||
|
||||
Specify a list of conditions of windows that should be painted with inverted
|
||||
color. Resource-hogging, and is not well tested.
|
||||
Specify a list of conditions of windows that should be painted with
|
||||
inverted colour. Resource-hogging, and is not well tested.
|
||||
| Default value | ~[]~ |
|
||||
#+BEGIN_SRC conf
|
||||
invert-color-include = [];
|
||||
#+END_SRC
|
||||
|
||||
Disable the use of damage information. This cause the whole screen to be redrawn
|
||||
everytime, instead of the part of the screen has actually changed. Potentially
|
||||
degrades the performance, but might fix some artifacts. The opposing option is
|
||||
use-damage
|
||||
Disable the use of damage information. This cause the whole screen to
|
||||
be redrawn every time, instead of the part of the screen has actually
|
||||
changed. Potentially degrades the performance, but might fix some
|
||||
artefacts. The opposing option is use-damage
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
use-damage = false;
|
||||
@ -465,8 +467,8 @@ glx-fshader-win that could turn opaque pixels transparent.
|
||||
force-win-blend = false;
|
||||
#+END_SRC
|
||||
|
||||
Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is
|
||||
fullscreen based only on its size and coordinates.
|
||||
Do not use EWMH to detect full-screen windows. Reverts to checking if a window is
|
||||
full-screen based only on its size and coordinates.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
no-ewmh-fullscreen = false;
|
||||
@ -524,8 +526,8 @@ Write process ID to a file.
|
||||
# write-pid-path = '/path/to/your/log/file';
|
||||
#+END_SRC
|
||||
|
||||
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in
|
||||
EWMH standard:
|
||||
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types
|
||||
defined in EWMH standard:
|
||||
- ~"unknown"~
|
||||
- ~"desktop"~
|
||||
- ~"dock"~
|
||||
@ -542,16 +544,18 @@ EWMH standard:
|
||||
- ~"combo"~
|
||||
- ~"dnd"~
|
||||
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.
|
||||
- focus :: Controls whether the window of this type is to be always considered
|
||||
focused. (By default, all window types except "normal" and "dialog" has this
|
||||
on.)
|
||||
- full-shadow :: Controls whether shadow is drawn under the parts of the window
|
||||
that you normally won't be able to see. Useful when the window has parts of it
|
||||
transparent, and you want shadows in those areas.
|
||||
- focus :: Controls whether the window of this type is to be always
|
||||
considered focused. (By default, all window types except =normal= and
|
||||
=dialog= has this on.)
|
||||
- full-shadow :: Controls whether shadow is drawn under the parts of
|
||||
the window that you normally won't be able to see. Useful when the
|
||||
window has parts of it transparent, and you want shadows in those
|
||||
areas.
|
||||
- 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
|
||||
cause unnecessary screen redirection, you can set this to =true=.
|
||||
#+BEGIN_SRC conf
|
||||
@ -566,18 +570,19 @@ wintypes:
|
||||
#+END_SRC
|
||||
|
||||
*** GLX backend-specific options
|
||||
Avoid using stencil buffer, useful if you don't have a stencil buffer. Might
|
||||
cause incorrect opacity when rendering transparent content (but never
|
||||
practically happened) and may not work with blur-background. Tests show a 15%
|
||||
performance boost. Recommended.
|
||||
Avoid using stencil buffer, useful if you don't have a stencil buffer.
|
||||
Might cause incorrect opacity when rendering transparent content (but
|
||||
never practically happened) and may not work with blur-background.
|
||||
Tests show a 15% performance boost. Recommended.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
glx-no-stencil = true;
|
||||
#+END_SRC
|
||||
|
||||
Avoid rebinding pixmap on window damage. Probably could improve performance on
|
||||
rapid window content changes, but is known to break things on some drivers
|
||||
(LLVMpipe, xf86-video-intel, etc.). Recommended if it works.
|
||||
Avoid rebinding pixmap on window damage. Probably could improve
|
||||
performance on rapid window content changes, but is known to break
|
||||
things on some drivers (LLVMpipe, xf86-video-intel, etc.). Recommended
|
||||
if it works.
|
||||
| Default value | ~false~ |
|
||||
#+BEGIN_SRC conf
|
||||
glx-no-rebind-pixmap = false;
|
||||
@ -585,7 +590,8 @@ glx-no-rebind-pixmap = false;
|
||||
|
||||
Use specified GLSL fragment shader for rendering window contents. See
|
||||
~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 | ~''~ |
|
||||
#+BEGIN_SRC conf :tangle no
|
||||
glx-fshader-win = '';
|
||||
|
@ -12,38 +12,46 @@ First, we are using the 2018 edition of Rust.
|
||||
#+BEGIN_SRC toml
|
||||
edition = "2018"
|
||||
#+END_SRC
|
||||
|
||||
Put single-expression functions on a single line.
|
||||
#+BEGIN_SRC toml
|
||||
fn_single_line = true
|
||||
#+END_SRC
|
||||
|
||||
Format string literals where necessary.
|
||||
#+BEGIN_SRC toml
|
||||
format_strings = true
|
||||
#+END_SRC
|
||||
|
||||
Maximum width of each line
|
||||
#+BEGIN_SRC toml
|
||||
max_width = 80
|
||||
#+END_SRC
|
||||
|
||||
Merge multiple imports into a single nested import.
|
||||
#+BEGIN_SRC toml
|
||||
merge_imports = true
|
||||
#+END_SRC
|
||||
|
||||
** Structs and Enums
|
||||
The maximum length of enum variant having discriminant, that gets vertically
|
||||
aligned with others. Variants without discriminants would be ignored for the
|
||||
purpose of alignment.
|
||||
The maximum length of enum variant having discriminant, that gets
|
||||
vertically aligned with others. Variants without discriminants would
|
||||
be ignored for the purpose of alignment.
|
||||
|
||||
Note that this is not how much whitespace is inserted, but instead the longest
|
||||
variant name that doesn't get ignored when aligning.
|
||||
Note that this is not how much whitespace is inserted, but instead the
|
||||
longest variant name that doesn't get ignored when aligning.
|
||||
#+BEGIN_SRC toml
|
||||
enum_discrim_align_threshold = 20
|
||||
#+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
|
||||
struct_field_align_threshold = 20
|
||||
#+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
|
||||
reorder_impl_items = true
|
||||
#+END_SRC
|
||||
@ -53,14 +61,17 @@ Convert ~/* */~ comments to ~//~ comments where possible.
|
||||
#+BEGIN_SRC toml
|
||||
normalize_comments = true
|
||||
#+END_SRC
|
||||
|
||||
Break comments to fit on the line.
|
||||
#+BEGIN_SRC toml
|
||||
wrap_comments = true
|
||||
#+END_SRC
|
||||
|
||||
Report ~FIXME~ items in comments.
|
||||
#+BEGIN_SRC toml
|
||||
report_fixme = "Always"
|
||||
#+END_SRC
|
||||
|
||||
Report ~TODO~ items in comments.
|
||||
#+BEGIN_SRC toml
|
||||
todo = "Always"
|
||||
@ -71,6 +82,7 @@ Format code snippet included in doc comments.
|
||||
#+BEGIN_SRC toml
|
||||
format_code_in_doc_comments = true
|
||||
#+END_SRC
|
||||
|
||||
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
|
||||
#+BEGIN_SRC toml
|
||||
normalize_doc_attributes = true
|
||||
@ -81,10 +93,12 @@ Use tab characters for indentation, spaces for alignment.
|
||||
#+BEGIN_SRC toml
|
||||
hard_tabs = false
|
||||
#+END_SRC
|
||||
|
||||
Number of spaces per tab.
|
||||
#+BEGIN_SRC toml
|
||||
tab_spaces = 4
|
||||
#+END_SRC
|
||||
|
||||
I want newlines to always be Unix style.
|
||||
#+BEGIN_SRC toml
|
||||
newline_style = "Unix"
|
||||
|
178
docs/scripts.org
178
docs/scripts.org
@ -128,9 +128,9 @@ fi
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/backup
|
||||
:END:
|
||||
~backup~ is a very simple, oneliner script that will create a local copy of a
|
||||
file and add the date at which it was copied in the filename. You can see its
|
||||
source code here:
|
||||
~backup~ is a very simple, one-liner script that will create a local
|
||||
copy of a file and add the date at which it was copied in the
|
||||
filename. You can see its source code here:
|
||||
#+BEGIN_SRC fish
|
||||
cp -r $argv[1] $argv[1].bak.(date +"%Y%m%d%H%M%S")
|
||||
#+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
|
||||
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,
|
||||
some really good documentation on this.
|
||||
some superb documentation on this.
|
||||
|
||||
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.
|
||||
@ -172,13 +172,13 @@ printf "^f3^f0 %d" $NB_CONTAINERS
|
||||
:END:
|
||||
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=
|
||||
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
|
||||
set with a valid OpenAI key.
|
||||
#+begin_src bash
|
||||
# If the user passes '-h', '--help', or 'help' print out a little bit of help.
|
||||
# text.
|
||||
# If the user passes '-h', '--help', or 'help' print out a little bit
|
||||
# of help. text.
|
||||
case "$1" in
|
||||
"-h" | "--help" | "help")
|
||||
printf 'Generate kaomojis on request.\n\n'
|
||||
@ -187,28 +187,29 @@ case "$1" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# The user can pass an argument like "bear" or "angry" to specify the general
|
||||
# kind of Kaomoji produced.
|
||||
# The user can pass an argument like "bear" or "angry" to specify the
|
||||
# general kind of Kaomoji produced.
|
||||
sentiment=""
|
||||
if [[ $1 != "" ]]; then
|
||||
sentiment=" $1"
|
||||
fi
|
||||
|
||||
# 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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Pipe mods output to gum so the user can choose the perfect kaomoji. Save that
|
||||
# choice in a variable. Also note that we're using cut to drop the item number
|
||||
# in front of the Kaomoji.
|
||||
# Pipe mods output to gum, so the user can choose the perfect kaomoji.
|
||||
# Save that choice in a variable. Also note that we're using cut to
|
||||
# drop the item number in front of the Kaomoji.
|
||||
choice="$(echo "$kaomoji" | gum choose | cut -d ' ' -f 2)"
|
||||
if [[ $choice == "" ]]; then
|
||||
exit 1
|
||||
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" ]
|
||||
then printf '%s' "$choice" | wl-copy # Wayland
|
||||
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~.
|
||||
|
||||
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).
|
||||
#+begin_src sh
|
||||
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=
|
||||
(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
|
||||
=$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
|
||||
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
|
||||
@ -326,15 +327,15 @@ ssh -L $argv[1]:$argv[3]:$argv[1] $argv[2] -N
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle no :noweb yes
|
||||
:END:
|
||||
One thing I like with ~nsxiv~ is you can trigger different behaviors
|
||||
based on keypresses. For instance, with my current nsxiv configuration,
|
||||
if I press the space key followed by a character, it can delete to the
|
||||
trashcan, delete definitively, or open the current 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
|
||||
spacebar instead of /Ctrl-x/ is because I use a custom version of nsxiv I
|
||||
first modified to fit the bépo layout, and then I decided to change
|
||||
the prefix to fit how I use Emacs and StumpWM. You can read the
|
||||
One thing I like with ~nsxiv~ is you can trigger different behaviours
|
||||
based on keypresses. For instance, with my current nsxiv
|
||||
configuration, if I press the space key followed by a character, it
|
||||
can delete to the trashcan, delete definitively, or open the current
|
||||
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
|
||||
thespace bar instead of /Ctrl-x/ is because I use a custom version of
|
||||
nsxiv I first modified to fit the bépo layout, and then I decided to
|
||||
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]].
|
||||
|
||||
#+header: :shebang "#!/usr/bin/env fish" :tangle ~/.config/nsxiv/exec/key-handler
|
||||
@ -466,12 +467,13 @@ telnet towel.blinkenlights.nl
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/tttapping
|
||||
:END:
|
||||
For some reasons, my firmware does not recognize the function key for toggling
|
||||
the touchpad. I’m not going to really complain about it since it lets me program
|
||||
it like I want. Since I often don’t need to completely deactivate the touchpad,
|
||||
I’ll instead toggle whether tapping is enabled or not when pressing
|
||||
~XF86TouchpadToggle~. And for that, I need this small script that will actually
|
||||
toggle it, and it will be used in my window manager configuration.
|
||||
For some reason, my firmware does not recognize the function key for
|
||||
toggling the touchpad. I’m not going to really complain about it since
|
||||
it lets me program it like I want. Since I often don’t need to
|
||||
completely deactivate the touchpad, I’ll instead toggle whether
|
||||
tapping is enabled or not when pressing ~XF86TouchpadToggle~. And for
|
||||
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
|
||||
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
|
||||
:END:
|
||||
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
|
||||
emacsclient -c -a emacs -e "(ediff-files \"$1\" \"$2\")"
|
||||
#+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:
|
||||
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/ytplay
|
||||
:END:
|
||||
~ytplay~ is a simple script I’ve written that allows me to play in mpv any
|
||||
YouTube video at the desired resolution. The script relies on ~dmenu~ (or ~rofi~
|
||||
in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself.
|
||||
~ytplay~ is a simple script I’ve written that allows me to play in MPV
|
||||
any YouTube video at the desired resolution. The script relies on
|
||||
~dmenu~ (or ~rofi~ in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself.
|
||||
#+BEGIN_SRC fish
|
||||
set URL (rofi -dmenu -i -p "Video URL")
|
||||
if test -n "$URL"
|
||||
@ -899,14 +901,15 @@ end
|
||||
#+END_SRC
|
||||
|
||||
***** Download a Single Video
|
||||
In order to download a single video, a simple function has been written for this
|
||||
that will display when downloaded how far it is down the list of videos to be
|
||||
downloaded and it will add its ID to the file listing all videos downloaded. The
|
||||
script will also try to download the video according to the ~PREFFERED_FORMAT~
|
||||
variable, but if the download fails it will download the default format selected
|
||||
by ~youtube-dl~. If both downloads fail, the ID of the video will be added to
|
||||
the list of failed videos. If one of the downloads succeeds, it will remove the
|
||||
ID from the list of failed downloads.
|
||||
In order to download a single video, a simple function has been
|
||||
written for this that will display when downloaded how far it is down
|
||||
the list of videos to be downloaded, and it will add its ID to the
|
||||
file listing all videos downloaded. The script will also try to
|
||||
download the video according to the ~PREFFERED_FORMAT~ variable, but if
|
||||
the download fails it will download the default format selected by
|
||||
~youtube-dl~. If both downloads fail, the ID of the video will be added
|
||||
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
|
||||
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
|
||||
video URLs.
|
||||
|
||||
What this function does is for each line, it will fetch the entierty of the
|
||||
video IDs found in a playlist or channel. Then, it will look each ID up the list
|
||||
of already downloaded videos and will add all new IDs to a queue of videos to be
|
||||
downloaded. It will then pass each new video ID to ~_ytdl_download_video~
|
||||
directly. Beware that if you pass directly the URL of the channel, such as
|
||||
~https://www.youtube.com/user/enyay~ if you want to download Tom Scott’s videos,
|
||||
it will download everything on the main page of their channel, which means it
|
||||
will even download videos from playlists they decided 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.
|
||||
What this function does is for each line, it will fetch the entirety
|
||||
of the video IDs found in a playlist or channel. Then, it will look
|
||||
each ID up the list of already downloaded videos and will add all new
|
||||
IDs to a queue of videos to be downloaded. It will then pass each new
|
||||
video ID to ~_ytdl_download_video~ directly. Beware that if you pass
|
||||
directly the URL of the channel, such as
|
||||
~https://www.youtube.com/user/enyay~ if you want to download Tom Scott’s
|
||||
videos, it will download everything on the main page of their channel,
|
||||
which means it will even download videos from playlists they decided
|
||||
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
|
||||
function _ytdl_download_batch
|
||||
set -q $FILE
|
||||
@ -1212,7 +1216,7 @@ begin
|
||||
#+END_SRC
|
||||
|
||||
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.
|
||||
#+BEGIN_SRC fish
|
||||
set -l LFS
|
||||
@ -1243,10 +1247,10 @@ And that’s the end of our first block!
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
Alright, we’ll save what kind on drives we can mount in a temporary file called
|
||||
=/tmp/drives=. We’ll make sure it’s blank by erasing it then creating it again
|
||||
with =touch=, like so. The =-f= flag on =rm= is here so we get no error if we
|
||||
try to delete a file that doesn’t exist (yet).
|
||||
Alright, we’ll save what kind on drives we can mount in a temporary
|
||||
file called =/tmp/drives=. We’ll make sure it’s blank by erasing it then
|
||||
creating it again with =touch=, like so. The =-f= flag on =rm= is here, so
|
||||
we get no error if we try to delete a file that doesn’t exist (yet).
|
||||
#+BEGIN_SRC fish
|
||||
set -g TMPDRIVES /tmp/drives
|
||||
rm -f $TMPDRIVES
|
||||
@ -1267,16 +1271,16 @@ set -g basemount /media
|
||||
#+END_SRC
|
||||
|
||||
***** Get the mount point
|
||||
Now, let’s declare a function that will allow us to chose the drive we want to
|
||||
mount.
|
||||
Now, let’s declare a function that will allow us to choose the drive
|
||||
we want to mount.
|
||||
#+BEGIN_SRC fish
|
||||
function getmount
|
||||
#+END_SRC
|
||||
|
||||
First, we want to get our mount point. We’ll run a =find= command on each of the
|
||||
directories listed in =$basemount= to look for folders on which our drive could
|
||||
be mounted. This list will be passed to rofi from which we will chose our mount
|
||||
point.
|
||||
First, we want to get our mount point. We’ll run a =find= command on
|
||||
each of the directories listed in =$basemount= to look for folders on
|
||||
which our drive could be mounted. This list will be passed to rofi
|
||||
from which we will choose our mount point.
|
||||
#+BEGIN_SRC fish
|
||||
set -g mp (for d in $basemount
|
||||
find $d -maxdepth 5 -type d
|
||||
@ -1319,9 +1323,10 @@ care of it for us.
|
||||
function mountusb
|
||||
#+END_SRC
|
||||
|
||||
Now, the first thing we want to do is select the partition we want to mount.
|
||||
Remember, we stored those in =$usbdrives= earlier, so let’s pipe them into rofi
|
||||
so we can chose from it. Also, =awk= will get their path in =/dev=.
|
||||
Now, the first thing we want to do is select the partition we want to
|
||||
mount. Remember, we stored those in =$usbdrives= earlier, so let’s pipe
|
||||
them into rofi, so we can choose from it. Also, =awk= will get their
|
||||
path in =/dev=.
|
||||
#+BEGIN_SRC fish
|
||||
set -g chosen (echo $usbdrives | \
|
||||
rofi -dmenu -i -p "Mount which drive?" | \
|
||||
@ -1346,8 +1351,8 @@ the script.
|
||||
test -z $mp && return 1
|
||||
#+END_SRC
|
||||
|
||||
Now, let’s mount it! We’ll use a switch which will detect the filesystem used so
|
||||
we know how to mount the partition.
|
||||
Now, let’s mount it! We’ll use a switch which will detect the
|
||||
filesystem used, so we know how to mount the partition.
|
||||
#+BEGIN_SRC fish
|
||||
switch (lsblk -no "fstype" $chosen)
|
||||
#+END_SRC
|
||||
@ -1371,8 +1376,8 @@ case '*'
|
||||
sudo -A mount $chosen $mp
|
||||
#+END_SRC
|
||||
|
||||
We’ll also run a =chown= on this newly mounted filesystem so the user can access
|
||||
it without any issues.
|
||||
We’ll also run a =chown= on this newly mounted filesystem, so the user
|
||||
can access it without any issues.
|
||||
#+BEGIN_SRC fish
|
||||
sudo -A chown -R $USER:(id -g $USER) $mp
|
||||
#+END_SRC
|
||||
@ -1412,13 +1417,14 @@ Let’s temporarily mount our device.
|
||||
jmtpfs -device=$chosen $mp
|
||||
#+END_SRC
|
||||
|
||||
Now, we need to allow our computer to mount our Android device. Depending on the
|
||||
Android version it is running on, we either need to specify our device is USB
|
||||
connected in order to exchange files, or Android will explicitely ask us if it
|
||||
is OK for our computer to access it. Let’s inform the user of that.
|
||||
Now, we need to allow our computer to mount our Android device.
|
||||
Depending on the Android version it is running on, we either need to
|
||||
specify our device is USB connected in order to exchange files, or
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
#+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.
|
||||
#+BEGIN_SRC fish
|
||||
jmtpfs -device=$newchosen $mp && \
|
||||
@ -1471,15 +1477,15 @@ end
|
||||
#+END_SRC
|
||||
|
||||
***** Ask what type of drive we want to mount
|
||||
The first thing we will be asked if different types of drives are detected is
|
||||
which of these types the user wishes to mount. This is done with the function
|
||||
=asktype= which is declared below.
|
||||
The first thing we will be asked if different types of drives are
|
||||
detected is which of these types the user wishes to mount. This is
|
||||
done with the function =asktype= which is declared below.
|
||||
#+BEGIN_SRC fish
|
||||
function asktype
|
||||
#+END_SRC
|
||||
|
||||
We will use a switch statement which will use our anwser to rofi about what we
|
||||
wish to mount.
|
||||
We will use a switch statement which will use our answer to rofi about
|
||||
what we wish to mount.
|
||||
#+BEGIN_SRC fish
|
||||
switch (cat $TMPDRIVES | rofi -dmenu -i -p "Mount which drive?")
|
||||
#+END_SRC
|
||||
@ -1823,8 +1829,8 @@ if test -z $password
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
Depending on the arguments passed earlier, we might want some different
|
||||
behavior.
|
||||
Depending on the arguments passed earlier, we might want some
|
||||
different behaviour.
|
||||
#+BEGIN_SRC fish :noweb yes
|
||||
if test $TYPE = "yes"
|
||||
<<rofi-pass-type>>
|
||||
@ -1833,8 +1839,8 @@ else
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
The default behavior is to copy the password to the clipboard for 45 seconds, so
|
||||
let’s do that.
|
||||
The default behaviour is to copy the password to the clipboard for 45
|
||||
seconds, so let’s do that.
|
||||
#+NAME: rofi-pass-copy
|
||||
#+BEGIN_SRC fish :noweb yes :tangle no
|
||||
pass show -c $password 2> /dev/null
|
||||
|
143
docs/stumpwm.org
143
docs/stumpwm.org
@ -8,7 +8,7 @@
|
||||
** Introduction
|
||||
*** What is StumpWM?
|
||||
[[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
|
||||
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
|
||||
@ -28,12 +28,12 @@ This file has two main goals:
|
||||
configuration, thanks to Emacs’ org-mode, and thanks to org-mode’s
|
||||
literate config capabilities.
|
||||
|
||||
Almost all of the visible source blocks if not all will be included
|
||||
in my configuration files through tangling, which can be done in
|
||||
Emacs when this file is opened through ~M-x org-babel-tangle~, which
|
||||
will write my configuration files based on the source blocks present
|
||||
in this document. This file is not only my config’s documentation,
|
||||
it /*is*/ my configuration.
|
||||
Almost all the visible source blocks if not all will be included in
|
||||
my configuration files through tangling, which can be done in Emacs
|
||||
when this file is opened through ~M-x org-babel-tangle~, which will
|
||||
write my configuration files based on the source blocks present in
|
||||
this document. This file is not only my config’s documentation, it
|
||||
/*is*/ my configuration.
|
||||
- Be my documentation on my StumpWM configuration. That way, I’ll
|
||||
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
|
||||
loads all of my configuration files as well as some modules I find
|
||||
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
|
||||
prefer to say, DRYD (/Don’t Repeat Yourself Dummy/).
|
||||
- ~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
|
||||
isn’t really related to the rest of the config, for instance utility
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
** Colors
|
||||
** Colours
|
||||
:PROPERTIES:
|
||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/colors.lisp
|
||||
:END:
|
||||
If you’ve taken a look at the rest of my dotfiles, you may have
|
||||
noticed I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here
|
||||
again! Here is a small table listing the Nord colors:
|
||||
If you’ve had a look at the rest of my dotfiles, you may have noticed
|
||||
I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here again!
|
||||
Here is a small table listing the Nord colours:
|
||||
#+name: nord-colors
|
||||
| Name | Value |
|
||||
|--------+---------|
|
||||
@ -299,7 +299,7 @@ code looks like so:
|
||||
#+end_src
|
||||
|
||||
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.
|
||||
#+begin_src lisp
|
||||
(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")
|
||||
#+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
|
||||
think this is a pretty good combination.
|
||||
#+begin_src lisp
|
||||
@ -361,7 +361,7 @@ think this is a pretty good combination.
|
||||
#+end_src
|
||||
|
||||
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
|
||||
(setf *mode-line-border-color* phundrak-nord1
|
||||
,*mode-line-border-width* 0)
|
||||
@ -394,7 +394,7 @@ Here are some modules that we will load for the modeline:
|
||||
(load-module "mem")
|
||||
#+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
|
||||
formatter is U+E082, which symbolizes the CPU.
|
||||
#+begin_src lisp
|
||||
@ -474,7 +474,7 @@ when the `car' is a formatter and t when it is a shell command."
|
||||
#+end_src
|
||||
|
||||
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
|
||||
(defcommand 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.
|
||||
|
||||
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
|
||||
(clear-window-placement-rules)
|
||||
#+end_src
|
||||
@ -595,7 +595,8 @@ of the available space.
|
||||
:PROPERTIES:
|
||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/theme.lisp :noweb yes
|
||||
: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
|
||||
(load "~/.stumpwm.d/colors.lisp")
|
||||
#+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
|
||||
interpreter of choice since StumpWM is generally compiled with it. The
|
||||
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:
|
||||
#+begin_src lisp :tangle no
|
||||
(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)
|
||||
#+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
|
||||
(set-fg-color phundrak-nord4)
|
||||
(set-bg-color phundrak-nord1)
|
||||
@ -794,7 +795,7 @@ Finally, let’s enable our gaps:
|
||||
:END:
|
||||
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
|
||||
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:
|
||||
#+begin_src lisp
|
||||
(defcommand firefox () ()
|
||||
@ -837,56 +838,6 @@ a program.
|
||||
"kitty")))))
|
||||
#+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
|
||||
:PROPERTIES:
|
||||
: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.
|
||||
|
||||
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
|
||||
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
|
||||
@ -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
|
||||
~*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
|
||||
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
|
||||
@ -1020,7 +971,7 @@ such as « or » and have them replaced with their actual name when
|
||||
|
||||
*** Applications
|
||||
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.
|
||||
|
||||
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
|
||||
user session, powering off, restarting, and suspending the computer.
|
||||
It also provides a function that interactively asks what the user
|
||||
whishes to do.
|
||||
wishes to do.
|
||||
#+name: end-session-keymap
|
||||
| Keychord | Function |
|
||||
|----------+-------------------|
|
||||
@ -1539,7 +1490,7 @@ anywhere else:
|
||||
#+end_src
|
||||
|
||||
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
|
||||
~switch-layout~ defined above.
|
||||
#+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
|
||||
:END:
|
||||
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.
|
||||
|
||||
*** Binwarp
|
||||
@ -1593,12 +1544,12 @@ Binwarp mode is now available from the keybind ~s-m~ at top level.
|
||||
:PROPERTIES:
|
||||
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/bluetooth.lisp :noweb yes
|
||||
:END:
|
||||
Although there is a bluetooth module for the modeline, this is about
|
||||
the extent to which StumpWM can interact with the system’s bluetooth.
|
||||
However, I wish for some more interecactivity, like powering on and
|
||||
off bluetooth, connecting to devices and so on.
|
||||
Although there is a Bluetooth module for the modeline, this is about
|
||||
the extent to which StumpWM can interact with the system’s Bluetooth.
|
||||
However, I wish for some more interactivity, like powering on and
|
||||
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
|
||||
(ql:quickload :cl-ppcre)
|
||||
#+end_src
|
||||
@ -1610,7 +1561,7 @@ Let’s indicate which command we’ll be using.
|
||||
#+end_src
|
||||
|
||||
**** 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
|
||||
share a message. The function ~bluetooth-message~ will first display
|
||||
~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~
|
||||
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.
|
||||
#+begin_src lisp
|
||||
(defmacro bluetooth-command (&rest args)
|
||||
@ -1656,8 +1607,8 @@ call src_lisp[:exports code]{(bluetooth-message-command "power"
|
||||
#+end_src
|
||||
|
||||
**** Toggle Bluetooth On and Off
|
||||
This part is easy. Now that we can call our bluetooth commands easily,
|
||||
we can easily define how to turn on bluetooth.
|
||||
This part is easy. Now that we can call our Bluetooth commands easily,
|
||||
we can easily define how to turn on Bluetooth.
|
||||
#+begin_src lisp
|
||||
(defcommand bluetooth-turn-on () ()
|
||||
"Turn on bluetooth."
|
||||
@ -1672,7 +1623,7 @@ And how to power it off.
|
||||
#+end_src
|
||||
|
||||
**** 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
|
||||
of a constructor for simpler use. The constructor
|
||||
~make-bluetooth-device-from-command~ expects an entry such as ~Device
|
||||
@ -1704,10 +1655,10 @@ We can now collect our devices easily.
|
||||
#+end_src
|
||||
|
||||
**** Connect to a device
|
||||
When we want to connect to a bluetooth device, we always need
|
||||
bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then
|
||||
When we want to connect to a Bluetooth device, we always need
|
||||
Bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then
|
||||
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.
|
||||
#+begin_src lisp
|
||||
(defun bluetooth-connect-device (device)
|
||||
@ -1722,7 +1673,7 @@ defined above or a plain MAC address.
|
||||
#+end_src
|
||||
|
||||
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.
|
||||
#+begin_src lisp
|
||||
(defcommand bluetooth-connect () ()
|
||||
@ -1739,7 +1690,7 @@ then attempt to connect to it.
|
||||
|
||||
**** Keybinds
|
||||
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~.
|
||||
#+name: bluetooth-keymap
|
||||
| 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
|
||||
it’s a start.
|
||||
|
||||
First of all, I have the following function that lists all the system
|
||||
or user services.
|
||||
Firstly, I have the following function that lists all the system or
|
||||
user services.
|
||||
#+begin_src lisp
|
||||
(defun systemd-get-services (&key user-p)
|
||||
"Collect all systemd services running.
|
||||
|
@ -32,7 +32,7 @@ set-window-option -g mode-keys vi
|
||||
** Windows and panes configuration
|
||||
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
|
||||
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.
|
||||
#+begin_src tmux
|
||||
set -g base-index 1
|
||||
@ -106,9 +106,9 @@ set -g @resurrect-processes '<<resurrect-processes()>>'
|
||||
#+end_src
|
||||
|
||||
** Keybindings
|
||||
First of all, I don’t like prefixing all of my keybindings with ~C-b~,
|
||||
that’s what I use in ~insert-mode~ in Emacs to make the cursor go back.
|
||||
So instead, let’s set meta with space as my prefix.
|
||||
Firstly, I don’t like prefixing all of my keybindings with ~C-b~, that’s
|
||||
what I use in ~insert-mode~ in Emacs to make the cursor go back. So
|
||||
instead, let’s set meta with space as my prefix.
|
||||
#+begin_src tmux
|
||||
unbind C-b
|
||||
set -g prefix M-Space
|
||||
@ -222,7 +222,10 @@ with the main prefix.
|
||||
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
|
||||
#+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
|
||||
(let ((keybinds "")
|
||||
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
|
||||
@ -251,7 +254,7 @@ bind-key -T windows * select-window -t :=10
|
||||
|
||||
*** Copy in vi mode
|
||||
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:
|
||||
#+begin_src tmux
|
||||
unbind -T copy-mode-vi H
|
||||
|
Loading…
Reference in New Issue
Block a user