docs: typos
All checks were successful
deploy / build (push) Successful in 3m41s

This commit is contained in:
Lucien Cartier-Tilet 2023-12-10 15:09:07 +01:00
parent dbf3c5e212
commit 3354f79554
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
26 changed files with 509 additions and 962 deletions

View File

@ -19,14 +19,14 @@ respectively. These servers are also located in France.
** Cookies ** Cookies
*** What are cookies? *** What are cookies?
Cookies are small files a website saves on your computer or mobile Cookies are small files a website saves on your computer or mobile
phone when you visit a website. site. Although not all sites make use phone when you visit a website. Although not all sites make use of
of them, they are nevertheless extremely common in order to allow them, they are nevertheless extremely common in order to allow
websites to function properly or function properly or more websites to function properly or function properly or more
efficiently. efficiently.
This website uses some functional cookies in order to remember your This website uses some functional cookies in order to remember your
preferences, such as your preferred language or its color theme. These preferences, such as your preferred language or its colour theme.
cookies are not and cannot be used to track you. These cookies are not and cannot be used to track you.
However, as this site is protected by Cloudflare, they may also host However, as this site is protected by Cloudflare, they may also host
some cookies to remember, for example, that your browser is safe or to some cookies to remember, for example, that your browser is safe or to
@ -34,8 +34,8 @@ record traffic to the site.
*** How can I control cookies on my computer? *** How can I control cookies on my computer?
If you don't want Cloudflare to record your browsing activity on my If you don't want Cloudflare to record your browsing activity on my
website, a good adblocker should do the trick. I personally recommend website, a good ad blocker should do the trick. I personally recommend
[[https://ublockorigin.com/][uBlock Origin]], one of the most effective adblockers I know of if not [[https://ublockorigin.com/][uBlock Origin]], one of the most effective ad blockers I know of if not
the most effective one. the most effective one.
You can also manually delete cookies from your browser, but given the You can also manually delete cookies from your browser, but given the
@ -47,8 +47,8 @@ Google).
*** What about other methods of tracking users? *** What about other methods of tracking users?
There are other more subtle methods of tracking someone on the There are other more subtle methods of tracking someone on the
internet, or even via emails or any web content rendered on the internet, or even via emails or any web content rendered on the
screen, such as web beacons (extremely small images). It is also screen, such as web beacons (minuscule images). It is also possible to
possible to store Flash cookies or local shared objects. store Flash cookies or local shared objects.
This site does not use them at all. This site does not use them at all.
@ -68,5 +68,5 @@ modification of the file =about.org= on [[https://labs.phundrak.com/phundrak/con
** I have other questions ** I have other questions
And I have the answers! Ill be more thang happy to chat with you by And I have the answers! Ill be more than happy to chat with you by
email, feel free to send me one at [[mailto:lucien@phundrak.com][lucien@phundrak.com]]. email, feel free to send me one at [[mailto:lucien@phundrak.com][lucien@phundrak.com]].

View File

@ -1,4 +1,4 @@
#+TITLE: Arch Linux, Phundrak-flavored #+TITLE: Arch Linux, Phundrak-flavoured
#+setupfile: headers #+setupfile: headers
#+PROPERTY: header-args :tangle no :exports none #+PROPERTY: header-args :tangle no :exports none
#+PROPERTY: header-args:sh :tangle no :exports code #+PROPERTY: header-args:sh :tangle no :exports code
@ -6,29 +6,33 @@
#+PROPERTY: header-args:emacs-lisp :exports none :noweb yes :tangle no :cache yes #+PROPERTY: header-args:emacs-lisp :exports none :noweb yes :tangle no :cache yes
* Bootstrap Script * Bootstrap Script
Here will be presented what I do to get my system up and running on a fresh Arch Here will be presented what I do to get my system up and running on a
Linux install. These installation instructions were written in order to get an fresh Arch Linux install. These installation instructions were written
Arch Linux distribution up and running with the same configuration as my main in order to get an Arch Linux distribution up and running with the
computers and my travelling laptops configuration. same configuration as my main computers and my travelling laptops
configuration.
** Install Arch Linux ** Install Arch Linux
I usually install Arch from the [[https://www.archlinux.org/download/][vanilla ISO]], however I began using [[https://github.com/MatMoul/archfi][archfi]] to I usually install Arch from the [[https://www.archlinux.org/download/][vanilla ISO]], however I began using
install easily the distro (Ive done it so many times, I know how it works now). [[https://github.com/MatMoul/archfi][archfi]] to install easily the distro (Ive done it so many times, I
Usually, my distros will be installed on two partitions: ~/home~ and ~/~ (root). know how it works now). Usually, my distros will be installed on two
partitions: ~/home~ and ~/~ (root).
If the computer supports EFI bootloaders, the EFI partition will be mounted on If the computer supports EFI bootloaders, the EFI partition will be
~/boot/efi~. I generally use ~systemd-boot~ as my boot manager, but if you are mounted on ~/boot/efi~. I generally use ~systemd-boot~ as my boot manager,
more comfortable with another one, just install what you want. Be aware that if but if you are more comfortable with another one, just install what
you format your ~/boot~ partition, you will delete all boot managers that you want. Be aware that if you format your ~/boot~ partition, you will
already exist; so, if you are dual-booting, *DO NOT FORMAT IT*. Yes, I made the delete all boot managers that already exist; so, if you are
mistake of wiping the Windows boot manager when I used to dual-boot. dual-booting, *DO NOT FORMAT IT*. Yes, I made the mistake of wiping the
Windows boot manager when I used to dual-boot.
In order to use the ~suspend-then-hibernate~ systemd command, it is necessary to In order to use the ~suspend-then-hibernate~ systemd command, it is
have a swap partition at least twice the size of your installed RAM. That is necessary to have a swap partition at least twice the size of your
because when this command will be run, the system will try to save the current installed RAM. That is because when this command will be run, the
state of your machine, stored in your RAM, to the swap filesystem. If there is system will try to save the current state of your machine, stored in
not enough space, the command will fail, and you wont be able to use this your RAM, to the swap filesystem. If there is not enough space, the
command. For instance, my current computer has 32 GB of RAM, hence my SWAP command will fail, and you wont be able to use this command. For
instance, my current computer has 32 GB of RAM, hence my SWAP
partition is 16 GB large. partition is 16 GB large.
*** Get the latest, fastest mirrors *** Get the latest, fastest mirrors
@ -38,17 +42,18 @@ pacman -Sy reflector
reflector -c FR,DE -l 20 -p https --sort rate --save /etc/pacman.d/mirrorlist --verbose reflector -c FR,DE -l 20 -p https --sort rate --save /etc/pacman.d/mirrorlist --verbose
#+END_SRC #+END_SRC
This will update the packages from your live ISO, and you will get the best This will update the packages from your live ISO, and you will get the
mirrors for your installation. Of course, change the countries accordingly to best mirrors for your installation. Of course, change the countries
your location. In my case, I am only interested in French, German, and Belgian accordingly to your location. In my case, I am only interested in
mirrors. French, German, and Belgian mirrors.
*** Install the system *** Install the system
Then you can use a custom script to ease your installation of Arch if you do not Then you can use a custom script to ease your installation of Arch if
wish to do it manually. Personally, Ive done it several times already, I know you do not wish to do it manually. Personally, Ive done it several
how the distro works, I just want to be able to install my distro quickly now. times already, I know how the distro works, I just want to be able to
Ill need to download the script with ~wget~, but apparently it isnt installed install my distro quickly now. Ill need to download the script with
by default on Arch ISOs anymore, so Ill need to install it. ~wget~, but apparently it isnt installed by default on Arch ISOs any
more, so Ill need to install it.
#+BEGIN_SRC sh #+BEGIN_SRC sh
pacman -S wget pacman -S wget
#+END_SRC #+END_SRC
@ -60,13 +65,14 @@ wget archfi.sf.net/archfi
sh archfi sh archfi
#+END_SRC #+END_SRC
Then, follow the instructions and install Arch Linux. Take the opportunity to Then, follow the instructions and install Arch Linux. Take the
install as many packages as you need, mainly ~paru~ which I use as my package opportunity to install as many packages as you need, mainly ~paru~ which
manager (it is just a wrapper for ~pacman~) and AUR helper, and ~pacman-contrib~ I use as my package manager (it is just a wrapper for ~pacman~) and AUR
which will help us to install some packages later. helper, and ~pacman-contrib~ which will help us to install some packages
later.
Once your system is installed, reboot and remove your installation media from Once your system is installed, reboot and remove your installation
your computer. media from your computer.
** Execute bootstrap ** Execute bootstrap
:PROPERTIES: :PROPERTIES:
@ -85,8 +91,8 @@ And now that ~paru~ is available, we can install ~yadm~:
paru -S yadm paru -S yadm
#+END_SRC #+END_SRC
~yadm~ comes with a very handy feature: its bootstrap script. It can be executed ~yadm~ comes with a very handy feature: its bootstrap script. It can be
automatically once the dotfiles are cloned with yadm: executed automatically once the dotfiles are cloned with yadm:
#+BEGIN_SRC sh #+BEGIN_SRC sh
yadm clone https://labs.phundrak.com/phundrak/dotfiles yadm clone https://labs.phundrak.com/phundrak/dotfiles
# or if labs.phundrak.com is down or too slow for you # or if labs.phundrak.com is down or too slow for you
@ -107,11 +113,11 @@ end
#+END_SRC #+END_SRC
*** Get a correct keyboard layout *** Get a correct keyboard layout
I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by Dvorak I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by
layouts, however I sometimes need to switch back to the standard French AZERTY Dvorak layouts, however I sometimes need to switch back to the
or the American QWERTY layout, so I make it so the Menu key switches for me my standard French AZERTY or the American QWERTY layout, so I make it so
layout between these three. This makes it so my xorg configuration of my the Menu key switches for me my layout between these three. This makes
keyboard looks like this: it so my Xorg configuration of my keyboard looks like this:
#+BEGIN_SRC fish #+BEGIN_SRC fish
set keyboardconf \ set keyboardconf \
'Section "InputClass" 'Section "InputClass"
@ -124,7 +130,8 @@ set keyboardconf \
EndSection' EndSection'
#+END_SRC #+END_SRC
So, lets ask the user if they want to set it as their keyboard configuration. So, lets ask the user if they want to set it as their keyboard
configuration.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Set keyboard layout #########################################################\n\n" printf "\n# Set keyboard layout #########################################################\n\n"
whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55 whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
@ -134,8 +141,8 @@ end
#+END_SRC #+END_SRC
*** Set our locale *** Set our locale
I use two main locales, the French and US UTF-8 locales, and I like to keep the I use two main locales, the French and US UTF-8 locales, and I like to
Japanese locale activated just in case. keep the Japanese locale activated just in case.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8" set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
#+END_SRC #+END_SRC
@ -164,7 +171,7 @@ LC_ADDRESS=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8" LC_MEASUREMENT=fr_FR.UTF-8"
#+END_SRC #+END_SRC
Lets set it as our systems locale if the user whishes to. Lets set it as our systems locale if the user wishes to.
#+BEGIN_SRC fish #+BEGIN_SRC fish
whiptail --yesno "Do you agree to have the following locale set?\n\n $localeconf" 20 43 whiptail --yesno "Do you agree to have the following locale set?\n\n $localeconf" 20 43
if test $status -eq 0 if test $status -eq 0
@ -179,8 +186,8 @@ sudo locale-gen
#+END_SRC #+END_SRC
*** Create some folders *** Create some folders
Lets create some folders we might need for mounting our drives, Android devices Lets create some folders we might need for mounting our drives,
and CDs. Android devices and CDs.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Create directories for mounting #############################################\n\n" printf "\n# Create directories for mounting #############################################\n\n"
sudo mkdir -p /mnt/{USB,CD,Android} sudo mkdir -p /mnt/{USB,CD,Android}
@ -198,7 +205,7 @@ end
#+END_SRC #+END_SRC
*** Install basic packages *** Install basic packages
Ok, lets list all the packages that I need. First, lets begin with OK, lets list all the packages that I need. First, lets begin with
system packages. system packages.
#+name: packages-system #+name: packages-system
| Package name | Why I need it | | Package name | Why I need it |
@ -381,7 +388,7 @@ Terminal utilities
| unrar | Support for rar file format | | unrar | Support for rar file format |
| w3m | Terminal web browser | | w3m | Terminal web browser |
| wget | Retrieve files from the web | | wget | Retrieve files from the web |
| x11-ssh-askpass | Passphrase dialog over SSH | | x11-ssh-askpass | Passphrase dialogue over SSH |
| xclip | Interact with the X11 clipboard | | xclip | Interact with the X11 clipboard |
| yt-dlp-drop-in | ~yt-dlp~ but it also replaces ~youtube-dl~ | | yt-dlp-drop-in | ~yt-dlp~ but it also replaces ~youtube-dl~ |
@ -549,8 +556,8 @@ Our code to generate such directories looks like this:
<<gen-dirs-tangle()>> <<gen-dirs-tangle()>>
#+END_SRC #+END_SRC
The next step is to tangle all the Org files. Here is the list of files that are The next step is to tangle all the Org files. Here is the list of
to be tangled: files that are to be tangled:
#+NAME: tangled-files #+NAME: tangled-files
| filename | | filename |
|--------------| |--------------|
@ -636,8 +643,8 @@ printf "\n# Tangling org files #################################################
*** Set up dotfiles git repository *** Set up dotfiles git repository
**** Update our dotfiles remotes **** Update our dotfiles remotes
This line in the bootstrap script will test if the current user is using my This line in the bootstrap script will test if the current user is
username. If yes, its probably me. using my username. If yes, its probably me.
#+BEGIN_SRC fish #+BEGIN_SRC fish
if test "$USER" = 'phundrak' if test "$USER" = 'phundrak'
#+END_SRC #+END_SRC
@ -661,20 +668,21 @@ end
#+END_SRC #+END_SRC
**** Update our submodules **** Update our submodules
Now we can download the various dependencies of our dotfiles. To do so, lets Now we can download the various dependencies of our dotfiles. To do
run the following command: so, lets run the following command:
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Getting yadm susbmodules ####################################################\n\n" printf "\n# Getting yadm susbmodules ####################################################\n\n"
yadm submodule update --init --recursive yadm submodule update --init --recursive
#+END_SRC #+END_SRC
*** Enable some services *** Enable some services
We have installed some packages which require some services to run. Lets enable We have installed some packages which require some services to run.
them. Lets enable them.
**** Systemd-timesyncd **** Systemd-timesyncd
This service enables time syncing with the NTP protocol, so I can be sure my This service enables time syncing with the NTP protocol, so I can be
computers time is correct. The service first needs to be enabled: sure my computers time is correct. The service first needs to be
enabled:
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Enabling timesync ###########################################################\n\n" printf "\n# Enabling timesync ###########################################################\n\n"
sudo systemctl enable --now systemd-timesyncd sudo systemctl enable --now systemd-timesyncd
@ -712,10 +720,11 @@ end
#+END_SRC #+END_SRC
**** Emacs **** Emacs
Emacs will run as a user service, which means it wont be launched until we log Emacs will run as a user service, which means it wont be launched
in. However, the service wont be started immediately, I personally prefer to until we log in. However, the service wont be started immediately, I
start a standalone instance in which installing and compiling the Emacs packages personally prefer to start a standalone instance in which installing
will happen, and then once that is done I will start the service. and compiling the Emacs packages will happen, and then once that is
done I will start the service.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Enabling Emacs as user service ##############################################\n\n" printf "\n# Enabling Emacs as user service ##############################################\n\n"
systemctl --user enable emacs systemctl --user enable emacs
@ -730,8 +739,8 @@ systemctl --user start emacs
#+end_src #+end_src
**** Mpd **** Mpd
Mpd will also use as a user service in order to get rid of some lines of code in Mpd will also use as a user service in order to get rid of some lines
my configuration. of code in my configuration.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Enabling Mpd as a user service ##############################################\n\n" printf "\n# Enabling Mpd as a user service ##############################################\n\n"
mkdir -p ~/.config/mpd/playlists mkdir -p ~/.config/mpd/playlists
@ -739,9 +748,9 @@ systemctl --user enable --now mpd
#+END_SRC #+END_SRC
**** NordVPN **** NordVPN
Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually maintain Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually
my VPN connections with OpenVPN. However, it requires a service that we should maintain my VPN connections with OpenVPN. However, it requires a
activate: service that we should activate:
#+BEGIN_SRC fish #+BEGIN_SRC fish
sudo systemctl enable --now nordvpnd sudo systemctl enable --now nordvpnd
#+END_SRC #+END_SRC
@ -807,11 +816,11 @@ systemctl --user enable --now pipewire-input-filter-chain.service
Just make sure afterwards the microphone is redirected to the Just make sure afterwards the microphone is redirected to the
noise-canceling source. The same source should be your input device noise-canceling source. The same source should be your input device
where you want to use your microphone. The only downside is this is where you want to use your microphone. The only downside is this is
ony a mono input, but it shouldnt matter for most people. only a mono input, but it shouldnt matter for most people.
**** SSH server **** SSH server
Maybe we want to activate an SSH server on our machine. If so, we can enable it. Maybe we want to activate an SSH server on our machine. If so, we can
Lets ask the question. enable it. Lets ask the question.
#+BEGIN_SRC fish #+BEGIN_SRC fish
whiptail --yesno 'Do you want to activate the ssh server?' 8 50 whiptail --yesno 'Do you want to activate the ssh server?' 8 50
if test $status -eq 0 if test $status -eq 0
@ -845,23 +854,24 @@ git clone https://github.com/hakimel/reveal.js.git
*** Install Rust *** Install Rust
**** Install the toolchains **** Install the toolchains
When using Rust, I bounce between two toolchains, the ~stable~ toolchain and the When using Rust, I bounce between two toolchains, the ~stable~ toolchain
~nightly~ toolchain, although I try to stick with Rust Stable. To install them, and the ~nightly~ toolchain, although I try to stick with Rust Stable.
I will use ~rustup~ which has already been installed previously. To install them, I will use ~rustup~ which has already been installed
previously.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n" printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
rustup default stable rustup default stable
#+END_SRC #+END_SRC
This will both download the stable toolchain and set it as the default one. Now This will both download the stable toolchain and set it as the default
to install the nightly toolchain, lets run this: one. Now to install the nightly toolchain, lets run this:
#+BEGIN_SRC fish #+BEGIN_SRC fish
rustup toolchain install nightly rustup toolchain install nightly
#+END_SRC #+END_SRC
**** Install some utilities **** Install some utilities
Well need some utilities when developing Rust from Emacs, namely ~rustfmt~ and Well need some utilities when developing Rust from Emacs, namely
~racer~. Lets install them with ~cargo~. ~rustfmt~. Lets install it with ~cargo~.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Add rust utilities ##########################################################\n\n" printf "\n# Add rust utilities ##########################################################\n\n"
cargo install rustfmt cargo install rustfmt
@ -881,7 +891,7 @@ We will also need some components for development purposes.
"\n") "\n")
#+END_SRC #+END_SRC
#+RESULTS[b3935b1c09d86fe506b43670f52960306a1e9809]: rust-components-gen #+RESULTS[2499c179aa97dc038832188f53dd855a23eba70c]: rust-components-gen
: rustup component add rust-src : rustup component add rust-src
: rustup component add clippy : rustup component add clippy
@ -891,11 +901,12 @@ Here is the code to do so:
#+END_SRC #+END_SRC
*** Set up our fish shell *** Set up our fish shell
The last thing we want to do is to set up our fish shell with some extensions in The last thing we want to do is to set up our fish shell with some
order to improve the user experience. extensions in order to improve the user experience.
**** Install ~fisher~ **** Install ~fisher~
We will be using ~fisher~ as our extension manager for Fish. Lets install it. We will be using ~fisher~ as our extension manager for Fish. Lets
install it.
#+BEGIN_SRC fish #+BEGIN_SRC fish
printf "\n# Installing fisher ###########################################################\n\n" printf "\n# Installing fisher ###########################################################\n\n"
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher

View File

@ -9,365 +9,6 @@
Many settings formerly present in this websites index are related to Many settings formerly present in this websites index are related to
my desktop settings, while some others are not. my desktop settings, while some others are not.
# Also, since I switched to StumpWM, many of my keybinds from Emacs need
# to be kept up to date with my StumpWM keybinds, and /vice versa/. This
# document aims to regroup all settings related to the desktop in order
# to have an easier time managing them.
** Common Emacs and StumpWM settings :noexport:
Both Emacs and StumpWM work on the same principle of keychords
powering a function or command. With both of them I have a prefix key,
~SPC~ in the case of Emacs (or ~C-SPC~ when in insert-mode, see the
relevant config) and ~s-SPC~ in the case of StumpWM. That means I can
give them the same keychord following this, for instance ~w/~ to create
a new vertically split frame to the right of the current one.
All the keybinds will be presented in the form of tables, with on the
first column the keychord following the leader key, on the second
column the EmacsLisp function to be called, and on the third the
StumpWM command. If one of the ELisp or StumpWM cases is empty, it
means there is no equivalence. If its ~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, Ill 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
StumpWMs Lisp code:
#+begin_src lisp
<<stumpwm-keybinds-gen(keymap=emacs-stumpwm-frames-management, keymap-name="my-buffers-keymap", prefix="b")>>
(define-key *root-map (kbd "b") '*my-buffers-keymap*)
#+end_src
*** Window Management
The following allows to have an interactive keymap for resizing the
current frame. In Emacs, it will be translated as a hydra while in
StumpWM it will be an interactive keymap.
#+name: emacs-stumpwm-resize-frame
| Keychord | Emacs | StumpWM | which-key |
|----------+-----------------------------+------------------------+-----------|
| ~c~ | ~shrink-window-horizontally~ | ~resize-direction left~ | |
| ~t~ | ~enlarge-window~ | ~resize-direction down~ | |
| ~s~ | ~shrink-window~ | ~resize-direction up~ | |
| ~r~ | ~enlarge-window-horizontally~ | ~resize-direction right~ | |
This translates into the following hydra in EmacsLisp:
#+begin_src emacs-lisp
(defhydra windows-adjust-size ()
"
^Zoom^ ^Other
^^^^^^^-----------------------------------------
[_t_/_s_] shrink/enlarge vertically [_q_] quit
[_c_/_r_] shrink/enlarge horizontally
"
<<emacs-hydra-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
("q" nil :exit t))
#+end_src
While the following Lisp code is used with StumpWM.
#+begin_src lisp
(define-interactive-keymap (iresize tile-group) (:on-enter #'setup-iresize
:on-exit #'resize-unhide
:abort-if #'abort-resize-p
:exit-on '((kbd "RET")
(kbd "ESC")
(kbd "C-g")
(kbd "q")))
<<stumpwm-interactive-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
)
#+end_src
Below you will find my window management keybinds.
#+name: emacs-stump-window-management
| Keychord | Emacs | StumpWM | which-key |
|----------+-------------------------------+--------------------------+------------------|
| ~w~ | ~nil~ | ~'*my-windows-keymap*~ | windows |
| ~w.~ | ~windows-adjust-size/body~ | ~iresize~ | resize windows |
| ~w-~ | ~split-window-below-and-focus~ | ~vsplit-and-focus~ | |
| ~w+~ | | ~balance-frames~ | |
| ~wv~ | ~split-window-below~ | ~vsplit~ | |
| ~wV~ | | ~vsplit-equally~ | |
| ~w/~ | ~split-window-right-and-focus~ | ~hsplit-and-focus~ | |
| ~wh~ | ~split-window-right~ | ~hsplit~ | |
| ~wH~ | | ~hsplit-equally~ | |
| ~wc~ | ~evil-window-left~ | ~move-focus left~ | |
| ~wt~ | ~evil-window-down~ | ~move-focus down~ | |
| ~ws~ | ~evil-window-up~ | ~move-focus up~ | |
| ~wr~ | ~evil-window-right~ | ~move-focus right~ | |
| ~wC~ | | ~move-window left~ | |
| ~wT~ | | ~move-window down~ | |
| ~wS~ | | ~move-window up~ | |
| ~wR~ | | ~move-window right~ | |
| ~w C-c~ | | ~exchange-direction right~ | |
| ~w C-s~ | | ~exchange-direction down~ | |
| ~w C-t~ | | ~exchange-direction up~ | |
| ~w C-r~ | | ~exchange-direction right~ | |
| ~wb~ | ~kill-buffer-and-delete-window~ | | |
| ~we~ | ~winum-select-window-by-number~ | ~expose~ | |
| ~wf~ | | ~fullscreen~ | |
| ~wF~ | | ~'*my-floating-keymap*~ | floating windows |
| ~wFf~ | | ~float-this~ | |
| ~wFF~ | | ~flatten-floats~ | |
| ~wFu~ | | ~unfloat-this~ | |
| ~wi~ | | ~info~ | |
| ~wd~ | ~delete-window~ | ~remove-split~ | |
| ~wD~ | ~delete-other-windows~ | ~only~ | |
| ~wm~ | | ~meta~ | |
| ~wo~ | ~other-window~ | ~other-window~ | |
| ~ws~ | | ~sibling~ | |
| ~wu~ | | ~next-urgent~ | |
| ~wU~ | | ~unmaximize~ | |
| ~ww~ | ~nil~ | | writeroom |
| ~ww.~ | ~writeroom-buffer-width/body~ | | |
| ~www~ | ~writeroom-mode~ | | |
*** Media Control
#+name: emacs-stumpwm-media-interactive
| Keychord | Emacs | StumpWM | which-key |
|----------+-------------------------------------------------------------+-----------------+-----------|
| ~c~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
| ~t~ | ~(shell-command-and-echo "mpc volume -2" "mpc volume" "mpc")~ | ~mpd-volume-down~ | |
| ~s~ | ~(shell-command-and-echo "mpc volume +2" "mpc volume" "mpc")~ | ~mpd-volume-up~ | |
| ~r~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
| ~s~ | ~emms-player-mpd-stop~ | ~mpd-stop~ | |
#+name: emacs-stumpwm-general-media
| Keychord | Emacs | StumpWM | which-key |
|----------+-------+--------------------------------------+----------------|
| ~c~ | | ~exec xbacklight -dec 2~ | backlight down |
| ~t~ | | ~exec amixer -q set Master 2%- unmute~ | volume down |
| ~s~ | | ~exec amixer -q set Master 2%+ unmute~ | volume up |
| ~r~ | | ~exec xbacklight -inc 2~ | backlight up |
| ~m~ | | ~exec amixer -q set Master 1+ toggle~ | toggle mute |
#+name: emacs-stumpwm-media-control
| Keychord | Emacs | StumpWM | which-key |
|----------+-----------------------------+---------------------------+-----------|
| ~m~ | ~nil~ | ~'*my-media-keymap*~ | media |
| ~m.~ | | ~media-interactive~ | |
| ~m«~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
| ~m»~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
| ~ma~ | ~hydra-media/body~ | ~'*my-mpd-add-keymap*~ | MPD add |
| ~maa~ | | ~mpd-serach-and-add-artist~ | |
| ~maA~ | | ~mpd-serach-and-add-album~ | |
| ~maf~ | | ~mpd-search-and-add-file~ | |
| ~maF~ | | ~mpd-add-file~ | |
| ~mag~ | | ~mpd-search-and-add-genre~ | |
| ~mat~ | | ~mpd-search-and-add-title~ | |
| ~mb~ | ~nil~ | ~'*my-mpd-browse-keymap*~ | browse |
| ~mba~ | ~emms-browse-by-artist~ | ~mpd-browse-artists~ | |
| ~mbA~ | ~emms-browse-by-album~ | ~mpd-browse-albums~ | |
| ~mbg~ | ~emms-browse-by-genre~ | ~mpd-browse-genres~ | |
| ~mbp~ | ~emms-playlists-mode-go~ | ~mpd-browse-playlist~ | |
| ~mbs~ | ~emms-smart-browse~ | | |
| ~mbt~ | | ~mpd-browse-tracks~ | |
| ~mby~ | ~emms-browse-by-year~ | | |
| ~mc~ | ~emms-player-mpd-clear~ | ~mpd-clear~ | |
| ~mp~ | ~emms-player-toggle-pause~ | ~mpd-toggle-pause~ | |
| ~ms~ | ~emms-player-mpd-show~ | | |
| ~mu~ | ~nil~ | | update |
| ~mum~ | ~emms-player-mpd-update-all~ | | |
| ~muc~ | ~emms-cache-set-from-mpd-all~ | | |
** Theme and graphical tweaks ** Theme and graphical tweaks
*** GTK Settings *** GTK Settings
**** GTK2 **** GTK2
@ -407,8 +48,8 @@ gtk-menu-popup-delay=0
[Filechooser Settings] [Filechooser Settings]
#+END_SRC #+END_SRC
The first option alows me to open the file chooser in the current working The first option allows me to open the file chooser in the current
directory: working directory:
#+BEGIN_SRC conf-unix #+BEGIN_SRC conf-unix
StartupMode=cwd StartupMode=cwd
#+END_SRC #+END_SRC
@ -513,7 +154,8 @@ gtk-decoration-layout=
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code :HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
:END: :END:
The main body in my Xresources declaration is the declaration of my The main body in my Xresources declaration is the declaration of my
color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]]. colour theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git
repository]].
#+BEGIN_SRC conf #+BEGIN_SRC conf
#define nord0 #2E3440 #define nord0 #2E3440
#define nord1 #3B4252 #define nord1 #3B4252

View File

@ -42,7 +42,7 @@ I sure dont. Lets tell Emacs.
(setq-default sentence-end-double-space nil) (setq-default sentence-end-double-space nil)
#+end_src #+end_src
There is a minor mode in Emacs which allows to have a finer way of There is a minor mode in Emacs which allows having a finer way of
jumping from word to word: ~global-subword-mode~. It detects if what jumping from word to word: ~global-subword-mode~. It detects if what
Emacs usually considers a word can be understood as several words, as Emacs usually considers a word can be understood as several words, as
in camelCase words, and allows us to jump words on this finer level. in camelCase words, and allows us to jump words on this finer level.
@ -82,7 +82,7 @@ spaces tabs, some deranged people prefer 8 spaces tabs, and some
monsters prefer 3! monsters prefer 3!
But the thing is, once you indented your code, and then you need But the thing is, once you indented your code, and then you need
alignment, tabs dont work anymore! Or they may on *your* text editor alignment, tabs dont work any more! Or they may on *your* text editor
but not on your coworkers! (Hes the one using 3 spaces tabs by the but not on your coworkers! (Hes the one using 3 spaces tabs by the
way). way).
@ -144,7 +144,7 @@ of indentation (Python, why…?). The minor-mode that enables that is
*** Stay Clean, Emacs! *** Stay Clean, Emacs!
As nice as Emacs is, it isnt very polite or clean by default: open a As nice as Emacs is, it isnt very polite or clean by default: open a
file, and it will create backup files in the same directory. But then, file, and it will create backup files in the same directory. But then,
when you open your directory with your favorite file manager and see when you open your directory with your favourite file manager and see
almost all of your files duplicated with a =~= appended to the filename, almost all of your files duplicated with a =~= appended to the filename,
it looks really uncomfortable! This is why I prefer to tell Emacs to it looks really uncomfortable! This is why I prefer to tell Emacs to
keep its backup files to itself in a directory it only will access. keep its backup files to itself in a directory it only will access.
@ -168,7 +168,7 @@ If we delete a file, we want it moved to the trash, not simply deleted.
(setq delete-by-moving-to-trash t) (setq delete-by-moving-to-trash t)
#+end_src #+end_src
Finally, the scatch buffer always has some message at its beginning, I Finally, the scratch buffer always has some message at its beginning, I
dont want it! dont want it!
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq-default initial-scratch-message nil) (setq-default initial-scratch-message nil)
@ -186,7 +186,8 @@ This will make Emacs ask us for either hitting the ~y~ key for “yes”, or
the ~n~ key for “no”. Much more polite! the ~n~ key for “no”. Much more polite!
It is also very impolite to keep a certain version of a file in its It is also very impolite to keep a certain version of a file in its
buffer when said file has changed on disk. Lets change this behavior: buffer when said file has changed on disk. Lets change this
behaviour:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(global-auto-revert-mode 1) (global-auto-revert-mode 1)
#+end_src #+end_src
@ -222,7 +223,7 @@ set it up correctly.
** Visual Configuration ** Visual Configuration
The first visual setting in this section will activate the visible The first visual setting in this section will activate the visible
bell. What it does is I get a visual feedback each time I do something bell. What it does is I get a visual feedback each time I do something
Emacs doesnt agree with, like tring to go up a line when Im already Emacs doesnt agree with, like trying to go up a line when Im already
at the top of the buffer. at the top of the buffer.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq visible-bell t) (setq visible-bell t)
@ -346,9 +347,9 @@ to the one ~setq~ uses?
"Bind each custom variable FORM to the value of its VAL. "Bind each custom variable FORM to the value of its VAL.
FORMS is a list of pairs of values [FORM VAL]. FORMS is a list of pairs of values [FORM VAL].
`customize-set-variable' is called sequentially on each pairs `customize-set-variable' is called sequentially on each pair
contained in FORMS. This means `csetq' has a similar behaviour as contained in FORMS. This means `csetq' has a similar behaviour as
`setq': each VAL expression are evaluated sequentially, i.e. the `setq': each VAL expression is evaluated sequentially, i.e. the
first VAL is evaluated before the second, and so on. This means first VAL is evaluated before the second, and so on. This means
the value of the first FORM can be used to set the second FORM. the value of the first FORM can be used to set the second FORM.

View File

@ -54,7 +54,7 @@ it as.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defun self-screenshot (&optional type) (defun self-screenshot (&optional type)
"Save a screenshot of type TYPE of the current Emacs frame. "Save a screenshot of type TYPE of the current Emacs frame.
As shown by the function `', type can weild the value `svg', As shown by the function `', type can wield the value `svg',
`png', `pdf'. `png', `pdf'.
This function will output in /tmp a file beginning with \"Emacs\" This function will output in /tmp a file beginning with \"Emacs\"

View File

@ -18,7 +18,7 @@ easily add new packages and configure them, such as ~package!~, ~after!~,
and others. But ultimately, I wanted to have a system I designed and others. But ultimately, I wanted to have a system I designed
entirely, with the keybinds I want, the packages I want. entirely, with the keybinds I want, the packages I want.
Aso, why Emacs? You know this famous quote: Also, why Emacs? You know this famous quote:
#+begin_quote #+begin_quote
Emacs is a great operating system, it just lacks a good text editor. Emacs is a great operating system, it just lacks a good text editor.
#+end_quote #+end_quote

View File

@ -160,7 +160,7 @@ additional code compared to most people due to the bépo layout.
reason is it doesnt create a linear undo/redo history, but rather a reason is it doesnt create a linear undo/redo history, but rather a
complete tree you can navigate to see your complete editing history. complete tree you can navigate to see your complete editing history.
One of the two obvious things to do are to tell Emacs to save all its One of the two obvious things to do are to tell Emacs to save all its
undo history fies in a dedicated directory, otherwise wed risk undo history files in a dedicated directory, otherwise wed risk
littering all of our directories. The second thing is to simply littering all of our directories. The second thing is to simply
globally enable its mode. globally enable its mode.
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -185,7 +185,7 @@ globally enable its mode.
undo-outer-limit (* 128 1024 1024))) undo-outer-limit (* 128 1024 1024)))
#+end_src #+end_src
An interesting behavior from DoomEmacs is to compress the history An interesting behaviour from DoomEmacs is to compress the history
files with ~zstd~ when it is present on the system. Not only do we enjoy files with ~zstd~ when it is present on the system. Not only do we enjoy
much smaller files (according to DoomEmacs, we get something like 80% much smaller files (according to DoomEmacs, we get something like 80%
file savings), Emacs can load them much faster than the regular files. file savings), Emacs can load them much faster than the regular files.

View File

@ -69,7 +69,7 @@ host. This username is retrieved through the following variable:
The huge advantage of straight is it clones through git the packages The huge advantage of straight is it clones through git the packages
it installs. This means development can be done directly on the it installs. This means development can be done directly on the
downloaded package. However, Forge (a Magit extension for interacting downloaded package. However, Forge (a Magit extension for interacting
with websites such as GitHub, Gitlab, and such) interacts by default with websites such as GitHub, GitLab, and such) interacts by default
with the forge described by the =origin= remote, which isnt necessarily with the forge described by the =origin= remote, which isnt necessarily
the one I want Forge to interact with by default. Therefore, the one I want Forge to interact with by default. Therefore,
=straight.el= will name all default remotes =straight= to avoid any name =straight.el= will name all default remotes =straight= to avoid any name

View File

@ -161,7 +161,7 @@ database is to be stored.
I dont want YouTube videos to be open with my web browser when I I dont want YouTube videos to be open with my web browser when I
invoke ~elfeed-show-visit~, so Ill advise this function to make it invoke ~elfeed-show-visit~, so Ill advise this function to make it
possible to modify the behavior of said function. Oh, and I already possible to modify the behaviour of said function. Oh, and I already
made [[file:../../scripts.md#ytplay][a neat package]] for playing YouTube videos and friends through made [[file:../../scripts.md#ytplay][a neat package]] for playing YouTube videos and friends through
[[https://ytdl-org.github.io/youtube-dl/][youtube-dl]] or its superior fork [[https://github.com/yt-dlp/yt-dlp][yt-dlp]] in mpv. [[https://ytdl-org.github.io/youtube-dl/][youtube-dl]] or its superior fork [[https://github.com/yt-dlp/yt-dlp][yt-dlp]] in mpv.
@ -495,7 +495,7 @@ configuration for the ~mu4e~ package itself.
(find-file outfile)))) (find-file outfile))))
#+end_src #+end_src
Quick sidenote: on ArchLinux, youll need to install either ~mu~ or Quick sidenote: on Arch Linux, youll need to install either ~mu~ or
~mu-git~ from the AUR in order to use mu4e. I also have a ~.desktop~ file ~mu-git~ from the AUR in order to use mu4e. I also have a ~.desktop~ file
to make it possible to open mu4e directly from my program picker. It to make it possible to open mu4e directly from my program picker. It
uses the shell script ~emacsmail~ Ive written [[file:bin.org::#Emacsmail-afffb7cd][here]]. uses the shell script ~emacsmail~ Ive written [[file:bin.org::#Emacsmail-afffb7cd][here]].
@ -526,7 +526,7 @@ events shared with me on my personal mailbox. The answer is actually
#+end_src #+end_src
Ill just configure a couple of things regarding these events, namely Ill just configure a couple of things regarding these events, namely
converting them to Orgmode and add them to my =~/org/notes.org= file, converting them to org-mode and add them to my =~/org/notes.org= file,
and delete the email once I answered to the event. and delete the email once I answered to the event.
#+name: mu4e-ical-config #+name: mu4e-ical-config
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -639,7 +639,7 @@ Next I need an inbox dedicated to the association Im part of.
As for the Emacs-doctor list, I need to match both the current, modern As for the Emacs-doctor list, I need to match both the current, modern
mailing list address but also its old address. The same applies for mailing list address but also its old address. The same applies for
the emacs-devel mailing list as well as GitHub emails related to my the emacs-devel mailing list as well as GitHub emails related to my
package ~eshell-info-banner.el~ (*see here*). Here are the addresses to package ~eshell-info-banner.el~. Here are the addresses to
match: match:
# Insert #Packages-Configuration-Emacs-built-ins-Eshell-Visual-configuratione7c2fl6184j0 equivalent in *see here* # Insert #Packages-Configuration-Emacs-built-ins-Eshell-Visual-configuratione7c2fl6184j0 equivalent in *see here*
@ -777,7 +777,7 @@ We can finally define our bookmarks! The code reads as follows:
Sometimes, bookmarks are a bit too restrictive when I want to search Sometimes, bookmarks are a bit too restrictive when I want to search
for stuff. Simply jumping to a mail directory, or maildir, is more for stuff. Simply jumping to a mail directory, or maildir, is more
than enough. In mu4e, with my current setup, I can jump to any maildir than enough. In mu4e, with my current setup, I can jump to any maildir
with the shortcut ~Jo~ in normal-mode, and I just need to chose in a with the shortcut ~Jo~ in normal-mode, and I just need to choose in a
list the maildir I want to jump to. But it can be faster. list the maildir I want to jump to. But it can be faster.
With this piece of code, I can simply jump to my inbox maildir with With this piece of code, I can simply jump to my inbox maildir with
@ -1303,8 +1303,8 @@ reader?
** PDF Tools ** PDF Tools
~pdf-tools~ enables PDF support for Emacs, much better than its built-in ~pdf-tools~ enables PDF support for Emacs, much better than its built-in
support with DocView. Aside from the classical settings such as support with DocView. Aside from the classical settings such as
keybinds, I also enable the midnight colors by default; think of it as keybinds, I also enable the midnight colours by default; think of it
an equivalent of Zathuras recolor feature which kind of enables a as an equivalent of Zathuras recolour feature which kind of enables a
dark mode for PDFs. dark mode for PDFs.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package pdf-tools (use-package pdf-tools
@ -1467,7 +1467,7 @@ I also want to highlight these angular-style keywords in commit messages.
display in the Magit buffer a list of TODOs found in the current display in the Magit buffer a list of TODOs found in the current
project to remind you of what to do next. project to remind you of what to do next.
First, lets se tup our todo keywords with =hl-todo=. A good few todo First, lets setup our todo keywords with =hl-todo=. A good few todo
keywords are already defined in the =hl-todo-keyword-faces= variable. keywords are already defined in the =hl-todo-keyword-faces= variable.
Why not use them? =hl-todo-mode= enables fontlock highlight of these Why not use them? =hl-todo-mode= enables fontlock highlight of these
keywords in a buffer. Lets enable this mode globally. keywords in a buffer. Lets enable this mode globally.
@ -1508,7 +1508,7 @@ deactivate `magit-todos-mode', otherwise enable it."
#+end_src #+end_src
*** Forge *** Forge
Forge acts as an interface for GitHub, Gitlab, and Bitbucket inside Forge acts as an interface for GitHub, GitLab, and Bitbucket inside
Magit. A lot of possibilities are present, you can read issues and Magit. A lot of possibilities are present, you can read issues and
pull requests, create them, and fork projects among other things. pull requests, create them, and fork projects among other things.

View File

@ -43,7 +43,7 @@ major-mode.
#+end_src #+end_src
On the other hand, ~company-box~ is a Company front-end which offers On the other hand, ~company-box~ is a Company front-end which offers
colors, icons, documentation and so on. Very nice. colours, icons, documentation and so on. Very nice.
Declaring all the icons for the variable Declaring all the icons for the variable
~company-box-icons-all-the-icons~ is quite verbose in Elisp, so I do it ~company-box-icons-all-the-icons~ is quite verbose in Elisp, so I do it
@ -207,7 +207,7 @@ I warned you Id use too much ~all-the-icons~, I did!
#+end_src #+end_src
A buffer popping at the bottom of the screen is nice and all, but have A buffer popping at the bottom of the screen is nice and all, but have
you considered a floating buffer in the center of your frame? you considered a floating buffer in the centre of your frame?
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package ivy-posframe (use-package ivy-posframe
:defer t :defer t

View File

@ -134,7 +134,7 @@ behavior.
~smartparens~ is a package similar to ~parinfer~, but while the latter is ~smartparens~ is a package similar to ~parinfer~, but while the latter is
more specialized for Lisp dialects, ~smartparens~ works better with more specialized for Lisp dialects, ~smartparens~ works better with
other programming languages that still uses parenthesis, but not as other programming languages that still uses parenthesis, but not as
much as Lisp dialects; think for example C, C++, Rust, Javascript, and much as Lisp dialects; think for example C, C++, Rust, JavaScript, and
so on. so on.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package smartparens (use-package smartparens
@ -159,7 +159,7 @@ escaping your strings!
** Writeroom ** Writeroom
On the other hand, ~writeroom~ allows the user to enter a On the other hand, ~writeroom~ allows the user to enter a
distraction-free mode of Emacs, and I like that! But the default width distraction-free mode of Emacs, and I like that! But the default width
is a bit too small for me, and I prefer not to go fullscren. is a bit too small for me, and I prefer not to go full-screen.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package writeroom-mode (use-package writeroom-mode
:defer t :defer t

View File

@ -11,7 +11,7 @@ Dired is Emacs built-in file manager. Its really great, and replaces
any graphical file manager for me most of the time because: any graphical file manager for me most of the time because:
- I am not limited to /x/ tabs or panes - I am not limited to /x/ tabs or panes
- All actions can be done with keybindings - All actions can be done with keybindings
- I get a consistent behavior between Dired and Emacs, since its the - I get a consistent behaviour between Dired and Emacs, since its the
same thing. same thing.
I used to have an extensive configuration for Dired with a couple of I used to have an extensive configuration for Dired with a couple of
additional packages to make it more usable. Dirvish rendered that additional packages to make it more usable. Dirvish rendered that
@ -97,18 +97,19 @@ otherwise some commands wont work.
" ")) " "))
#+end_src #+end_src
However, it is possible to instead use ~exa~ when it is available. However, it is possible to instead use =eza= when it is available (its
Instead of making Emacs main thread to the file listing in a a replacement to the unmaintained =exa=). Instead of making Emacs main
directory, we offload it to an external thread. thread to the file listing in a directory, we offload it to an
external thread.
#+name: dirvish-exa-offload #+name: dirvish-exa-offload
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp :tangle no
(dirvish-define-preview exa (file) (dirvish-define-preview eza (file)
"Use `exa' to generate directory preview." "Use `eza' to generate directory preview."
:require ("exa") :require ("eza")
(when (file-directory-p file) (when (file-directory-p file)
`(shell . ("exa" "--color=always" "-al" ,file)))) `(shell . ("eza" "--color=always" "-al" ,file))))
(add-to-list 'dirvish-preview-dispatchers 'exa) (add-to-list 'dirvish-preview-dispatchers 'eza)
#+end_src #+end_src
Finally, some directories need to be set for Dired to store various Finally, some directories need to be set for Dired to store various
@ -243,9 +244,9 @@ window.
(defalias 'openo #'find-file-other-window) (defalias 'openo #'find-file-other-window)
#+end_src #+end_src
The default behavior of ~eshell/clear~ is not great at all, although it The default behaviour of ~eshell/clear~ is not great at all, although it
clears the screen it also scrolls all the way down. Therefore, lets clears the screen it also scrolls all the way down. Therefore, lets
alias it to ~eshell/clear-scrollback~ which has the correct behavior. alias it to ~eshell/clear-scrollback~ which has the correct behaviour.
#+name: eshell-alias-clear #+name: eshell-alias-clear
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp :tangle no
(defalias 'eshell/clear #'eshell/clear-scrollback) (defalias 'eshell/clear #'eshell/clear-scrollback)
@ -348,7 +349,7 @@ something more standard than fish:
I like to have at quick glance some information about my machine when I like to have at quick glance some information about my machine when
I fire up a terminal. I havent found anything that does that the way I fire up a terminal. I havent found anything that does that the way
I like it, so [[https://github.com/Phundrak/eshell-info-banner.el][Ive written a package]]! Its actually available on I like it, so [[https://github.com/Phundrak/eshell-info-banner.el][Ive written a package]]! Its actually available on
MELPA, but since Im the main dev of this package, Ill keep track of Melpa, but since Im the main dev of this package, Ill keep track of
the git repository. the git repository.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package eshell-info-banner (use-package eshell-info-banner
@ -370,7 +371,7 @@ the git repository.
#+end_src #+end_src
Another feature I like is fish-like syntax highlight, which brings Another feature I like is fish-like syntax highlight, which brings
some more colors to Eshell. some more colours to Eshell.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package eshell-syntax-highlighting (use-package eshell-syntax-highlighting
:after (esh-mode eshell) :after (esh-mode eshell)

View File

@ -7,7 +7,7 @@
* EXWM * EXWM
So, Im finally slowly getting back to EXWM. I tried it a couple of So, Im finally slowly getting back to EXWM. I tried it a couple of
years ago, but that was with the SpacemacsOS layer on Spacemacs, on a years ago, but that was with the SpacemacsOS layer on Spacemacs, on a
laptop which got accidentaly formatted before I could save my config laptop which got accidentally formatted before I could save my config
and all… So it got me some time to come back. Im still a bit worried and all… So it got me some time to come back. Im still a bit worried
about Emacs being single threaded, so if I get one blocking function about Emacs being single threaded, so if I get one blocking function
blocking Emacs, my whole desktop will hang, but for now I havent had blocking Emacs, my whole desktop will hang, but for now I havent had
@ -62,14 +62,14 @@ exec emacs --with-exwm
#+end_src #+end_src
** EXWM itself ** EXWM itself
Now we come to the plat de résistance. Like with ~xelb~, Im using its Now we come to the plat de resistance. Like with ~xelb~, Im using its
Git source to install it to make sure I get the right version --- the Git source to install it to make sure I get the right version --- the
version available on the GNU ELPA is from the same source, true, but I version available on the GNU ELPA is from the same source, true, but I
dont know at which rate it is updated. And more packages down the dont know at which rate it is updated. And more packages down the
line will depend on this Git repository, so I might as well just clone line will depend on this Git repository, so I might as well just clone
it right now. it right now.
As you can see, I added in the ~:config~ secion to two hooks functions As you can see, I added in the ~:config~ section to two hooks functions
that rename buffers accurately. While the average X window will simply that rename buffers accurately. While the average X window will simply
get the name of the current X window, I want Firefox and Qutebrowser get the name of the current X window, I want Firefox and Qutebrowser
to be prefixed with the name of the browser. Actually, all these will to be prefixed with the name of the browser. Actually, all these will
@ -123,7 +123,7 @@ want. However, when I exit one, I want to default back to normal-mode.
(advice-add #'exwm-input-release-keyboard :after (lambda (&optional id) (evil-insert-state))) (advice-add #'exwm-input-release-keyboard :after (lambda (&optional id) (evil-insert-state)))
#+end_src #+end_src
Secondly, I add ~i~, ~C-SPC~, and ~M-m~ as exwm prefix keys so they arent Secondly, I add ~i~, ~C-SPC~, and ~M-m~ as exwm prefix keys, so they arent
sent directly to the X windows but caught by Emacs (and EXWM). Ill sent directly to the X windows but caught by Emacs (and EXWM). Ill
use the ~i~ key in normal-mode to enter ~insert-mode~ and have Emacs use the ~i~ key in normal-mode to enter ~insert-mode~ and have Emacs
release the keyboard so the X window can grab it. Initially, I had release the keyboard so the X window can grab it. Initially, I had
@ -362,7 +362,7 @@ The complete configuration for the ~exwm~ package can be found below.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defun create-bluetooth-device (raw-name) (defun create-bluetooth-device (raw-name)
"Create a bluetooth device cons from RAW NAME. "Create a Bluetooth device cons from RAW NAME.
The cons will hold first the MAC address of the device, then its The cons will hold first the MAC address of the device, then its
human-friendly name." human-friendly name."
(let ((split-name (split-string raw-name " " t))) (let ((split-name (split-string raw-name " " t)))

View File

@ -9,7 +9,7 @@
Bufler is a package that organises and lists buffers in a much better Bufler is a package that organises and lists buffers in a much better
way than how they are usually sorted. You can easily and quickly find way than how they are usually sorted. You can easily and quickly find
buffers by their group, not only by their name, and THIS is great buffers by their group, not only by their name, and THIS is great
news! Also, no ~helm~ please! And for some reasons the keybindings are news! Also, no ~helm~ please! And for some reason, the keybindings are
borked by default, so lets redefine them, and lets also rebind ~SPC~ borked by default, so lets redefine them, and lets also rebind ~SPC~
to ~p~ since it would conflict with my main ~general~ prefix. to ~p~ since it would conflict with my main ~general~ prefix.
#+begin_src emacs-lisp #+begin_src emacs-lisp

View File

@ -6,7 +6,7 @@
* Misc * Misc
** ArchWiki pages ** ArchWiki pages
A small package Ive written allows the user to view ArchLinux pages A small package Ive written allows the user to view Arch Linux pages
either in Emacs or in an external web browser. I prefer the defaults. either in Emacs or in an external web browser. I prefer the defaults.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package archwiki (use-package archwiki
@ -114,11 +114,11 @@ quickly find files across my filesystem.
:host github :host github
:repo "phundrak/quick-find-files.el" :repo "phundrak/quick-find-files.el"
:build t) :build t)
:config :custom
(setq quick-find-files-program 'fd (quick-find-files-program 'fd)
quick-find-files-dirs-and-exts '(("~/org" . "org") (quick-find-files-dirs-and-exts '(("~/org" . "org")
("~/Documents/university" . "org")) ("~/Documents/university" . "org")))
quick-find-files-fd-additional-options "-L")) (quick-find-files-fd-additional-options "-L"))
#+end_src #+end_src
** Keycast ** Keycast
@ -255,7 +255,7 @@ Moreover, inside Emacs?
** Winum ** Winum
Winum allows Emacs to associate windows with a specific number and Winum allows Emacs to associate windows with a specific number and
navigate through these windows by directly refering to their navigate through these windows by directly referring to their
associated number! This allows for faster window configuration than associated number! This allows for faster window configuration than
just going to the frame above, then left, left, and up. just going to the frame above, then left, left, and up.
#+begin_src emacs-lisp #+begin_src emacs-lisp

View File

@ -35,7 +35,7 @@ the ~citeproc~ package, a citation processor.
:straight (:build t)) :straight (:build t))
#+end_src #+end_src
Org is the main reason I am using Emacs. It is an extremely powerfu Org is the main reason I am using Emacs. It is an extremely powerful
tool when you want to write anything that is not necessarily primarily tool when you want to write anything that is not necessarily primarily
programming-related, though it absolutely can be! Org can be a programming-related, though it absolutely can be! Org can be a
replacement for anything similar to LibreOffice Writer, LibreOffice replacement for anything similar to LibreOffice Writer, LibreOffice
@ -488,7 +488,7 @@ The capture templates are set like so:
** Custom functions ** Custom functions
*** Emphasize text *** Emphasize text
Sometimes, I want to emphasize some text in my org-mode documents. Sometimes, I want to emphasize some text in my org-mode documents.
Its very possible to just go to the begining of the chosen text, add Its very possible to just go to the beginning of the chosen text, add
the marker, then go to the end of the text than needs emphasis and add the marker, then go to the end of the text than needs emphasis and add
another marker, and Im sure most people are fine with that. But I another marker, and Im sure most people are fine with that. But I
also like being able to select a region and hit a keybind to emphasize also like being able to select a region and hit a keybind to emphasize
@ -574,7 +574,7 @@ the value `split-window-right', then it will be changed to
#+end_src #+end_src
** Exporters ** Exporters
I want to disable by default behavior of ~^~ and ~_~ for only one I want to disable by default behaviour of ~^~ and ~_~ for only one
character, making it compulsory to use instead ~^{}~ and ~_{}~ character, making it compulsory to use instead ~^{}~ and ~_{}~
respectively. This is due to my frequent usage of the underscore in my respectively. This is due to my frequent usage of the underscore in my
org files as a regular character and not a markup one, especially when org files as a regular character and not a markup one, especially when
@ -614,12 +614,6 @@ exported HTML. Lets disable that since I never use it.
(setq org-html-validation-link nil) (setq org-html-validation-link nil)
#+END_SRC #+END_SRC
#+begin_src emacs-lisp
;; (use-package htmlize
;; :defer t
;; :straight (:build t))
#+end_src
This package allows for live-previewing the HTML export of an org This package allows for live-previewing the HTML export of an org
buffer in an XWidget Webkit browser window. But when testing it, its buffer in an XWidget Webkit browser window. But when testing it, its
not great for large org files, I should keep its usage for smaller org not great for large org files, I should keep its usage for smaller org
@ -700,11 +694,11 @@ coloring is ~engraved~.
(setq org-latex-src-block-backend 'engraved) (setq org-latex-src-block-backend 'engraved)
#+end_src #+end_src
The default packages break my LaTeX exports: for some reasons, images The default packages break my LaTeX exports: for some reason, images
are not loaded and exported in PDFs, so I needed to redifine the are not loaded and exported in PDFs, so I needed to redefine the
default packages excluding the one that broke my exports; namely, I default packages excluding the one that broke my exports; namely, I
need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some default need to remove ~inputenc~, ~fontenc~ and ~grffile~. I also added some
packages: default packages:
- ~cleveref~ for better references to various elements. - ~cleveref~ for better references to various elements.
- ~svg~ for inserting SVG files in PDF outputs - ~svg~ for inserting SVG files in PDF outputs
- ~booktabs~ for nicer tables - ~booktabs~ for nicer tables
@ -927,9 +921,9 @@ Finally, lets make enabling and disabling stuff accessible:
:PROPERTIES: :PROPERTIES:
:header-args:emacs-lisp: :tangle no :exports code :results silent :header-args:emacs-lisp: :tangle no :exports code :results silent
:END: :END:
I currently have two custom formats for my Org-mode exports: one for general use I currently have two custom formats for my Org-mode exports: one for
(initialy for my conlanging files, hence its ~conlang~ name), and one for beamer general use (initially for my conlanging files, hence its ~conlang~
exports. name), and one for beamer exports.
Below is the declaration of the ~conlang~ LaTeX class: Below is the declaration of the ~conlang~ LaTeX class:
#+NAME: org-latex-class-conlang #+NAME: org-latex-class-conlang

View File

@ -64,9 +64,9 @@ it is.
*** Databases *** Databases
A really cool tool in Emacs for manipulating databases is ~emacsql~. A really cool tool in Emacs for manipulating databases is ~emacsql~.
Its able to manipulate Sqlite databases by default, but its also Its able to manipulate SQLite databases by default, but its also
possible to manipulate MariaDB and PostgreSQL databases by installing possible to manipulate MariaDB and PostgreSQL databases by installing
additional packages. For now, I just need Sqlite and PostgreSQL additional packages. For now, I just need SQLite and PostgreSQL
interfaces, so lets install the relevant packages. interfaces, so lets install the relevant packages.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package emacsql-psql (use-package emacsql-psql
@ -257,7 +257,7 @@ I also want all the visual enhancements LSP can provide.
"r" #'lsp-ui-pook--select-next-file)) "r" #'lsp-ui-pook--select-next-file))
#+end_src #+end_src
And lets enable some intergration with ~ivy~. And lets enable some integration with ~ivy~.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package lsp-ivy (use-package lsp-ivy
:straight (:build t) :straight (:build t)
@ -491,7 +491,7 @@ language [[http://www.gnuplot.info/][Gnuplot]]. Lets make some beautiful grap
#+end_src #+end_src
*** Graphviz *** Graphviz
[[https://graphviz.org/][Graphviz]], often known with ~dot~, allows to programatically create [[https://graphviz.org/][Graphviz]], often known with ~dot~, allows to programmatically create
visual graphs and networks. visual graphs and networks.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package graphviz-dot-mode (use-package graphviz-dot-mode
@ -1243,7 +1243,7 @@ Access pydoc through counsel.
#+end_src #+end_src
This generates Python documentation that is meant to be compatible This generates Python documentation that is meant to be compatible
with Sphinx, a documentation generaton for Python. with Sphinx, a documentation generation for Python.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package sphinx-doc (use-package sphinx-doc
:defer t :defer t
@ -1402,7 +1402,7 @@ modifications.
#+end_src #+end_src
Web mode is a sort of hybrid major mode that allows editing several Web mode is a sort of hybrid major mode that allows editing several
languages in the same buffer, mainly HTML, CSS, and Javascript. languages in the same buffer, mainly HTML, CSS, and JavaScript.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package web-mode (use-package web-mode
:defer t :defer t
@ -1540,7 +1540,7 @@ activate when I open ~.less~ files by default. Lets fix that.
**** Javascript **** Javascript
:END: :END:
~javascript-mode~ is meh at best, while ~rjsx-mode~ (Real JSX) is much ~javascript-mode~ is meh at best, while ~rjsx-mode~ (Real JSX) is much
better: it supports both Javascript and ~.jsx~ files for React and better: it supports both JavaScript and ~.jsx~ files for React and
Next.JS. Next.JS.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package rjsx-mode (use-package rjsx-mode
@ -1577,7 +1577,7 @@ Next.JS.
js2-idle-timer-delay 0.15)) js2-idle-timer-delay 0.15))
#+end_src #+end_src
~js2-refactor~ is an amazing tool for refactoring Javascript code. I ~js2-refactor~ is an amazing tool for refactoring JavaScript code. I
mean, [[https://www.youtube.com/watch?v=-7yMWD1wUu4][look at this]]! And the video is only from 2013, and it still mean, [[https://www.youtube.com/watch?v=-7yMWD1wUu4][look at this]]! And the video is only from 2013, and it still
receives some commits! receives some commits!
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -1589,8 +1589,8 @@ receives some commits!
:hook (rjsx-mode . js2-refactor-mode)) :hook (rjsx-mode . js2-refactor-mode))
#+end_src #+end_src
Which Emacser prefers the command line over Emacs itself? I dont. Is there any Emacser who prefers the command line over Emacs itself? I
Lets interact with NPM through Emacs then. dont. Lets interact with NPM through Emacs then.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package npm-transient (use-package npm-transient
:defer t :defer t
@ -1605,7 +1605,7 @@ Lets interact with NPM through Emacs then.
;; "n" #'npm-transient)) ;; "n" #'npm-transient))
#+end_src #+end_src
And finally, here is a formatter for Javascript. And finally, here is a formatter for JavaScript.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package prettier-js (use-package prettier-js
:defer t :defer t
@ -1618,7 +1618,7 @@ And finally, here is a formatter for Javascript.
**** Typescript **** Typescript
:END: :END:
Typescript is a safer alternative to Javascript. Lets install its major mode then. Typescript is a safer alternative to JavaScript. Lets install its major mode then.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package typescript-mode (use-package typescript-mode
:defer t :defer t
@ -1712,78 +1712,7 @@ First, here is its major mode.
#+end_src #+end_src
For LSP to work, we need ~zls~ to be installed. In my case, as I am on For LSP to work, we need ~zls~ to be installed. In my case, as I am on
ArchLinux, I can install it from the AUR, and my AUR helper is ~paru~. Arch Linux, I can install it from the AUR, and my AUR helper is ~paru~.
#+begin_src fish :results raw :wrap "src text" :exports code #+begin_src fish :results raw :wrap "src text" :exports code
paru --skipreview --noconfirm -S zls-bin 2>&1 paru --skipreview --noconfirm -S zls-bin 2>&1
#+end_src #+end_src
#+RESULTS:
#+begin_src text
:: Resolving dependencies...
:: Calculating conflicts...
:: Calculating inner conflicts...
Aur (1) Old Version New Version Make Only
aur/zls-bin 0.10.0-1 No
:: Proceed with installation? [Y/n]:
:: Downloading PKGBUILDs...
PKGBUILDs up to date
fetching devel info...
==> Making package: zls-bin 0.10.0-1 (ven. 19 mai 2023 11:23:59)
==> Retrieving sources...
-> Downloading zls-LICENSE.txt...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1091 100 1091 0 0 3596 0 --:--:-- --:--:-- --:--:-- 3600
-> Downloading zls-bin-0.10.0.tar.gz...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
56 1477k 56 827k 0 0 1164k 0 0:00:01 --:--:-- 0:00:01 1164k 100 1477k 100 1477k 0 0 2012k 0 --:--:-- --:--:-- --:--:-- 27.5M
==> Validating source files with sha256sums...
zls-LICENSE.txt ... Passed
==> Validating source_x86_64 files with sha256sums...
zls-bin-0.10.0.tar.gz ... Passed
==> Making package: zls-bin 0.10.0-1 (ven. 19 mai 2023 11:24:02)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
-> Found zls-LICENSE.txt
-> Found zls-bin-0.10.0.tar.gz
==> Validating source files with sha256sums...
zls-LICENSE.txt ... Passed
==> Validating source_x86_64 files with sha256sums...
zls-bin-0.10.0.tar.gz ... Passed
==> Removing existing $srcdir/ directory...
==> Extracting sources...
-> Extracting zls-bin-0.10.0.tar.gz with bsdtar
==> Sources are ready.
zls-bin-0.10.0-1: parsing pkg list...
:: zls-bin-0.10.0-1 is up to date -- skipping build
loading packages...
resolving dependencies...
looking for conflicting packages...
Package (1) New Version Net Change
zls-bin 0.10.0-1 1,36 MiB
Total Installed Size: 1,36 MiB
:: Proceed with installation? [Y/n]
checking keyring...
checking package integrity...
loading package files...
checking for file conflicts...
checking available disk space...
:: Processing package changes...
installing zls-bin...
Consider runing 'zls --config' to setup initial configuration
This is not required, but it is highly recommended
:: Running post-transaction hooks...
(1/2) Arming ConditionNeedsUpdate...
(2/2) Refreshing PackageKit...
#+end_src

View File

@ -122,10 +122,8 @@ of our symbols when the cursor is on it.
#+end_src #+end_src
** Ligatures ** Ligatures
The font Im using (see *here*) supports ligatures, but Emacs in GUI The font Im using supports ligatures, but Emacs in GUI mode does not.
mode does not. And of course, theres a package for that. And of course, theres a package for that.
# Insert equivalent of #Basic-configuration-Visual-Configuration-Fontsxfkjel6184j0 in *here*
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package ligature (use-package ligature
@ -175,9 +173,8 @@ The DoomEmacs modeline looks nice in my opinion, lets use it.
#+end_src #+end_src
** Pixel-perfect alignment of Markdown and org-mode tables ** Pixel-perfect alignment of Markdown and org-mode tables
:END:
Usually, I have no issue with the alignment of the tables I write in Usually, I have no issue with the alignment of the tables I write in
org-mode and (more rarely) Markdown. However, there are occurences org-mode and (more rarely) Markdown. However, there are occurrences
where Ill use a character that does not exactly respect my monospace where Ill use a character that does not exactly respect my monospace
font, which messes with the alignment of the table (often when I do font, which messes with the alignment of the table (often when I do
linguistics stuff). A solution to this is the package ~valign~. A little linguistics stuff). A solution to this is the package ~valign~. A little
@ -215,7 +212,7 @@ sometimes theres just too much. Is the first window source code? Is
the other one just an open email? Oh, lets not forget the ~*Messages*~ the other one just an open email? Oh, lets not forget the ~*Messages*~
buffer open next to another source buffer. buffer open next to another source buffer.
Solaire-mode applies a subtle but useful tweak to your current color Solaire-mode applies a subtle but useful tweak to your current colour
scheme: the background of programming buffers is slightly lighter than scheme: the background of programming buffers is slightly lighter than
the background of other buffers. (Or is it other buffers that have a the background of other buffers. (Or is it other buffers that have a
slightly darker background? Im not sure.) slightly darker background? Im not sure.)
@ -229,7 +226,7 @@ slightly darker background? Im not sure.)
** Theme ** Theme
You may have noticed I use the Nord theme pretty much everywhere on my You may have noticed I use the Nord theme pretty much everywhere on my
computer, why not Emacs? In my opinion, its aurora variant is nicer computer, why not Emacs? In my opinion, its aurora variant is nicer
than the default Nord theme since it is richer in colors --- just a than the default Nord theme since it is richer in colours --- just a
personal preference. personal preference.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package doom-themes (use-package doom-themes
@ -248,9 +245,9 @@ for any language that has delimiters like brackets too.
:hook (prog-mode . rainbow-delimiters-mode)) :hook (prog-mode . rainbow-delimiters-mode))
#+end_src #+end_src
** Yall want some more /COLORS/? ** Yall want some more /COLOURS/?
It is possible to make info buffers much more colorful (and imo easier It is possible to make info buffers much more colourful (and, in my
to read) with this simple package: opinion, easier to read) with this simple package:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package info-colors (use-package info-colors
:straight (:build t) :straight (:build t)

View File

@ -17,8 +17,8 @@ end
#+END_SRC #+END_SRC
** Fish from within Emacs ** Fish from within Emacs
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the I sometimes call fish from within Emacs, with =M-x ansi-term=. In this
variable =TERM= needs to have the value =eterm-color=. case, the variable =TERM= needs to have the value =eterm-color=.
#+BEGIN_SRC fish #+BEGIN_SRC fish
if test -n "$EMACS" if test -n "$EMACS"
set -x TERM eterm-color set -x TERM eterm-color
@ -33,8 +33,8 @@ fenv source ~/.profile
#+end_src #+end_src
*** Development *** Development
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so Finally, some development packages require the =PKG_CONFIG_PATH= to be
lets do so. set, so lets do so.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
#+END_SRC #+END_SRC
@ -64,7 +64,8 @@ function. I just want it empty.
function fish_greeting; end function fish_greeting; end
#+END_SRC #+END_SRC
For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Lets load it: For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Lets
load it:
#+begin_src fish #+begin_src fish
starship init fish | source starship init fish | source
#+end_src #+end_src
@ -74,9 +75,13 @@ starship init fish | source
:PROPERTIES: :PROPERTIES:
:header-args:toml: :tangle ~/.config/starship.toml :header-args:toml: :tangle ~/.config/starship.toml
:END: :END:
As mentioned above, starship is a shell-agnostic prompt, written in Rust and which can be configured separately from the shell. I decided to configure it here though, since fish is the only shell I use which is compatible with starship. As mentioned above, starship is a shell-agnostic prompt, written in
Rust and which can be configured separately from the shell. I decided
to configure it here though, since fish is the only shell I use which
is compatible with starship.
First Ill modify the default format variable, removing the modules I dont need. First Ill modify the default format variable, removing the modules I
dont need.
#+begin_src toml #+begin_src toml
format = """ format = """
$username\ $username\
@ -117,7 +122,9 @@ $shell\
$character""" $character"""
#+end_src #+end_src
I want starship to be able to detect Lisp files, be it CommonLisp or EmacsLisp. Unfortunately, it seems nerd-font doesnt have any symbol for either language, so Im 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 doesnt have any symbol
for either language, so Im just using a lambda character.
#+begin_src toml #+begin_src toml
[custom.lisp] [custom.lisp]
extensions = ["lisp", "el"] extensions = ["lisp", "el"]
@ -186,7 +193,8 @@ disable = true
#+end_src #+end_src
*** Loading ~zoxide~ *** Loading ~zoxide~
~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded like so: ~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded
like so:
#+begin_src fish #+begin_src fish
zoxide init fish | source zoxide init fish | source
#+end_src #+end_src
@ -202,13 +210,14 @@ zoxide init fish | source
t t) t t)
#+END_SRC #+END_SRC
Abbreviations are a great way to keep correctly track of which commands are run Abbreviations are a great way to keep correctly track of which
in the shell without polluting the history of the shell with obscure commands. commands are run in the shell without polluting the history of the
When typing an abbreviation, fish will replace it with replace it with its shell with obscure commands. When typing an abbreviation, fish will
expanded equivalent. Below are some of the abbreviations I use. Be aware some of replace it with replace it with its expanded equivalent. Below are
them that invoke GUI programs can be invoked through ~devour~ which will make some of the abbreviations I use. Be aware some of them that invoke GUI
the terminal disappear while the program runs, and once the GUI program exists programs can be invoked through ~devour~ which will make the terminal
the terminal window will come back. disappear while the program runs, and once the GUI program exists the
terminal window will come back.
*** System monitoring *** System monitoring
Here I have some abbreviations which are quite useful when performing Here I have some abbreviations which are quite useful when performing
@ -241,14 +250,15 @@ important threads in terms of memory usage.
#+END_SRC #+END_SRC
*** System management (packages and services) *** System management (packages and services)
I added some of these abbreviations due to how often I have to write the whole I added some of these abbreviations due to how often I have to write
thing. the whole thing.
**** Package management **** Package management
The first command is =remove= which removes a package from my system, as well as The first command is =remove= which removes a package from my system, as
its dependencies no longer needed. =p=. =pacman='s or =paru='s. This is why I well as its dependencies no longer needed. =p=. =pacman='s or =paru='s. This
simply type =purge=. And if I want to simply seach among the =pacman= repos, I is why I simply type =purge=. And if I want to simply search among the
can type =search=. Otherwise, if I want to include AUR results, Ill use =paru=. =pacman= repos, I can type =search=. Otherwise, if I want to include AUR
results, Ill use =paru=.
#+NAME: pm-abbr #+NAME: pm-abbr
| abbreviation | command | | abbreviation | command |
@ -261,9 +271,9 @@ can type =search=. Otherwise, if I want to include AUR results, Ill use =paru
#+END_SRC #+END_SRC
**** Service management **** Service management
I dont have the muscle memory of =systemctl=. So instead, I simply type =c= I dont have the muscle memory of =systemctl=. So instead, I simply type
when I want to do something user service related. And if I want to manipulate =c= when I want to do something user service related. And if I want to
system services, I can instead type a simple capital =S=. manipulate system services, I can instead type a simple capital =S=.
#+NAME: service-abbr #+NAME: service-abbr
| abbreviation | command | | abbreviation | command |
|--------------+------------------| |--------------+------------------|
@ -275,8 +285,8 @@ system services, I can instead type a simple capital =S=.
#+END_SRC #+END_SRC
*** Development *** Development
A good amount of these commands are development related, especially when it A good amount of these commands are development related, especially
comes to compilation or Docker. when it comes to compilation or Docker.
**** CMake **** CMake
I have the following abbreviations to quickly run CMake and create a I have the following abbreviations to quickly run CMake and create a
@ -411,12 +421,13 @@ Here is the corresponding fish configuration:
#+END_SRC #+END_SRC
*** Typos *** Typos
Let's admit it, we all make typos from time to time in the shell, and some are Let's admit it, we all make typos from time to time in the shell, and
recurrent enough we make abbreviations or aliases of the correct command. Well, some are recurrent enough we make abbreviations or aliases of the
I have some of my abbreviations which were make exactly because of this. correct command. Well, I have some of my abbreviations which were make
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~. exactly because of this. Sometimes for some reason, my brain makes me
So, let's just replace the former by the latter. I'm also very bad at typing write ~clean~ instead of ~clear~. So, let's just replace the former by the
~exit~. And sometimes I suck at typing ~htop~. latter. I'm also very bad at typing ~exit~. And sometimes I suck at
typing ~htop~.
#+NAME: typo-abbr #+NAME: typo-abbr
| abbreviation | command | | abbreviation | command |
|--------------+---------| |--------------+---------|
@ -434,17 +445,6 @@ Here is the corresponding fish configuration:
Finally, some miscellaneous abbreviations that don't really fit into any of the Finally, some miscellaneous abbreviations that don't really fit into any of the
above categories. above categories.
**** Screens setup
I have an automatic screen setup for when I am at home, but it
unfortunately doesnt match my setup at work. =autorandr horizontal=
does not work because my third screen is vertical, the wallpaper is
misaligned, and picom becomes too taxing on my system. I ended up
writing the following command each morning, but now a simple abbrev
does the work for me.
#+begin_src fish
abbr work 'autorandr -l work; xwallpaper --zoom (cat $HOME/.cache/wallpaper); pkill picom'
#+end_src
**** Media **** Media
Here you will find various commands related to media in general. The Here you will find various commands related to media in general. The
first one is a command to play some chillhop from the [[https://www.youtube.com/@LofiGirl][Lofi Girl first one is a command to play some chillhop from the [[https://www.youtube.com/@LofiGirl][Lofi Girl
@ -453,7 +453,7 @@ YouTube channel]]'s livestream.
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &' abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &'
#+END_SRC #+END_SRC
When it comes to mpv, I do not want to force it to open a graphical window if When it comes to MPV, I do not want to force it to open a graphical window if
for example I want to listen to an audio file. I also do not want any border on for example I want to listen to an audio file. I also do not want any border on
that window. So, I declared this abbreviation. that window. So, I declared this abbreviation.
#+BEGIN_SRC fish #+BEGIN_SRC fish
@ -467,7 +467,7 @@ abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(upl
#+END_SRC #+END_SRC
Some sane default options for [[https://github.com/nsxiv/nsxiv][~nsxiv~]]. This includes playing GIFs and Some sane default options for [[https://github.com/nsxiv/nsxiv][~nsxiv~]]. This includes playing GIFs and
not displaying the filename below. Nsxiv will also open in fullscreen not displaying the filename below. Nsxiv will also open in full-screen
and will fit the displayed image to the frame. It will also output to and will fit the displayed image to the frame. It will also output to
stdout the selected files in case I want to pipe them to another stdout the selected files in case I want to pipe them to another
program. program.
@ -481,8 +481,8 @@ GPU.
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia' abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
#+end_src #+end_src
Finally, let's declare the following abbreviation that will launch a MPV Finally, let's declare the following abbreviation that will launch an
instance displaying my webcam: MPV instance displaying my webcam:
#+BEGIN_SRC fish #+BEGIN_SRC fish
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed' abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed'
#+END_SRC #+END_SRC
@ -519,29 +519,29 @@ abbreviation of ~remove~ (see [[file:./fish.md#package-management][Package manag
#+END_SRC #+END_SRC
**** exa **** exa
#+NAME: exa-abbr #+NAME: eza-abbr
| abbreviation | command | | abbreviation | command |
|--------------+--------------------------------------------| |--------------+--------------------------------------------|
| exa | exa -halg@ --group-directories-first --git | | eza | eza -halg@ --group-directories-first --git |
| lsl | exa -halg@ --group-directories-first --git | | lsl | eza -halg@ --group-directories-first --git |
#+BEGIN_SRC fish #+BEGIN_SRC fish
<<generate-abbr(table=exa-abbr)>> <<generate-abbr(table=eza-abbr)>>
#+END_SRC #+END_SRC
**** Network Management **** Network Management
First, we have just =nmcli= with sane default options, that is a pretty output First, we have just =nmcli= with sane default options, that is a pretty
with colors. output with colours.
#+BEGIN_SRC fish #+BEGIN_SRC fish
abbr nmcli 'nmcli -p -c auto' abbr nmcli 'nmcli -p -c auto'
#+END_SRC #+END_SRC
**** NordVPN **** NordVPN
Next, we have some NordVPN-related shortcuts. The first one is a simple Next, we have some NordVPN-related shortcuts. The first one is a
abbreviation to =nordvpn=. The second one is a shortcut to connect to a server, simple abbreviation to =nordvpn=. The second one is a shortcut to
and to disconnect from the current server. I also have a couple of shortcuts to connect to a server, and to disconnect from the current server. I also
quickly connect to some preselected countries, mainly France, Germany, Japan and have a couple of shortcuts to quickly connect to some preselected
the US. countries, mainly France, Germany, Japan and the US.
#+NAME: nordvpn-abbr #+NAME: nordvpn-abbr
| abbreviation | command | | abbreviation | command |
|--------------+-------------------------| |--------------+-------------------------|
@ -558,7 +558,7 @@ the US.
#+END_SRC #+END_SRC
**** Wget **** Wget
By default, continue a download that was interupted. By default, continue a download that was interrupted.
#+BEGIN_SRC fish #+BEGIN_SRC fish
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c' abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
#+END_SRC #+END_SRC
@ -581,7 +581,7 @@ function fish_command_not_found
end end
#+END_SRC #+END_SRC
Tadah! No more package suggestions from fish! Ta-dah! No more package suggestions from fish!
I also have some private abbreviations I dont want people to know I also have some private abbreviations I dont want people to know
about that I store in a separate configuration file. about that I store in a separate configuration file.

View File

@ -67,8 +67,8 @@ MPD each time we run it.
#+end_src #+end_src
** Audio outputs ** Audio outputs
Two audio outputs will be defined. The first one sets Pulseaudio up so Two audio outputs will be defined. The first one sets Pulseaudio up,
I can actually hear my music. Its configuration is simple, really. so I can actually hear my music. Its configuration is simple, really.
#+begin_src conf-space #+begin_src conf-space
audio_output { audio_output {
type "pulse" type "pulse"

View File

@ -5,30 +5,32 @@
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes #+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
* Neofetch * Neofetch
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was written in [[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was
Bash, and thus its configuration file is written as a Bash script too. This written in Bash, and thus its configuration file is written as a Bash
document was written with org-mode, and my configuration file is tangled from script too. This document was written with org-mode, and my
the source blocks you will see below to ~~/.config/neofetch/config.conf~. This configuration file is tangled from the source blocks you will see
configuration will only contain what I need. For any further information, please below to ~~/.config/neofetch/config.conf~. This configuration will only
refer to the [[https://github.com/dylanaraps/neofetch][original repository]] and [[https://github.com/dylanaraps/neofetch/wiki/Customizing-Info][its documentation]]. contain what I need. For any further information, please refer to the
[[https://github.com/dylanaraps/neofetch][original repository]] and [[https://github.com/dylanaraps/neofetch/wiki/Customizing-Info][its documentation]].
** The ~print_info~ functions ** The ~print_info~ functions
The ~print_info~ function is the function called by Neofetch in order to print The ~print_info~ function is the function called by Neofetch in order to
the system information it could fetch. In this function, well choose what to print the system information it could fetch. In this function, well
display, and how. This function looks like this: choose what to display, and how. This function looks like this:
#+BEGIN_SRC sh :tangle no #+BEGIN_SRC sh :tangle no
print_info() { print_info() {
# Print information here… # Print information here…
} }
#+END_SRC #+END_SRC
Generally, what we will display will be shown through the ~info~ function, Generally, what we will display will be shown through the ~info~
redefined inside Neofetch (this is not ~info(1)~). This ~info~ function accepts function, redefined inside Neofetch (this is not ~info(1)~). This ~info~
one or two arguments. With one argument, such as with ~info memory~, we can get function accepts one or two arguments. With one argument, such as with
a result that looks like ~5136MiB / 15873MiB~, while calling it with two ~info memory~, we can get a result that looks like ~5136MiB / 15873MiB~,
arguments will treat the first one as a prefix and the second one as the while calling it with two arguments will treat the first one as a
interesting information; ~info "Memory" memory~ will look like prefix and the second one as the interesting information;
~Memory: 5136MiB / 15873MiB~. Here is what we want to display: ~info "Memory" memory~ will look like ~Memory: 5136MiB / 15873MiB~. Here
is what we want to display:
#+NAME: info-elements-table #+NAME: info-elements-table
| Prefix | Information | What it does | | Prefix | Information | What it does |
|----------+-------------+------------------------------| |----------+-------------+------------------------------|
@ -90,10 +92,11 @@ Each of these modules can be tuned with the variables presented below.
** Information settings ** Information settings
Each of the following variable tunes a function that can be called in Each of the following variable tunes a function that can be called in
~print_info~ described above. It is possible to tune them by modifying this ~print_info~ described above. It is possible to tune them by modifying
document or the configuration file itself, and they can be overridden by the this document or the configuration file itself, and they can be
command line with flags passed to ~neofetch~. I will divide these variables in overridden by the command line with flags passed to ~neofetch~. I will
two main categories: hardware and software-related properties. divide these variables in two main categories: hardware and
software-related properties.
*** Software *** Software
**** OS **** OS
@ -112,15 +115,16 @@ This variable can shorten the output of the ~distro~ function.
distro_shorthand="off" distro_shorthand="off"
#+end_src #+end_src
It is possible to display when the distro has been installed on the computer. It is possible to display when the distro has been installed on the
computer.
****** Distro art or image ****** Distro art or image
By default, Neofetch will display ascii art next to our system information By default, Neofetch will display ASCII art next to our system
representing our distros logo. Well customize it a bit. First, lets change information representing our distros logo. Well customize it a bit.
the ~backend~ value. Note that most of them (except ~off~ of course) support First, lets change the ~backend~ value. Note that most of them (except
shorthands such as ~--kitty~ when passed as arguments from the command line. In ~off~ of course) support shorthands such as ~--kitty~ when passed as
my case, I will use the Kitty backend since it is the native backend of the arguments from the command line. In my case, I will use the Kitty
terminal emulator I use. backend since it is the native backend of the terminal emulator I use.
- Default value :: ~"ascii"~ - Default value :: ~"ascii"~
- Values :: - Values ::
- ~ascii~ - ~ascii~
@ -143,10 +147,10 @@ terminal emulator I use.
image_backend="kitty" image_backend="kitty"
#+END_SRC #+END_SRC
Now, since I indicated I wanted an image engine, Ill indicate neofetch which Now, since I indicated I wanted an image engine, Ill indicate
image to find. Note that ~auto~ will pick the best image source for whatever Neofetch which image to find. Note that ~auto~ will pick the best image
image backend is used. In ascii mode, distro ascii art will be used and in an source for whatever image backend is used. In ASCII mode, distro ASCII
image mode, your wallpaper will be used. art will be used and in an image mode, your wallpaper will be used.
- Default value :: ~auto~ - Default value :: ~auto~
- Values :: - Values ::
- ~auto~ - ~auto~
@ -272,18 +276,6 @@ It is possible to display the machines public IP address with the function
public_ip_host="http://ident.me" public_ip_host="http://ident.me"
#+end_src #+end_src
# - Default value :: ~""~
# - Values ::
# - ~""~
# - ~""~
# - Flag :: ~""~
# - Supports ::
# - Examples ::
# - on :: ~~
# - off :: ~~
# #+begin_src sh
# #+end_src
**** Theming **** Theming
This section will allow the user to modify what Neofetch can and cannot display This section will allow the user to modify what Neofetch can and cannot display
about the machines theming —by this, I mean its GTK theme, its icons and its about the machines theming —by this, I mean its GTK theme, its icons and its
@ -413,10 +405,10 @@ cpu_cores="off"
#+end_src #+end_src
***** CPU temperature ***** CPU temperature
This variable allows the user to hide or show the CPUs temperature, and if This variable allows the user to hide or show the CPUs temperature,
shown, the user can display it in Celcius or Farenheit degrees. For FreeBSD and and if shown, the user can display it in Celsius or Fahrenheit
NetBSD-based systems, youll need to enable the ~coretemp~ kernel module. This degrees. For FreeBSD and NetBSD-based systems, youll need to enable
only supports newer Intel processors. the ~coretemp~ kernel module. This only supports newer Intel processors.
- Default value :: ~"off"~ - Default value :: ~"off"~
- Values :: - Values ::
- ~"C"~ - ~"C"~

View File

@ -37,10 +37,10 @@ shadow-offset-x = -16;
shadow-offset-y = -16; shadow-offset-y = -16;
#+END_SRC #+END_SRC
It is possible to set the color of the shadow with the string contained in It is possible to set the colour of the shadow with the string
~shadow-color~ with a hexadecimal value. I havent included these values in my contained in ~shadow-color~ with a hexadecimal value. I havent included
config, but this value will override any value in ~shadow-red~, ~shadow-green~, these values in my config, but this value will override any value in
or ~shadow-blue~. ~shadow-red~, ~shadow-green~, or ~shadow-blue~.
#+BEGIN_SRC conf #+BEGIN_SRC conf
shadow-color = "#171A20" shadow-color = "#171A20"
#+END_SRC #+END_SRC
@ -130,10 +130,10 @@ rounded-corners-exclude = [
#+END_SRC #+END_SRC
** Fading ** Fading
Picom has the ability to create some fading effects on windows when opening or Picom has the ability to create some fading effects on windows when
closing or when the opacity changes. The following parameter toggles this opening or closing or when the opacity changes. The following
feature on or off. However, its behavior can be changed with parameter toggles this feature on or off. However, its behaviour can
~no-fading-openclose~. be changed with ~no-fading-openclose~.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
fading = true fading = true
@ -204,7 +204,8 @@ This however describes the opacity of window titlebars and borders.
frame-opacity = 1.0; frame-opacity = 1.0;
#+END_SRC #+END_SRC
~menu-opacity~ describes the opacity for dropdown menus and popup menus. ~menu-opacity~ describes the opacity for dropdown menus and pop-up
menus.
| Default value | ~1.0~ | | Default value | ~1.0~ |
| Min value | ~0.1~ | | Min value | ~0.1~ |
| Max value | ~1.0~ | | Max value | ~1.0~ |
@ -270,9 +271,10 @@ blur: {
} }
#+END_SRC #+END_SRC
This value enables or disables the blur for the background of semi-transparent This value enables or disables the blur for the background of
or ARGB windows. It has bad performances though, with driver-dependent behavior. semi-transparent or ARGB windows. It has bad performances though, with
The name of the switch may change without prior notifications. driver-dependent behaviour. The name of the switch may change without
prior notifications.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
blur-background = true; blur-background = true;
@ -338,8 +340,8 @@ details.
dbus = false; dbus = false;
#+END_SRC #+END_SRC
Try to detect WM windows (a non-override-redirect window with no child that has Try to detect WM windows (a non-override-redirect window with no child
~WM_STATE~) and markz them as active. that has ~WM_STATE~) and marks them as active.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
mark-wmwin-focused = true; mark-wmwin-focused = true;
@ -434,17 +436,17 @@ you use ~--resize-damage 2~, and so on). May or may not work with
resize-damage = 1; resize-damage = 1;
#+END_SRC #+END_SRC
Specify a list of conditions of windows that should be painted with inverted Specify a list of conditions of windows that should be painted with
color. Resource-hogging, and is not well tested. inverted colour. Resource-hogging, and is not well tested.
| Default value | ~[]~ | | Default value | ~[]~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
invert-color-include = []; invert-color-include = [];
#+END_SRC #+END_SRC
Disable the use of damage information. This cause the whole screen to be redrawn Disable the use of damage information. This cause the whole screen to
everytime, instead of the part of the screen has actually changed. Potentially be redrawn every time, instead of the part of the screen has actually
degrades the performance, but might fix some artifacts. The opposing option is changed. Potentially degrades the performance, but might fix some
use-damage artefacts. The opposing option is use-damage
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
use-damage = false; use-damage = false;
@ -465,8 +467,8 @@ glx-fshader-win that could turn opaque pixels transparent.
force-win-blend = false; force-win-blend = false;
#+END_SRC #+END_SRC
Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is Do not use EWMH to detect full-screen windows. Reverts to checking if a window is
fullscreen based only on its size and coordinates. full-screen based only on its size and coordinates.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
no-ewmh-fullscreen = false; no-ewmh-fullscreen = false;
@ -524,8 +526,8 @@ Write process ID to a file.
# write-pid-path = '/path/to/your/log/file'; # write-pid-path = '/path/to/your/log/file';
#+END_SRC #+END_SRC
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in Window type settings. ~WINDOW_TYPE~ is one of the 15 window types
EWMH standard: defined in EWMH standard:
- ~"unknown"~ - ~"unknown"~
- ~"desktop"~ - ~"desktop"~
- ~"dock"~ - ~"dock"~
@ -542,16 +544,18 @@ EWMH standard:
- ~"combo"~ - ~"combo"~
- ~"dnd"~ - ~"dnd"~
Following per window-type options are available: Following per window-type options are available:
- fade, shadow :: Controls window-type-specific shadow and fade settings. - fade, shadow :: Controls window-type-specific shadow and fade
settings.
- opacity :: Controls default opacity of the window type. - opacity :: Controls default opacity of the window type.
- focus :: Controls whether the window of this type is to be always considered - focus :: Controls whether the window of this type is to be always
focused. (By default, all window types except "normal" and "dialog" has this considered focused. (By default, all window types except =normal= and
on.) =dialog= has this on.)
- full-shadow :: Controls whether shadow is drawn under the parts of the window - full-shadow :: Controls whether shadow is drawn under the parts of
that you normally won't be able to see. Useful when the window has parts of it the window that you normally won't be able to see. Useful when the
transparent, and you want shadows in those areas. window has parts of it transparent, and you want shadows in those
areas.
- redir-ignore :: Controls whether this type of windows should cause - redir-ignore :: Controls whether this type of windows should cause
screen to become redirected again after being unredirected. If you screen to become redirected again after being not redirected. If you
have =unredir-if-possible= set, and doesn't want certain window to have =unredir-if-possible= set, and doesn't want certain window to
cause unnecessary screen redirection, you can set this to =true=. cause unnecessary screen redirection, you can set this to =true=.
#+BEGIN_SRC conf #+BEGIN_SRC conf
@ -566,18 +570,19 @@ wintypes:
#+END_SRC #+END_SRC
*** GLX backend-specific options *** GLX backend-specific options
Avoid using stencil buffer, useful if you don't have a stencil buffer. Might Avoid using stencil buffer, useful if you don't have a stencil buffer.
cause incorrect opacity when rendering transparent content (but never Might cause incorrect opacity when rendering transparent content (but
practically happened) and may not work with blur-background. Tests show a 15% never practically happened) and may not work with blur-background.
performance boost. Recommended. Tests show a 15% performance boost. Recommended.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
glx-no-stencil = true; glx-no-stencil = true;
#+END_SRC #+END_SRC
Avoid rebinding pixmap on window damage. Probably could improve performance on Avoid rebinding pixmap on window damage. Probably could improve
rapid window content changes, but is known to break things on some drivers performance on rapid window content changes, but is known to break
(LLVMpipe, xf86-video-intel, etc.). Recommended if it works. things on some drivers (LLVMpipe, xf86-video-intel, etc.). Recommended
if it works.
| Default value | ~false~ | | Default value | ~false~ |
#+BEGIN_SRC conf #+BEGIN_SRC conf
glx-no-rebind-pixmap = false; glx-no-rebind-pixmap = false;
@ -585,7 +590,8 @@ glx-no-rebind-pixmap = false;
Use specified GLSL fragment shader for rendering window contents. See Use specified GLSL fragment shader for rendering window contents. See
~compton-default-fshader-win.glsl~ and ~compton-default-fshader-win.glsl~ and
~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples. ~compton-fake-transparency-fshader-win.glsl~ in the source tree for
examples.
| Default value | ~''~ | | Default value | ~''~ |
#+BEGIN_SRC conf :tangle no #+BEGIN_SRC conf :tangle no
glx-fshader-win = ''; glx-fshader-win = '';

View File

@ -12,38 +12,46 @@ First, we are using the 2018 edition of Rust.
#+BEGIN_SRC toml #+BEGIN_SRC toml
edition = "2018" edition = "2018"
#+END_SRC #+END_SRC
Put single-expression functions on a single line. Put single-expression functions on a single line.
#+BEGIN_SRC toml #+BEGIN_SRC toml
fn_single_line = true fn_single_line = true
#+END_SRC #+END_SRC
Format string literals where necessary. Format string literals where necessary.
#+BEGIN_SRC toml #+BEGIN_SRC toml
format_strings = true format_strings = true
#+END_SRC #+END_SRC
Maximum width of each line Maximum width of each line
#+BEGIN_SRC toml #+BEGIN_SRC toml
max_width = 80 max_width = 80
#+END_SRC #+END_SRC
Merge multiple imports into a single nested import. Merge multiple imports into a single nested import.
#+BEGIN_SRC toml #+BEGIN_SRC toml
merge_imports = true merge_imports = true
#+END_SRC #+END_SRC
** Structs and Enums ** Structs and Enums
The maximum length of enum variant having discriminant, that gets vertically The maximum length of enum variant having discriminant, that gets
aligned with others. Variants without discriminants would be ignored for the vertically aligned with others. Variants without discriminants would
purpose of alignment. be ignored for the purpose of alignment.
Note that this is not how much whitespace is inserted, but instead the longest Note that this is not how much whitespace is inserted, but instead the
variant name that doesn't get ignored when aligning. longest variant name that doesn't get ignored when aligning.
#+BEGIN_SRC toml #+BEGIN_SRC toml
enum_discrim_align_threshold = 20 enum_discrim_align_threshold = 20
#+END_SRC #+END_SRC
The maximum diff of width between struct fields to be aligned with each other.
The maximum diff of width between struct fields to be aligned with
each other.
#+BEGIN_SRC toml #+BEGIN_SRC toml
struct_field_align_threshold = 20 struct_field_align_threshold = 20
#+END_SRC #+END_SRC
Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
Reorder =impl= items. =type= and =const= are put first, then macros and
methods.
#+BEGIN_SRC toml #+BEGIN_SRC toml
reorder_impl_items = true reorder_impl_items = true
#+END_SRC #+END_SRC
@ -53,14 +61,17 @@ Convert ~/* */~ comments to ~//~ comments where possible.
#+BEGIN_SRC toml #+BEGIN_SRC toml
normalize_comments = true normalize_comments = true
#+END_SRC #+END_SRC
Break comments to fit on the line. Break comments to fit on the line.
#+BEGIN_SRC toml #+BEGIN_SRC toml
wrap_comments = true wrap_comments = true
#+END_SRC #+END_SRC
Report ~FIXME~ items in comments. Report ~FIXME~ items in comments.
#+BEGIN_SRC toml #+BEGIN_SRC toml
report_fixme = "Always" report_fixme = "Always"
#+END_SRC #+END_SRC
Report ~TODO~ items in comments. Report ~TODO~ items in comments.
#+BEGIN_SRC toml #+BEGIN_SRC toml
todo = "Always" todo = "Always"
@ -71,6 +82,7 @@ Format code snippet included in doc comments.
#+BEGIN_SRC toml #+BEGIN_SRC toml
format_code_in_doc_comments = true format_code_in_doc_comments = true
#+END_SRC #+END_SRC
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments. Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
#+BEGIN_SRC toml #+BEGIN_SRC toml
normalize_doc_attributes = true normalize_doc_attributes = true
@ -81,10 +93,12 @@ Use tab characters for indentation, spaces for alignment.
#+BEGIN_SRC toml #+BEGIN_SRC toml
hard_tabs = false hard_tabs = false
#+END_SRC #+END_SRC
Number of spaces per tab. Number of spaces per tab.
#+BEGIN_SRC toml #+BEGIN_SRC toml
tab_spaces = 4 tab_spaces = 4
#+END_SRC #+END_SRC
I want newlines to always be Unix style. I want newlines to always be Unix style.
#+BEGIN_SRC toml #+BEGIN_SRC toml
newline_style = "Unix" newline_style = "Unix"

View File

@ -128,9 +128,9 @@ fi
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/backup :HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/backup
:END: :END:
~backup~ is a very simple, oneliner script that will create a local copy of a ~backup~ is a very simple, one-liner script that will create a local
file and add the date at which it was copied in the filename. You can see its copy of a file and add the date at which it was copied in the
source code here: filename. You can see its source code here:
#+BEGIN_SRC fish #+BEGIN_SRC fish
cp -r $argv[1] $argv[1].bak.(date +"%Y%m%d%H%M%S") cp -r $argv[1] $argv[1].bak.(date +"%Y%m%d%H%M%S")
#+END_SRC #+END_SRC
@ -143,7 +143,7 @@ As I am using a laptop, maximum performance isnt always what I want.
Sometimes, its just better to have not so great but less Sometimes, its just better to have not so great but less
battery-demanding performance. It is possible to achieve this by battery-demanding performance. It is possible to achieve this by
modifying the CPU governor with ~cpupower~. The [[https://wiki.archlinux.org/title/CPU_frequency_scaling#Scaling_governors][Arch Wiki]] has, as usual, modifying the CPU governor with ~cpupower~. The [[https://wiki.archlinux.org/title/CPU_frequency_scaling#Scaling_governors][Arch Wiki]] has, as usual,
some really good documentation on this. some superb documentation on this.
The following script asks the user through ~rofi~ which governor to The following script asks the user through ~rofi~ which governor to
apply, and it relies on [[file:./scripts.md#askpass][askpass]] to retrieve the users password. apply, and it relies on [[file:./scripts.md#askpass][askpass]] to retrieve the users password.
@ -172,13 +172,13 @@ printf "^f3^f0 %d" $NB_CONTAINERS
:END: :END:
This script comes straight from [[https://charm.sh/blog/kamoji-generator/][this blog post]] and generates kamoji. I This script comes straight from [[https://charm.sh/blog/kamoji-generator/][this blog post]] and generates kamoji. I
modified it a bit in order to work with either =xclipboard= or =wl-copy= modified it a bit in order to work with either =xclipboard= or =wl-copy=
depending on whether I am in a X.org session or a Wayland session. depending on whether I am in an X.org session or a Wayland session.
Note that it requires the =OPENAI_API_KEY= environment variable to be Note that it requires the =OPENAI_API_KEY= environment variable to be
set with a valid OpenAI key. set with a valid OpenAI key.
#+begin_src bash #+begin_src bash
# If the user passes '-h', '--help', or 'help' print out a little bit of help. # If the user passes '-h', '--help', or 'help' print out a little bit
# text. # of help. text.
case "$1" in case "$1" in
"-h" | "--help" | "help") "-h" | "--help" | "help")
printf 'Generate kaomojis on request.\n\n' printf 'Generate kaomojis on request.\n\n'
@ -187,28 +187,29 @@ case "$1" in
;; ;;
esac esac
# The user can pass an argument like "bear" or "angry" to specify the general # The user can pass an argument like "bear" or "angry" to specify the
# kind of Kaomoji produced. # general kind of Kaomoji produced.
sentiment="" sentiment=""
if [[ $1 != "" ]]; then if [[ $1 != "" ]]; then
sentiment=" $1" sentiment=" $1"
fi fi
# Ask mods to generate Kaomojis. Save the output in a variable. # Ask mods to generate Kaomojis. Save the output in a variable.
kaomoji="$(mods "generate 10${sentiment} kaomojis. number them and put each one on its own line.")" kaomoji="$(mods "generate 10${sentiment} kaomojis. Number them and put each one on its own line.")"
if [[ $kaomoji == "" ]]; then if [[ $kaomoji == "" ]]; then
exit 1 exit 1
fi fi
# Pipe mods output to gum so the user can choose the perfect kaomoji. Save that # Pipe mods output to gum, so the user can choose the perfect kaomoji.
# choice in a variable. Also note that we're using cut to drop the item number # Save that choice in a variable. Also note that we're using cut to
# in front of the Kaomoji. # drop the item number in front of the Kaomoji.
choice="$(echo "$kaomoji" | gum choose | cut -d ' ' -f 2)" choice="$(echo "$kaomoji" | gum choose | cut -d ' ' -f 2)"
if [[ $choice == "" ]]; then if [[ $choice == "" ]]; then
exit 1 exit 1
fi fi
# If the current session is Wayland, copy with wl-copy, otherwise copy with xclipboard # If the current session is Wayland, copy with wl-copy, otherwise copy
# with xclipboard
if [ "$XDG_SESSION_TYPE" = "wayland" ] if [ "$XDG_SESSION_TYPE" = "wayland" ]
then printf '%s' "$choice" | wl-copy # Wayland then printf '%s' "$choice" | wl-copy # Wayland
else printf '%s' "$choice" | xclip -sel clip # X11 else printf '%s' "$choice" | xclip -sel clip # X11
@ -226,7 +227,7 @@ printf 'Copied %s to the clipboard\n' "$choice"
unread emails I have through the use of ~mu~. unread emails I have through the use of ~mu~.
As you can see, the output string contains two font switchers for As you can see, the output string contains two font switchers for
StumpWM so I can switch from the main font to Siji for the caracter StumpWM so I can switch from the main font to Siji for the character
contained between them: U+E072 (an email icon). contained between them: U+E072 (an email icon).
#+begin_src sh #+begin_src sh
UNREAD=$(mu find "flag:unread AND (maildir:/Inbox OR maildir:/Junk)" | wc -l) UNREAD=$(mu find "flag:unread AND (maildir:/Inbox OR maildir:/Junk)" | wc -l)
@ -254,7 +255,7 @@ nsxiv -abfs f "$HOME/Pictures/Screenshots/$*"
This is a utility only useful with Wayland for now, using =grim=, =slurp= This is a utility only useful with Wayland for now, using =grim=, =slurp=
(in order to select which area of the screen I wish to capture) and (in order to select which area of the screen I wish to capture) and
=wl-copy= (from =wl-clipboard=). It saves the screenshot in my =wl-copy= (from =wl-clipboard=). It saves the screenshot in my
=$HOME/Pictures/Screenshots= directory with a name formated as =$HOME/Pictures/Screenshots= directory with a name formatted as
=Screenshot_20230425_134550.png= if the screenshot was taken on the 25th =Screenshot_20230425_134550.png= if the screenshot was taken on the 25th
of April 2023 at 1:45:50PM. If the file already exists, the script of April 2023 at 1:45:50PM. If the file already exists, the script
will suffix the name with an underscore followed by an incremental will suffix the name with an underscore followed by an incremental
@ -326,15 +327,15 @@ ssh -L $argv[1]:$argv[3]:$argv[1] $argv[2] -N
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle no :noweb yes :HEADER-ARGS: :mkdirp yes :tangle no :noweb yes
:END: :END:
One thing I like with ~nsxiv~ is you can trigger different behaviors One thing I like with ~nsxiv~ is you can trigger different behaviours
based on keypresses. For instance, with my current nsxiv configuration, based on keypresses. For instance, with my current nsxiv
if I press the space key followed by a character, it can delete to the configuration, if I press the space key followed by a character, it
trashcan, delete definitively, or open the current image in GIMP. All can delete to the trashcan, delete definitively, or open the current
of that is done through one script file stored in image in GIMP. All of that is done through one script file stored in
~$HOME/.config/nsxiv/exec/key-handler~. The fact it reacts to first the ~$HOME/.config/nsxiv/exec/key-handler~. The fact it reacts to first
spacebar instead of /Ctrl-x/ is because I use a custom version of nsxiv I thespace bar instead of /Ctrl-x/ is because I use a custom version of
first modified to fit the bépo layout, and then I decided to change nsxiv I first modified to fit the bépo layout, and then I decided to
the prefix to fit how I use Emacs and StumpWM. You can read the change the prefix to fit how I use Emacs and StumpWM. You can read the
PKGBUILD and my nsxiv patch [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/Documents/code/PKGBUILDs/sxiv][in my dotfiles repo]]. PKGBUILD and my nsxiv patch [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/Documents/code/PKGBUILDs/sxiv][in my dotfiles repo]].
#+header: :shebang "#!/usr/bin/env fish" :tangle ~/.config/nsxiv/exec/key-handler #+header: :shebang "#!/usr/bin/env fish" :tangle ~/.config/nsxiv/exec/key-handler
@ -466,12 +467,13 @@ telnet towel.blinkenlights.nl
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/tttapping :HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/tttapping
:END: :END:
For some reasons, my firmware does not recognize the function key for toggling For some reason, my firmware does not recognize the function key for
the touchpad. Im not going to really complain about it since it lets me program toggling the touchpad. Im not going to really complain about it since
it like I want. Since I often dont need to completely deactivate the touchpad, it lets me program it like I want. Since I often dont need to
Ill instead toggle whether tapping is enabled or not when pressing completely deactivate the touchpad, Ill instead toggle whether
~XF86TouchpadToggle~. And for that, I need this small script that will actually tapping is enabled or not when pressing ~XF86TouchpadToggle~. And for
toggle it, and it will be used in my window manager configuration. that, I need this small script that will actually toggle it, and it
will be used in my window manager configuration.
First lets declare some variables to make this script more personal. With my First lets declare some variables to make this script more personal. With my
current computer (a Gazelle by System76), the name of my touchpad is the current computer (a Gazelle by System76), the name of my touchpad is the
@ -533,7 +535,7 @@ emacsclient -c -a emacs -e "(dired \"$*\")"
:HEADER-ARGS: :shebang "#!/bin/bash" :mkdirp yes :tangle ~/.local/bin/ediff :HEADER-ARGS: :shebang "#!/bin/bash" :mkdirp yes :tangle ~/.local/bin/ediff
:END: :END:
I want Ediff as my merge tool, not just with Git but with other I want Ediff as my merge tool, not just with Git but with other
programs too such as =pacdiff=. programs tooa, such as =pacdiff=.
#+begin_src bash #+begin_src bash
emacsclient -c -a emacs -e "(ediff-files \"$1\" \"$2\")" emacsclient -c -a emacs -e "(ediff-files \"$1\" \"$2\")"
#+end_src #+end_src
@ -564,9 +566,9 @@ ffmpeg -i $argv[1] -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis $argv[1].webm
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/ytplay :HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/ytplay
:END: :END:
~ytplay~ is a simple script Ive written that allows me to play in mpv any ~ytplay~ is a simple script Ive written that allows me to play in MPV
YouTube video at the desired resolution. The script relies on ~dmenu~ (or ~rofi~ any YouTube video at the desired resolution. The script relies on
in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself. ~dmenu~ (or ~rofi~ in dmenu-mode), ~youtube-dl~ and of course ~mpv~ itself.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set URL (rofi -dmenu -i -p "Video URL") set URL (rofi -dmenu -i -p "Video URL")
if test -n "$URL" if test -n "$URL"
@ -899,14 +901,15 @@ end
#+END_SRC #+END_SRC
***** Download a Single Video ***** Download a Single Video
In order to download a single video, a simple function has been written for this In order to download a single video, a simple function has been
that will display when downloaded how far it is down the list of videos to be written for this that will display when downloaded how far it is down
downloaded and it will add its ID to the file listing all videos downloaded. The the list of videos to be downloaded, and it will add its ID to the
script will also try to download the video according to the ~PREFFERED_FORMAT~ file listing all videos downloaded. The script will also try to
variable, but if the download fails it will download the default format selected download the video according to the ~PREFFERED_FORMAT~ variable, but if
by ~youtube-dl~. If both downloads fail, the ID of the video will be added to the download fails it will download the default format selected by
the list of failed videos. If one of the downloads succeeds, it will remove the ~youtube-dl~. If both downloads fail, the ID of the video will be added
ID from the list of failed downloads. to the list of failed videos. If one of the downloads succeeds, it
will remove the ID from the list of failed downloads.
The first argument of the function is the video ID from YouTube, the second The first argument of the function is the video ID from YouTube, the second
argument is the position of the video in the queue, and the third argument is argument is the position of the video in the queue, and the third argument is
@ -969,16 +972,17 @@ by ~#~, ~;~ and ~]~ (just like ~youtube-dl~) and will download them, assuming
these are channel URLs or playlist URLs, however it should also work with direct these are channel URLs or playlist URLs, however it should also work with direct
video URLs. video URLs.
What this function does is for each line, it will fetch the entierty of the What this function does is for each line, it will fetch the entirety
video IDs found in a playlist or channel. Then, it will look each ID up the list of the video IDs found in a playlist or channel. Then, it will look
of already downloaded videos and will add all new IDs to a queue of videos to be each ID up the list of already downloaded videos and will add all new
downloaded. It will then pass each new video ID to ~_ytdl_download_video~ IDs to a queue of videos to be downloaded. It will then pass each new
directly. Beware that if you pass directly the URL of the channel, such as video ID to ~_ytdl_download_video~ directly. Beware that if you pass
~https://www.youtube.com/user/enyay~ if you want to download Tom Scotts videos, directly the URL of the channel, such as
it will download everything on the main page of their channel, which means it ~https://www.youtube.com/user/enyay~ if you want to download Tom Scotts
will even download videos from playlists they decided to put on their channels videos, it will download everything on the main page of their channel,
front page, even if it is not theirs. So in that case, we need to append which means it will even download videos from playlists they decided
~/videos~ to any channel URL. to put on their channels front page, even if it is not theirs. So in
that case, we need to append ~/videos~ to any channel URL.
#+BEGIN_SRC fish #+BEGIN_SRC fish
function _ytdl_download_batch function _ytdl_download_batch
set -q $FILE set -q $FILE
@ -1212,7 +1216,7 @@ begin
#+END_SRC #+END_SRC
What the script does first is detect everything that can be mounted. Between a What the script does first is detect everything that can be mounted. Between a
=begin= and =end=, lets set =LFS= as a local variable. This si in order to get =begin= and =end=, lets set =LFS= as a local variable. This is in order to get
sane variables in the current block. sane variables in the current block.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set -l LFS set -l LFS
@ -1243,10 +1247,10 @@ And thats the end of our first block!
end end
#+END_SRC #+END_SRC
Alright, well save what kind on drives we can mount in a temporary file called Alright, well save what kind on drives we can mount in a temporary
=/tmp/drives=. Well make sure its blank by erasing it then creating it again file called =/tmp/drives=. Well make sure its blank by erasing it then
with =touch=, like so. The =-f= flag on =rm= is here so we get no error if we creating it again with =touch=, like so. The =-f= flag on =rm= is here, so
try to delete a file that doesnt exist (yet). we get no error if we try to delete a file that doesnt exist (yet).
#+BEGIN_SRC fish #+BEGIN_SRC fish
set -g TMPDRIVES /tmp/drives set -g TMPDRIVES /tmp/drives
rm -f $TMPDRIVES rm -f $TMPDRIVES
@ -1267,16 +1271,16 @@ set -g basemount /media
#+END_SRC #+END_SRC
***** Get the mount point ***** Get the mount point
Now, lets declare a function that will allow us to chose the drive we want to Now, lets declare a function that will allow us to choose the drive
mount. we want to mount.
#+BEGIN_SRC fish #+BEGIN_SRC fish
function getmount function getmount
#+END_SRC #+END_SRC
First, we want to get our mount point. Well run a =find= command on each of the First, we want to get our mount point. Well run a =find= command on
directories listed in =$basemount= to look for folders on which our drive could each of the directories listed in =$basemount= to look for folders on
be mounted. This list will be passed to rofi from which we will chose our mount which our drive could be mounted. This list will be passed to rofi
point. from which we will choose our mount point.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set -g mp (for d in $basemount set -g mp (for d in $basemount
find $d -maxdepth 5 -type d find $d -maxdepth 5 -type d
@ -1319,9 +1323,10 @@ care of it for us.
function mountusb function mountusb
#+END_SRC #+END_SRC
Now, the first thing we want to do is select the partition we want to mount. Now, the first thing we want to do is select the partition we want to
Remember, we stored those in =$usbdrives= earlier, so lets pipe them into rofi mount. Remember, we stored those in =$usbdrives= earlier, so lets pipe
so we can chose from it. Also, =awk= will get their path in =/dev=. them into rofi, so we can choose from it. Also, =awk= will get their
path in =/dev=.
#+BEGIN_SRC fish #+BEGIN_SRC fish
set -g chosen (echo $usbdrives | \ set -g chosen (echo $usbdrives | \
rofi -dmenu -i -p "Mount which drive?" | \ rofi -dmenu -i -p "Mount which drive?" | \
@ -1346,8 +1351,8 @@ the script.
test -z $mp && return 1 test -z $mp && return 1
#+END_SRC #+END_SRC
Now, lets mount it! Well use a switch which will detect the filesystem used so Now, lets mount it! Well use a switch which will detect the
we know how to mount the partition. filesystem used, so we know how to mount the partition.
#+BEGIN_SRC fish #+BEGIN_SRC fish
switch (lsblk -no "fstype" $chosen) switch (lsblk -no "fstype" $chosen)
#+END_SRC #+END_SRC
@ -1371,8 +1376,8 @@ case '*'
sudo -A mount $chosen $mp sudo -A mount $chosen $mp
#+END_SRC #+END_SRC
Well also run a =chown= on this newly mounted filesystem so the user can access Well also run a =chown= on this newly mounted filesystem, so the user
it without any issues. can access it without any issues.
#+BEGIN_SRC fish #+BEGIN_SRC fish
sudo -A chown -R $USER:(id -g $USER) $mp sudo -A chown -R $USER:(id -g $USER) $mp
#+END_SRC #+END_SRC
@ -1412,13 +1417,14 @@ Lets temporarily mount our device.
jmtpfs -device=$chosen $mp jmtpfs -device=$chosen $mp
#+END_SRC #+END_SRC
Now, we need to allow our computer to mount our Android device. Depending on the Now, we need to allow our computer to mount our Android device.
Android version it is running on, we either need to specify our device is USB Depending on the Android version it is running on, we either need to
connected in order to exchange files, or Android will explicitely ask us if it specify our device is USB connected in order to exchange files, or
is OK for our computer to access it. Lets inform the user of that. Android will explicitly ask us if it is OK for our computer to access
it. Lets inform the user of that.
#+BEGIN_SRC fish #+BEGIN_SRC fish
echo "OK" | \ echo "OK" | \
rofi -dmenu -i -p "Press (Allow) on your phone screen, or set your USB settings to allow file transfert" rofi -dmenu -i -p "Press (Allow) on your phone screen, or set your USB settings to allow file transfer"
#+END_SRC #+END_SRC
Now, lets get the actual path of our Android filesystem we wish to mount, and Now, lets get the actual path of our Android filesystem we wish to mount, and
@ -1428,7 +1434,7 @@ set newchosen (jmtpfs -l | grep $bus | awk '{print $1 $2}' | sed 's/,$//')
sudo -A umount $mp sudo -A umount $mp
#+END_SRC #+END_SRC
Now we cam mount the new filesystem and send a notification if everything went Now we can mount the new filesystem and send a notification if everything went
well. well.
#+BEGIN_SRC fish #+BEGIN_SRC fish
jmtpfs -device=$newchosen $mp && \ jmtpfs -device=$newchosen $mp && \
@ -1471,15 +1477,15 @@ end
#+END_SRC #+END_SRC
***** Ask what type of drive we want to mount ***** Ask what type of drive we want to mount
The first thing we will be asked if different types of drives are detected is The first thing we will be asked if different types of drives are
which of these types the user wishes to mount. This is done with the function detected is which of these types the user wishes to mount. This is
=asktype= which is declared below. done with the function =asktype= which is declared below.
#+BEGIN_SRC fish #+BEGIN_SRC fish
function asktype function asktype
#+END_SRC #+END_SRC
We will use a switch statement which will use our anwser to rofi about what we We will use a switch statement which will use our answer to rofi about
wish to mount. what we wish to mount.
#+BEGIN_SRC fish #+BEGIN_SRC fish
switch (cat $TMPDRIVES | rofi -dmenu -i -p "Mount which drive?") switch (cat $TMPDRIVES | rofi -dmenu -i -p "Mount which drive?")
#+END_SRC #+END_SRC
@ -1823,8 +1829,8 @@ if test -z $password
end end
#+END_SRC #+END_SRC
Depending on the arguments passed earlier, we might want some different Depending on the arguments passed earlier, we might want some
behavior. different behaviour.
#+BEGIN_SRC fish :noweb yes #+BEGIN_SRC fish :noweb yes
if test $TYPE = "yes" if test $TYPE = "yes"
<<rofi-pass-type>> <<rofi-pass-type>>
@ -1833,8 +1839,8 @@ else
end end
#+END_SRC #+END_SRC
The default behavior is to copy the password to the clipboard for 45 seconds, so The default behaviour is to copy the password to the clipboard for 45
lets do that. seconds, so lets do that.
#+NAME: rofi-pass-copy #+NAME: rofi-pass-copy
#+BEGIN_SRC fish :noweb yes :tangle no #+BEGIN_SRC fish :noweb yes :tangle no
pass show -c $password 2> /dev/null pass show -c $password 2> /dev/null

View File

@ -8,7 +8,7 @@
** Introduction ** Introduction
*** What is StumpWM? *** What is StumpWM?
[[https://stumpwm.github.io/][StumpWM]] is a tiling window manager inheriting from [[http://www.nongnu.org/ratpoison/][RatPoison]], written [[https://stumpwm.github.io/][StumpWM]] is a tiling window manager inheriting from [[http://www.nongnu.org/ratpoison/][RatPoison]], written
entirely in [[https://common-lisp.net/][Common Lisp]] and compiled with [[http://www.sbcl.org/][SBCL]]. While it is not an entirely in [[https://common-lisp.net/][Common Lisp]] and compiled with [[http://www.sbcl.org/][SBCL]]. While it is not a
dynamic tiling window manager like [[file:Deprecated/awesome.org][Awesome]] is, its ability of managing dynamic tiling window manager like [[file:Deprecated/awesome.org][Awesome]] is, its ability of managing
windows in frames and using keychords with keymaps like Emacs does is windows in frames and using keychords with keymaps like Emacs does is
a huge plus for me, not to mention the fact its configuration file is a huge plus for me, not to mention the fact its configuration file is
@ -28,12 +28,12 @@ This file has two main goals:
configuration, thanks to Emacs org-mode, and thanks to org-modes configuration, thanks to Emacs org-mode, and thanks to org-modes
literate config capabilities. literate config capabilities.
Almost all of the visible source blocks if not all will be included Almost all the visible source blocks if not all will be included in
in my configuration files through tangling, which can be done in my configuration files through tangling, which can be done in Emacs
Emacs when this file is opened through ~M-x org-babel-tangle~, which when this file is opened through ~M-x org-babel-tangle~, which will
will write my configuration files based on the source blocks present write my configuration files based on the source blocks present in
in this document. This file is not only my configs documentation, this document. This file is not only my configs documentation, it
it /*is*/ my configuration. /*is*/ my configuration.
- Be my documentation on my StumpWM configuration. That way, Ill - Be my documentation on my StumpWM configuration. That way, Ill
never forget which block of code does what. never forget which block of code does what.
@ -50,7 +50,7 @@ follows this architecture:
- ~init.el~ :: My main configuration file, glues everything together. It - ~init.el~ :: My main configuration file, glues everything together. It
loads all of my configuration files as well as some modules I find loads all of my configuration files as well as some modules I find
useful; useful;
- ~colors.lisp~ :: This file defines colors that will be used in my - ~colors.lisp~ :: This file defines colours that will be used in my
~theme.lisp~ and ~modeline.lisp~ files. Lets make my code DRY, or as I ~theme.lisp~ and ~modeline.lisp~ files. Lets make my code DRY, or as I
prefer to say, DRYD (/Dont Repeat Yourself Dummy/). prefer to say, DRYD (/Dont Repeat Yourself Dummy/).
- ~commands.lisp~ :: Lisp commands, in case I want to bind some - ~commands.lisp~ :: Lisp commands, in case I want to bind some
@ -66,7 +66,7 @@ follows this architecture:
- ~utilities.lisp~ :: Here you can find my StumpWM configuration that - ~utilities.lisp~ :: Here you can find my StumpWM configuration that
isnt really related to the rest of the config, for instance utility isnt really related to the rest of the config, for instance utility
code for connecting by SSH to some host. code for connecting by SSH to some host.
- ~theme.lisp~ :: manages the color theme of StumpWM, the default - ~theme.lisp~ :: manages the colour theme of StumpWM, the default
placement of some windows and StumpWMs gaps. placement of some windows and StumpWMs gaps.
You will also find below my ~xinit~ file for StumpWM, exported to You will also find below my ~xinit~ file for StumpWM, exported to
@ -239,13 +239,13 @@ Finally, we can notify the user everything is ready.
And its done! We can now move on to the creation of the other CLisp files. And its done! We can now move on to the creation of the other CLisp files.
** Colors ** Colours
:PROPERTIES: :PROPERTIES:
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/colors.lisp :header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/colors.lisp
:END: :END:
If youve taken a look at the rest of my dotfiles, you may have If youve had a look at the rest of my dotfiles, you may have noticed
noticed I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here I really like the [[https://www.nordtheme.com/][Nord theme]]. No wonder we can find it here again!
again! Here is a small table listing the Nord colors: Here is a small table listing the Nord colours:
#+name: nord-colors #+name: nord-colors
| Name | Value | | Name | Value |
|--------+---------| |--------+---------|
@ -299,7 +299,7 @@ code looks like so:
#+end_src #+end_src
Finally, lets also modify the default colors StumpWM has. Ill try to Finally, lets also modify the default colors StumpWM has. Ill try to
respect the original colors while converting them to Nord. We also respect the original colours while converting them to Nord. We also
need to reload them now that we modified them. need to reload them now that we modified them.
#+begin_src lisp #+begin_src lisp
(setq *colors* (setq *colors*
@ -352,7 +352,7 @@ The modeline is pretty easy. First, lets load the ~colors.lisp~ file we just
(load "~/.stumpwm.d/colors.lisp") (load "~/.stumpwm.d/colors.lisp")
#+end_src #+end_src
Next, we can set some colors for the modeline. Lets set the Next, we can set some colours for the modeline. Lets set the
background of the modeline to Nord1 and the foreground to Nord5, I background of the modeline to Nord1 and the foreground to Nord5, I
think this is a pretty good combination. think this is a pretty good combination.
#+begin_src lisp #+begin_src lisp
@ -361,7 +361,7 @@ think this is a pretty good combination.
#+end_src #+end_src
We /could/ also use some borders in the modeline. But we wont. Lets We /could/ also use some borders in the modeline. But we wont. Lets
still set its color to Nord1, just in case. still set its colour to Nord1, just in case.
#+begin_src lisp #+begin_src lisp
(setf *mode-line-border-color* phundrak-nord1 (setf *mode-line-border-color* phundrak-nord1
,*mode-line-border-width* 0) ,*mode-line-border-width* 0)
@ -394,7 +394,7 @@ Here are some modules that we will load for the modeline:
(load-module "mem") (load-module "mem")
#+end_src #+end_src
We need to set some variables so modules can be displayed correctly. We need to set some variables, so modules can be displayed correctly.
Note that the character between the font switchers in the second CPU Note that the character between the font switchers in the second CPU
formatter is U+E082, which symbolizes the CPU. formatter is U+E082, which symbolizes the CPU.
#+begin_src lisp #+begin_src lisp
@ -474,7 +474,7 @@ when the `car' is a formatter and t when it is a shell command."
#+end_src #+end_src
It is then easy to define a command that can call this function and It is then easy to define a command that can call this function and
set this variable so we can sort of reload the mode-line. set this variable, so we can sort of reload the mode-line.
#+begin_src lisp #+begin_src lisp
(defcommand reload-modeline () () (defcommand reload-modeline () ()
"Reload modeline." "Reload modeline."
@ -554,7 +554,7 @@ are manual tiling groups. Otherwise, as you can see above, they can
also be dynamic tiling groups or floating groups. also be dynamic tiling groups or floating groups.
Next, lets make sure no previous window placement rule is in place, Next, lets make sure no previous window placement rule is in place,
this will avoid unexpected and hard-to-debug behavior. this will avoid unexpected and hard-to-debug behaviour.
#+begin_src lisp #+begin_src lisp
(clear-window-placement-rules) (clear-window-placement-rules)
#+end_src #+end_src
@ -595,7 +595,8 @@ of the available space.
:PROPERTIES: :PROPERTIES:
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/theme.lisp :noweb yes :header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/theme.lisp :noweb yes
:END: :END:
As in the modeline file, the first thing well do is to load our colors. As in the modeline file, the first thing well do is to load our
colours.
#+begin_src lisp #+begin_src lisp
(load "~/.stumpwm.d/colors.lisp") (load "~/.stumpwm.d/colors.lisp")
#+end_src #+end_src
@ -627,7 +628,7 @@ src_lisp[:exports code]{(ql:add-to-init-file)} so it is loaded each
time you start your Lisp interpreter. ~SBCL~ should be your CommonLisp time you start your Lisp interpreter. ~SBCL~ should be your CommonLisp
interpreter of choice since StumpWM is generally compiled with it. The interpreter of choice since StumpWM is generally compiled with it. The
main advantage is also that SBCL supports multithreading, unlike main advantage is also that SBCL supports multithreading, unlike
clisp. In case StumpWM doesnt find your font, spin up SBCL and CLisp. In case StumpWM doesnt find your font, spin up SBCL and
execute the following lines: execute the following lines:
#+begin_src lisp :tangle no #+begin_src lisp :tangle no
(ql:quickload :clx-truetype) (ql:quickload :clx-truetype)
@ -728,7 +729,7 @@ want to get them back, theyll be nice to have.
(set-float-unfocus-color phundrak-nord3) (set-float-unfocus-color phundrak-nord3)
#+end_src #+end_src
Lets also set the colors of the message and input windows: Lets also set the colours of the message and input windows:
#+begin_src lisp #+begin_src lisp
(set-fg-color phundrak-nord4) (set-fg-color phundrak-nord4)
(set-bg-color phundrak-nord1) (set-bg-color phundrak-nord1)
@ -794,7 +795,7 @@ Finally, lets enable our gaps:
:END: :END:
The first command I declare in this file is a command that will avoid The first command I declare in this file is a command that will avoid
me invoking too many Firefox instances. Either Firefox is not already me invoking too many Firefox instances. Either Firefox is not already
running and an instance is launched, or one already is and we are running and an instance is launched, or one already is, and we are
brought to it. This is done like so: brought to it. This is done like so:
#+begin_src lisp #+begin_src lisp
(defcommand firefox () () (defcommand firefox () ()
@ -837,56 +838,6 @@ a program.
"kitty"))))) "kitty")))))
#+end_src #+end_src
*** At work
When Im 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
its ~restore-from-file~ thats wrapped. I also want to launch Global
Protect at the same time, because I always forget to before launching
~launch-work~ described below, and automatically connect my bluetooth
headset.
#+begin_src lisp
(load-module "swm-gaps")
(defcommand at-work () ()
"Restore desktop layout when at work."
(swm-gaps:toggle-gaps-off)
(run-shell-command "pkill picom" t)
(run-shell-command "autorandr -l work" t)
(run-shell-command "xwallpaper --zoom $(cat $HOME/.cache/wallpaper)" t)
(run-shell-command "gpclient")
(run-shell-command "bluetoothctl power on && bluetoothctl connect 14:3F:A6:6D:E3:D9"))
#+end_src
If I want to quickly launch all programs I will need, I can also
invoke the command ~launch-work~.
#+begin_src lisp
(defcommand launch-work () ()
"Launch programs I need at work."
(run-shell-command "firefox")
(run-shell-command "remmina")
(run-shell-command "kitty tmux")
(run-shell-command "teams")
(run-shell-command "discord")
(restore-from-file *my/desktop-dump-file*)
(restore-window-placement-rules "~/.cache/placement-rules"))
#+end_src
** Keybinds ** Keybinds
:PROPERTIES: :PROPERTIES:
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/keybindings.lisp :noweb yes :header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/keybindings.lisp :noweb yes
@ -911,7 +862,7 @@ a couple of keybinds to other keymaps. I hope this will get improved
soon. soon.
There are also two keymaps you need to be aware of: There are also two keymaps you need to be aware of:
- ~*top-map*~ :: This is the keymap available litteraly everywhere. With - ~*top-map*~ :: This is the keymap available literally everywhere. With
this keymap, you can emulate most of your keybinds you have in other this keymap, you can emulate most of your keybinds you have in other
window managers. For instance, I cannot live without ~s-RET~ for window managers. For instance, I cannot live without ~s-RET~ for
creating new shells, so Ill bind it to ~*top-map*~. But its good creating new shells, so Ill bind it to ~*top-map*~. But its good
@ -928,7 +879,7 @@ which would be displayed instead of the actual function or keymap
called by keybind. It would be nicer to see ~frames~ rather than called by keybind. It would be nicer to see ~frames~ rather than
~*my-frames-management-keymap*~. ~*my-frames-management-keymap*~.
Anyways, as mentionned above, ~*root-map*~ is already pre-populated with Anyway, as mentioned above, ~*root-map*~ is already pre-populated with
some cool stuff for you, and you can access it with a prefix which is some cool stuff for you, and you can access it with a prefix which is
by default ~C-t~. But if this doesnt suit you, you can always redefine by default ~C-t~. But if this doesnt suit you, you can always redefine
it with ~set-prefix-key~. I personally like to have my space key as a it with ~set-prefix-key~. I personally like to have my space key as a
@ -1020,7 +971,7 @@ such as « or » and have them replaced with their actual name when
*** Applications *** Applications
When I speak about applications, I speak about programs and scripts in When I speak about applications, I speak about programs and scripts in
general. With these keymaps, I can launch programs I often have use general. With these keymaps, I can launch programs I have often use
for, but I can also launch some scripts as well as take screenshots. for, but I can also launch some scripts as well as take screenshots.
First, lets create my ~rofi~ scripts keymap. First, lets create my ~rofi~ scripts keymap.
@ -1107,7 +1058,7 @@ and the ~XF86Mail~ key opens mu4e in Emacs.
The module ~end-session~ provides functions for gracefully ending the The module ~end-session~ provides functions for gracefully ending the
user session, powering off, restarting, and suspending the computer. user session, powering off, restarting, and suspending the computer.
It also provides a function that interactively asks what the user It also provides a function that interactively asks what the user
whishes to do. wishes to do.
#+name: end-session-keymap #+name: end-session-keymap
| Keychord | Function | | Keychord | Function |
|----------+-------------------| |----------+-------------------|
@ -1539,7 +1490,7 @@ anywhere else:
#+end_src #+end_src
From time to time, I need to switch between different keyboard From time to time, I need to switch between different keyboard
layouts, especially to the US Qwerty layout when Im playing some layouts, especially to the US QWERTY layout when Im playing some
games and the bépo layout most of the time. Ill use the command games and the bépo layout most of the time. Ill use the command
~switch-layout~ defined above. ~switch-layout~ defined above.
#+name: keyboard-layout-map #+name: keyboard-layout-map
@ -1562,7 +1513,7 @@ games and the bépo layout most of the time. Ill use the command
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/utilities.lisp :noweb yes :header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/utilities.lisp :noweb yes
:END: :END:
Part of my configuration is not really related to StumpWM itself, or Part of my configuration is not really related to StumpWM itself, or
rather it adds new behavior StumpWM doesnt have. ~utilities.lisp~ rather it adds new behaviour StumpWM doesnt have. ~utilities.lisp~
stores all this code in one place. stores all this code in one place.
*** Binwarp *** Binwarp
@ -1593,12 +1544,12 @@ Binwarp mode is now available from the keybind ~s-m~ at top level.
:PROPERTIES: :PROPERTIES:
:header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/bluetooth.lisp :noweb yes :header-args:lisp: :mkdirp yes :tangle ~/.stumpwm.d/bluetooth.lisp :noweb yes
:END: :END:
Although there is a bluetooth module for the modeline, this is about Although there is a Bluetooth module for the modeline, this is about
the extent to which StumpWM can interact with the systems bluetooth. the extent to which StumpWM can interact with the systems Bluetooth.
However, I wish for some more interecactivity, like powering on and However, I wish for some more interactivity, like powering on and
off bluetooth, connecting to devices and so on. off Bluetooth, connecting to devices and so on.
First, out code relies on ~cl-ppcre~, so lets quickload it. Firstly, our code relies on ~cl-ppcre~, so lets quickload it.
#+begin_src lisp #+begin_src lisp
(ql:quickload :cl-ppcre) (ql:quickload :cl-ppcre)
#+end_src #+end_src
@ -1610,7 +1561,7 @@ Lets indicate which command well be using.
#+end_src #+end_src
**** Utilities **** Utilities
Well need a couple of functions that will take care of stuff for us Well need a couple of functions that will take care of stuff for us,
so we dont have to repeat ourselves. The first one is a way for us to so we dont have to repeat ourselves. The first one is a way for us to
share a message. The function ~bluetooth-message~ will first display share a message. The function ~bluetooth-message~ will first display
~Bluetooth:~ in green, then it will display the message we want it to ~Bluetooth:~ in green, then it will display the message we want it to
@ -1637,7 +1588,7 @@ with a space as their separator.
Now we can put ~bluetooth-make-command~ to use with ~bluetooth-command~ Now we can put ~bluetooth-make-command~ to use with ~bluetooth-command~
which will actually run the result of the former. As you can see, it which will actually run the result of the former. As you can see, it
also collects the output so we can display it later in another also collects the output, so we can display it later in another
function. function.
#+begin_src lisp #+begin_src lisp
(defmacro bluetooth-command (&rest args) (defmacro bluetooth-command (&rest args)
@ -1656,8 +1607,8 @@ call src_lisp[:exports code]{(bluetooth-message-command "power"
#+end_src #+end_src
**** Toggle Bluetooth On and Off **** Toggle Bluetooth On and Off
This part is easy. Now that we can call our bluetooth commands easily, This part is easy. Now that we can call our Bluetooth commands easily,
we can easily define how to turn on bluetooth. we can easily define how to turn on Bluetooth.
#+begin_src lisp #+begin_src lisp
(defcommand bluetooth-turn-on () () (defcommand bluetooth-turn-on () ()
"Turn on bluetooth." "Turn on bluetooth."
@ -1672,7 +1623,7 @@ And how to power it off.
#+end_src #+end_src
**** Bluetooth Devices **** Bluetooth Devices
In order to manipulate bluetooth device, which we can represent as a In order to manipulate Bluetooth device, which we can represent as a
MAC address and a name, we can create a structure that will make use MAC address and a name, we can create a structure that will make use
of a constructor for simpler use. The constructor of a constructor for simpler use. The constructor
~make-bluetooth-device-from-command~ expects an entry such as ~Device ~make-bluetooth-device-from-command~ expects an entry such as ~Device
@ -1704,10 +1655,10 @@ We can now collect our devices easily.
#+end_src #+end_src
**** Connect to a device **** Connect to a device
When we want to connect to a bluetooth device, we always need When we want to connect to a Bluetooth device, we always need
bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then Bluetooth turned on, so ~bluetooth-turn-on~ will always be called. Then
the function will attempt to connect to the device specified by the the function will attempt to connect to the device specified by the
~device~ argument, whether the argument is a bluetooth structure as ~device~ argument, whether the argument is a Bluetooth structure as
defined above or a plain MAC address. defined above or a plain MAC address.
#+begin_src lisp #+begin_src lisp
(defun bluetooth-connect-device (device) (defun bluetooth-connect-device (device)
@ -1722,7 +1673,7 @@ defined above or a plain MAC address.
#+end_src #+end_src
The command to connect to a device displays a choice between the The command to connect to a device displays a choice between the
collected bluetooth device and the user only has to select it. It will collected Bluetooth device and the user only has to select it. It will
then attempt to connect to it. then attempt to connect to it.
#+begin_src lisp #+begin_src lisp
(defcommand bluetooth-connect () () (defcommand bluetooth-connect () ()
@ -1739,7 +1690,7 @@ then attempt to connect to it.
**** Keybinds **** Keybinds
Its all nice and all, but typing manually the commands with ~s-SPC ;~ Its all nice and all, but typing manually the commands with ~s-SPC ;~
is a bit tiring, so lets define our bluetooth keymap which we will is a bit tiring, so lets define our Bluetooth keymap which we will
bind to ~s-SPC B~. bind to ~s-SPC B~.
#+name: bluetooth-keymap #+name: bluetooth-keymap
| Keychord | Command | | Keychord | Command |
@ -1843,8 +1794,8 @@ Im currently in the process of writing functions to interact with
Systemd directly through StumpWM. For now, not much work is done, but Systemd directly through StumpWM. For now, not much work is done, but
its a start. its a start.
First of all, I have the following function that lists all the system Firstly, I have the following function that lists all the system or
or user services. user services.
#+begin_src lisp #+begin_src lisp
(defun systemd-get-services (&key user-p) (defun systemd-get-services (&key user-p)
"Collect all systemd services running. "Collect all systemd services running.

View File

@ -32,7 +32,7 @@ set-window-option -g mode-keys vi
** Windows and panes configuration ** Windows and panes configuration
Although I agree in computer science most things should begin with Although I agree in computer science most things should begin with
zero, I find it quite weird to see my first window and my first pane zero, I find it quite weird to see my first window and my first pane
to be labeled with it rather than one. So, lets pull a Lua on Tmux to be labelled with it rather than one. So, lets pull a Lua on Tmux
and force it to begin with 1 instead of 0. and force it to begin with 1 instead of 0.
#+begin_src tmux #+begin_src tmux
set -g base-index 1 set -g base-index 1
@ -106,9 +106,9 @@ set -g @resurrect-processes '<<resurrect-processes()>>'
#+end_src #+end_src
** Keybindings ** Keybindings
First of all, I dont like prefixing all of my keybindings with ~C-b~, Firstly, I dont like prefixing all of my keybindings with ~C-b~, thats
thats what I use in ~insert-mode~ in Emacs to make the cursor go back. what I use in ~insert-mode~ in Emacs to make the cursor go back. So
So instead, lets set meta with space as my prefix. instead, lets set meta with space as my prefix.
#+begin_src tmux #+begin_src tmux
unbind C-b unbind C-b
set -g prefix M-Space set -g prefix M-Space
@ -222,7 +222,10 @@ with the main prefix.
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>> <<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
#+end_src #+end_src
In order to access more easily the different windows, I want to be able to type =<prefix> TAB <window number>=. However, Im 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, Im using the bépo
layout, numbers are available only when pressing shift. Otherwise, the
characters typed are ="«»()@+-/*= (from 1 to 0).
#+begin_src emacs-lisp :wrap src tmux :exports code #+begin_src emacs-lisp :wrap src tmux :exports code
(let ((keybinds "") (let ((keybinds "")
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*"))) (keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
@ -251,7 +254,7 @@ bind-key -T windows * select-window -t :=10
*** Copy in vi mode *** Copy in vi mode
Tmux has a nice mode for vim keybindings users: =copy-mode-vi= which Tmux has a nice mode for vim keybindings users: =copy-mode-vi= which
allows to move the cursor around in the pane, select some stuff, and allows moving the cursor around in the pane, select some stuff, and
copy it. But first, I need to unbind some keys: copy it. But first, I need to unbind some keys:
#+begin_src tmux #+begin_src tmux
unbind -T copy-mode-vi H unbind -T copy-mode-vi H