misc: remove org files

This commit is contained in:
Lucien Cartier-Tilet 2023-12-17 15:11:23 +01:00
parent 86741cf0dc
commit ae9d929183
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
47 changed files with 16 additions and 30961 deletions

View File

@ -1,37 +0,0 @@
kind: pipeline
name: default
steps:
- name: build
image: silex/emacs:master-alpine-ci
commands:
- emacs -Q --script export.el
when:
branch:
- master
event:
exclude:
- pull_request
- name: deploy
image: appleboy/drone-scp
settings:
host:
from_secret: ssh_host
target:
from_secret: ssh_target
source:
- org/config/*
strip_components: 2
username:
from_secret: ssh_username
password:
from_secret: ssh_password
port:
from_secret: ssh_port
when:
branch:
- master
event:
exclude:
- pull_request

View File

@ -3,49 +3,31 @@
#+EMAIL: lucien@phundrak.com
#+CREATOR: Lucien Cartier-Tilet
#+LANGUAGE: en
#+OPTIONS: auto-id:t H:4 broken_links:mark email:t ^:{}
#+OPTIONS: H:4 broken_links:mark email:t ^:{}
#+KEYWORDS: dotfiles linux emacs configuration phundrak drakpa
#+html: <a href="https://www.gnu.org/software/emacs/"><img src="https://img.shields.io/badge/Emacs-30.0.50-blueviolet.svg?style=flat-square&logo=GNU%20Emacs&logoColor=white" /></a>
#+html: <a href="https://orgmode.org/"><img src="https://img.shields.io/badge/Org%20mode-litterate%20config-success?logo=Org&logoColor=white&style=flat-square"/></a>
#+html: <a href="https://archlinux.org/"><img src="https://img.shields.io/badge/OS-Arch%20Linux-10A0CC?logo=Arch%20Linux&logoColor=white&style=flat-square"/></a>
#+html: <a href="https://config.phundrak.com"><img src="https://img.shields.io/badge/dynamic/json?label=Online%20documentation&query=%24%5B%3A1%5D.status&url=https%3A%2F%2Fdrone.phundrak.com%2Fapi%2Frepos%2Fphundrak%2Fdotfiles%2Fbuilds&style=flat-square&logo=buffer" /></a>
* Presentation
:PROPERTIES:
:CUSTOM_ID: Presentation-e5605995
:END:
This repository is where I keep most of my configuration files. With what is
stored here, anyone can recreate a working desktop configuration similar to my
daily one.
This repository is where I keep most of my configuration files. With
what is stored here, anyone can recreate a working desktop
configuration similar to my daily one.
My dotfiles are managed by [[https://yadm.io/][yadm]], and although I dont use its alternate files
features (which is pretty neat btw), it allows me to painlessly manage my
dotfiles right where they are and not in a separate Git repository somewhere
with everything symlinked. Another advantage of yadm is it will automatically
execute (with your authorization, of course) my homemade bootstrap when my
dotfiles are cloned through yadm.
My dotfiles are managed by [[https://yadm.io/][yadm]], and although I dont use its
alternate files features (which is pretty neat btw), it allows me to
painlessly manage my dotfiles right where they are and not in a
separate Git repository somewhere with everything symlinked. Another
advantage of yadm is it will automatically execute (with your
authorization, of course) my homemade bootstrap when my dotfiles are
cloned through yadm.
* Wheres the config file for X?
:PROPERTIES:
:CUSTOM_ID: Wheres_the_config_file_for_X?-7b214c4a
:END:
As you may have noticed, I am striving for a 100% amount of configuration
files exported from Org files, that is, through literary programming. This is
still very much a work in progress though. Most of what you need can be found
in my [[file:org/config/index.org][index.org]] file and in its folder.
* Some more info please?
:PROPERTIES:
:CUSTOM_ID: Some_more_info_please?-f54ae73a
:END:
Everything you need to know is in my [[file:org/config/]] folder, and my Org files
are also available in web format on my website [[https://config.phundrak.com/][config.phundrak.com]].
* A lot of things are missing!
Yep, a lot of things are not in this repository but over at
[[https://config.phundrak.com][config.phundrak.com]]. This is where I store all my litterate config.
You can check out its own repo over at
[[https://labs.phundrak.com/phundrak/config.phundrak.com][labs.phundrak.com/phundrak/config.phundrak.com]].
* Neat, whats the license?
:PROPERTIES:
:CUSTOM_ID: Neat,_whats_the_license?-399aa236
:END:
All of my dotfiles (and my dotfiles only) are available under the GNU GPLv3
Licence. Please consult [[file:LICENCE.md]] for more information. In short: you
are free to access, edit and redistribute all of my dotfiles under the same

View File

@ -1,28 +0,0 @@
#!/usr/bin/env -S emacs -Q --script
(require 'package)
(require 'org)
(require 'ox-html)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
(package-refresh-contents)
(package-install 'htmlize)
(setq org-confirm-babel-evaluate nil
org-html-validation-link nil
make-backup-files nil)
(defun export-and-clean (directory)
(progn (mapc (lambda (file)
(progn (message (concat "=====================\n"
"Exporting "
file
"\n"
"=====================\n"))
(with-current-buffer (find-file file)
(org-html-export-to-html))))
(directory-files directory t (regexp-quote ".org")))))
(dolist (dir '("org/config/" "org/config/Deprecated/" "org/config/WIP"))
(export-and-clean dir))

View File

@ -1,2 +0,0 @@
((org-mode . ((org-confirm-babel-evaluate . nil)
(org-latex-reference-command . "\\ref{%s}"))))

File diff suppressed because it is too large Load Diff

View File

@ -1,827 +0,0 @@
#+TITLE: i3 config
#+setupfile: ../headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's i3 config" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's i3 config" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the i3 config file of Phundrak" />
#+PROPERTY: header-args :noweb yes :exports code :tangle ~/.config/i3/config
#+PROPERTY: header-args:emacs-lisp :exports none :tangle no
* Presentation
:PROPERTIES:
:CUSTOM_ID: Presentation-9c7a53bf
:END:
#+begin_center
*Before proceeding, be aware that I deprecated this i3 config on August 22nd, 2020, meaning I wont update it anymore unless I use it again some day in the future. I will keep it on my website though.*
#+end_center
=i3= is a window manager for GNU/Linux which automatically tiles windows in workspaces. This configuration was ade to automatically handle some tasks such as which software allowed where, autostart, and launching software with shortcuts.
It is to be noted I am using [[https://github.com/Airblader/i3][Airbladers fork of i3]], =i3-gaps=. Some configuration will not work with =i3=.
#+BEGIN_SRC conf :exports none
# -*- mode: conf -*-
#+END_SRC
* Screenshots
:PROPERTIES:
:CUSTOM_ID: Screenshots-51f1cef3
:END:
#+CAPTION: Desktop with Neofetch in the terminal
[[./img/neofetch.png.webp]]
#+CAPTION: Desktop with Emacs opened
[[./img/emacs.png.webp]]
#+CAPTION: Desktop with Rofi
[[./img/rofi.png.webp]]
* Variables declaration
:PROPERTIES:
:CUSTOM_ID: Variables_declaration-0ebc9a21
:END:
** Global
:PROPERTIES:
:CUSTOM_ID: Variables_declaration-Global-1cf1bfe4
:END:
The first I do is declaring the modifier key and the alt key —I dont find the names =Mod1= and =Mod4= to be explicit enough. This will map =$mod= to the Super key (or as some people unfortunately call it, the /Windows/ key) and =$alt= to the Alt key.
Lets also bind the =$up=, =$down=, =$left= and =$right= variables to respectively the up, down, left, and right arrows on the keyboard. Why bind them to variables? If I ever want to modify the arrow keys to some other keys, like =é=, =a=, =u=, and =i= (the equivalent of =wqsd= on the bépo layout) or =c=, =t=, =s=, and =r= (the equivalent of =hjkl= on the bépo layout), I will just have to modify these four lines.
Ill also set the =$term= variable. A lot of shortcuts in my i3 config rely on the terminal emulator itself to launch commands in the terminal, and thus call the terminal itself. If I ever need to move from my current terminal, I will just have to change the name of the executable here.
#+NAME: variable-table
| variable | value |
|----------+-------|
| $mod | Mod4 |
| $alt | Mod1 |
| $up | Up |
| $down | Down |
| $left | Left |
| $right | Right |
| $term | st |
#+NAME: variable-sh
| variable | value |
|-------------+--------------------------------------------------------------------------|
| $exiti3 | i3-nagbar -t warning -m 'Leave i3?' -b 'Yes' 'i3-msg exit' |
| $lockscreen | Lucien Cartier-Tilet\n(Phuntsok Drak-pa)\n+33 (0)6 83 90 56 89 |
| $rofiexec | rofi -combi-modi 'window,drun' -show combi -mohh combi -m -1 -show-icons |
| $mail | emacsclient -c -e '(mu4e)' -n |
| $ec | emacsclient -c -n |
| $walset | wal -i ~/Pictures/Wallpapers -o wal-set |
Variables will be set like so.
#+BEGIN_SRC conf :tangle no
set $term st
#+END_SRC
#+NAME: generate-variables
#+BEGIN_SRC emacs-lisp :var variables=variable-table :cache yes
(mapconcat (lambda (x) (format "set %s %s" (car x) (cadr x)))
variables
"\n")
#+END_SRC
#+RESULTS[48079cbd7e6dbf2003fe5ae87216bd38f638b6f8]: generate-variables
: set $mod Mod4
: set $alt Mod1
: set $up Up
: set $down Down
: set $left Left
: set $right Right
: set $term st
Finally, some variables hold some long strings for commands I dont want to have to type multiple times.
#+NAME: generate-variables2
#+BEGIN_SRC emacs-lisp :var variables=variable-sh :cache yes
(mapconcat (lambda (x) (format "set %s \"%s\"" (car x) (cadr x)))
variables
"\n")
#+END_SRC
#+RESULTS[c901e3e31c500859661650e86a6b63aef286acbe]: generate-variables2
: set $exiti3 "i3-nagbar -t warning -m 'Leave i3?' -b 'Yes' 'i3-msg exit'"
: set $lockscreen "Lucien Cartier-Tilet\n(Phuntsok Drak-pa)\n+33 (0)6 83 90 56 89"
: set $rofiexec "rofi -combi-modi 'window,drun' -show combi -mohh combi -m -1 -show-icons"
: set $mail "emacsclient -c -e '(mu4e)' -n"
: set $ec "emacsclient -c -n"
: set $walset "wal -i ~/Pictures/Wallpapers -o wal-set"
Here is the configuration:
#+BEGIN_SRC conf :noweb yes
<<generate-variables()>>
<<generate-variables2()>>
#+END_SRC
Now comes the font for the window tiles. Honestly, this setting is useless since we do not see it, but lets set it anyway.
#+BEGIN_SRC conf
font Fira Sans Book:style=Book:pixelsize=10
#+END_SRC
** Floating windows
:PROPERTIES:
:CUSTOM_ID: Variables_declaration-Floating_windows-897d0c3b
:END:
Floating windows are windows that are not tiled with other windows, but rather are free to go anywhere on your screen, with any size. A bit like what you would get with any other non-tiling window manager or desktop environment (though most of them support minimal tiling features).
Lets declare our floading modyfier. With floating windows, you can move them around by clicking on the windows borders; but since we dont have any with this config, we will have instead to press the floating modifier while clicking on the window (anywhere on the window is fine) to move them around.
Here is the configuration:
#+BEGIN_SRC conf
floating_modifier $mod
#+END_SRC
* i3 global settings
:PROPERTIES:
:CUSTOM_ID: i3_global_settings-1b863d93
:END:
Some settings affect i3 globally, such as its aspect or how it handles the mouse. Hence, here are some settings I set in my configuration.
** Mouse settings
:PROPERTIES:
:CUSTOM_ID: i3_global_settings-Mouse_settings-4630241d
:END:
First of all, I do not want i3 to warp my mouse each time I change windows; my mouse stays where it is.
#+BEGIN_SRC conf
mouse_warping none
#+END_SRC
I also to not want the window focus to follow my mouse, because sometimes I will just knock my physical mouse out of the way of my hand, and when I do that the software mouse will most likely end up in another window I do not want to focus.
#+BEGIN_SRC conf
focus_follows_mouse no
#+END_SRC
** Popup handling
:PROPERTIES:
:CUSTOM_ID: i3_global_settings-Popup_handling-51b6ed8d
:END:
While in fullscreen, some software might generate a popup. In that case, I want to be aware of that, and any popup will make me leave fullscreen in order to be presented with said popup.
#+BEGIN_SRC conf
popup_during_fullscreen leave_fullscreen
#+END_SRC
** Behavior of workspace changes
:PROPERTIES:
:CUSTOM_ID: i3_global_settings-Behavior_of_workspace_changes-00202985
:END:
When changing workspace as described below, we often want to go back to the previous workspace we were working on, but we might not remember immediately which one it was, or we might still have our fingers ready to fire the shortcut which made us make the first workspace change. Hence, if we type the same workspace change shortcut, instead of doing nothing it will bring us back to the previous workspace we were on.
#+BEGIN_SRC conf
workspace_auto_back_and_forth yes
#+END_SRC
** Gaps and window appearance
:PROPERTIES:
:CUSTOM_ID: i3_global_settings-Gaps_and_window_appearance-749e9f7b
:END:
As mentioned in at the beginning of this document, I am using i3-gaps, which brings spacing (gaps) between windows to i3.
First, I want space around my windows only when there are several containers on the same screen, otherwise they will be maximized.
#+BEGIN_SRC conf
smart_gaps on
#+END_SRC
I also do not want to see any window border, so I will be turning this setting off.
#+BEGIN_SRC conf
smart_borders on
#+END_SRC
By the way, the default border is invisible, since it is zero pixels wide.
#+BEGIN_SRC conf
default_border pixel 0
#+END_SRC
Then comes the size of these gaps. I made the outer gap negative so the space between my windows and the border of my screens is smaller than the gap between my containers.
#+BEGIN_SRC conf
gaps inner 20
gaps outer -10
#+END_SRC
Some parameters are also available when it comes to the colors i3 uses. Honestly, we wont see these colors much, so lets simply keep the default values.
#+BEGIN_SRC conf
set_from_resource $fg i3wm.color7 #f0f0f0
set_from_resource $bg i3wm.color2 #f0f0f0
# class border backgr. text indicator child_border
client.focused $bg $bg $fg $bg $bg
client.focused_inactive $bg $bg $fg $bg $bg
client.unfocused $bg $bg $fg $bg $bg
client.urgent $bg $bg $fg $bg $bg
client.placeholder $bg $bg $fg $bg $bg
#+END_SRC
* Assigning windows to workspaces
:PROPERTIES:
:CUSTOM_ID: Assigning_windows_to_workspaces-e59f61e5
:END:
I decided to bind some windows to some workspaces in order to have a better organization of my desktop.
#+NAME: assignment-table
| Application | Class | Workspace |
|-------------+-------------+-----------|
| Emacs | Emacs | 2 |
| Chromium | Chromium | 3 |
| Firefox | firefox | 3 |
| Nemo | Nemo | 4 |
| Wonderdraft | Godot | 5 |
| Gimp | Gimp* | 6 |
| Gnome Boxes | gnome-boxes | 8 |
| Steam | Steam | 9 |
| Discord | discord | 10 |
The class table is used in the assignment in the i3 config file. For instance, Gimps assignment will look like this:
#+BEGIN_SRC conf :tangle no
assign [class="Gimp*"] 6
#+END_SRC
#+NAME: generate-workspaces
#+BEGIN_SRC emacs-lisp :var workspaces=assignment-table :cache yes
(mapconcat (lambda (x) (format "assign [class=\"%s\"] %s" (cadr x) (caddr x)))
workspaces
"\n")
#+END_SRC
#+RESULTS[0995341b013e50227edf78257ab502e46a30bc9a]: generate-workspaces
: assign [class="Emacs"] 2
: assign [class="Chromium"] 3
: assign [class="firefox"] 3
: assign [class="Nemo"] 4
: assign [class="Godot"] 5
: assign [class="Gimp*"] 6
: assign [class="gnome-boxes"] 8
: assign [class="Steam"] 9
: assign [class="discord"] 10
Here is the configuration:
#+BEGIN_SRC conf :noweb yes
<<generate-workspaces()>>
#+END_SRC
And although this is not specifically assigning a window to a workspace, I also want to have the tenth workspace assigned to a specific output in case I have two screens — and since this is the case when I am using only one computer, Marpa, I will be using some EmacsLisp in order to generate a different configuration file from this org file depending on the name of the machine.
#+NAME: ws10-output-edp1
#+BEGIN_SRC emacs-lisp
(if (string= system-name "Marpa")
"workspace 10 output eDP-1"
"")
#+END_SRC
Now Ill call the above code as a noweb reference that should be executed.
#+BEGIN_SRC conf
<<ws10-output-edp1()>>
#+END_SRC
* Shortcuts
:PROPERTIES:
:CUSTOM_ID: Shortcuts-9c7074d3
:END:
I use *A LOT* of shortcuts when it comes to my workflow. Like, all the time. So, expect this chapter to be a bit long, and Ill try to make it readable still.
Shortcuts are set like so:
#+BEGIN_SRC conf :tangle no
bindsym shortcut command
#+END_SRC
#+NAME: generate-shortcuts
#+BEGIN_SRC emacs-lisp :exports none :var table=[] :tangle no
(mapconcat (lambda (x) (format "bindsym %s %s" (car x) (cadr x)))
table
"\n")
#+END_SRC
** Terminal shortcuts
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Terminal_shortcuts-514ecdbe
:END:
I have a couple of shortcuts which are related to my terminal. For instance, ~$mod+Return~ opens a regular terminal instance while ~$mod+$alt+M~ opens an SSH instance on my Mila host.
#+NAME: terminal-shortcuts
| shortcut | command | What it does |
|-------------------+----------------------+--------------------------------------------------|
| $mod+Return | exec $term | Opens a regular terminal console |
| $mod+$alt+Return | split h;; exec $term | Opens a terminal console below the current one |
| $mod+Shift+Return | split v;; exec $term | Opens a terminal on the right of the current one |
| $mod+$alt+m | exec $term ssh Mila | Opens an SSH instance in my Mila host |
| $mod+$alt+n | exec $term ssh Naro | Opens an SSH instance in my Naro host |
| $mod+Shift+h | exec $term htop | Opens a terminal with ~htop~ |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=terminal-shortcuts)>>
#+END_SRC
** i3 shortcuts
:PROPERTIES:
:CUSTOM_ID: Shortcuts-i3_shortcuts-369039ae
:END:
A couple of shortcuts are dedicated to i3 itself.
#+NAME: i3-sh
| shortcut | command | what it does |
|--------------+---------------------------------+----------------------------------|
| $mod+Shift+c | exec yadm alt && i3-msg reload | Reload the i3 configuration file |
| $mod+Shift+r | exec yadm alt && i3-msg restart | Restart i3 inplace |
| $mod+Shift+e | exec $exiti3 | Quit i3 |
And although this is not really an i3 shortcut per se, I add here the shortcut for launching pywal, which will set one of my wallpapers as the wallpaper and will generate my systems color configuration from it.
#+NAME: wal-sh
| shortcut | command | what it does |
|----------+--------------+--------------------------------------------------------------|
| $mod+w | exec $walset | Set a random wallpaper and generates a color profile from it |
We also have some shortcuts to lock our screen, sleep, hibernate and shut down our computer.
#+NAME: computer-sh
| shortcut | command | what it does |
|---------------+----------------------------+------------------------|
| $mod+l | exec i3lock -fol | Lock the screen |
| $mod+$alt+h | exec "systemctl suspend" | Suspend the computer |
| $mod+Ctrl+h | exec "systemctl hibernate" | Hibernate the computer |
| $mod+Shift+F4 | exec poweroff | Power off the computer |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=i3-sh)>>
<<generate-shortcuts(table=wal-sh)>>
<<generate-shortcuts(table=computer-sh)>>
#+END_SRC
** Window and workspace management
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-a384b8f8
:END:
*** Managing how windows will split
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Managing_how_windows_will_split-5a22ae31
:END:
It is possible to indicate to i3 how windows interact with one another, and especially how they are organized by spawning new windows either to the right or below the current window.
#+NAME: split-win-sh
| shortcuts | command | what it does |
|-----------+---------+--------------------------------------------------------|
| $mod+h | split h | Next window to spawn will spawn below the current one |
| $mod+v | split v | Next window to spawn will spawn beside the current one |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=split-win-sh)>>
#+END_SRC
*** Focus windows
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Focus_windows-69a00ae9
:END:
To change window focus, you can use one of the following shortcuts:
#+NAME: window-focus-sh
| shortcut | command | what it does |
|-------------+-------------+-------------------------------------------|
| $mod+$left | focus left | Focus the window left of the current one |
| $mod+$down | focus down | Focus the window down of the current one |
| $mod+$up | focus up | Focus the window up of the current one |
| $mod+$right | focus right | Focus the windof right of the current one |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=window-focus-sh)>>
#+END_SRC
*** Focus workspaces
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Focus_workspaces-9f4bee74
:END:
Just like windows, it is also possible to change focus between workspaces, because lets be honest, most people wont have ten screens to display all ten workspaces at the same time, and frankly that would be impractical.
#+NAME: ws-focus-sh
| shortcut | window | what it does |
|----------+--------------+-------------------------|
| $mod+1 | workspace 1 | Focus first workspace |
| $mod+2 | workspace 2 | Focus second workspace |
| $mod+3 | workspace 3 | Focus third workspace |
| $mod+4 | workspace 4 | Focus fourth workspace |
| $mod+5 | workspace 5 | Focus fifth workspace |
| $mod+6 | workspace 6 | Focus sixth workspace |
| $mod+7 | workspace 7 | Focus seventh workspace |
| $mod+8 | workspace 8 | Focus eighth workspace |
| $mod+9 | workspace 9 | Focus ninth workspace |
| $mod+0 | workspace 10 | Focus tenth workspace |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=ws-focus-sh)>>
#+END_SRC
*** Moving windows
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_windows-d8c90ac2
:END:
To move windows, a couple of shortcuts are available:
#+NAME: window-move-sh
| shortcut | command | what it does |
|-------------------+------------+-------------------------------|
| $mod+Shift+$left | move left | Move the focused window left |
| $mod+Shift+$down | move down | Move the focused window down |
| $mod+Shift+$up | move up | Move the focused window up |
| $mod+Shift+$right | move right | Move the focused window right |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=window-move-sh)>>
#+END_SRC
*** Moving containers
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_containers-b97cf4ae
:END:
To move containers between the available screens, you have the following shortcuts:
#+NAME: containers-move-sh
| shortcut | command | what it does |
|------------------+--------------------------------+------------------------------------------------------------|
| $mod+Ctrl+$left | move container to output left | Moves the container to the screen left of the current one |
| $mod+Ctrl+$down | move container to output down | Moves the container to the screen down of the current one |
| $mod+Ctrl+$up | move container to output up | Moves the container to the screen above the current one |
| $mod+Ctrl+$right | move container to output right | Moves the container to the screen right of the current one |
You can also send containers to other workspaces by their number.
#+NAME: containers-ws-sh
| shortcut | command | what it does |
|--------------+--------------------------------+--------------------------------------------|
| $mod+Shift+1 | move container to workspace 1 | Move current container to the workspace 1 |
| $mod+Shift+2 | move container to workspace 2 | Move current container to the workspace 2 |
| $mod+Shift+3 | move container to workspace 3 | Move current container to the workspace 3 |
| $mod+Shift+4 | move container to workspace 4 | Move current container to the workspace 4 |
| $mod+Shift+5 | move container to workspace 5 | Move current container to the workspace 5 |
| $mod+Shift+6 | move container to workspace 6 | Move current container to the workspace 6 |
| $mod+Shift+7 | move container to workspace 7 | Move current container to the workspace 7 |
| $mod+Shift+8 | move container to workspace 8 | Move current container to the workspace 8 |
| $mod+Shift+9 | move container to workspace 9 | Move current container to the workspace 9 |
| $mod+Shift+0 | move container to workspace 10 | Move current container to the workspace 10 |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=containers-move-sh)>>
<<generate-shortcuts(table=containers-ws-sh)>>
#+END_SRC
*** Moving workspaces
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_workspaces-a71d7b54
:END:
It is also possible to move workspaces. The related shortcuts available are the following:
#+NAME: workspace-move-sh
| shortcut | command | what it does |
|------------------------+--------------------------------+------------------------------------------------------------|
| $mod+Ctrl+Shift+$left | move workspace to output left | Moves the workspace to the screen left of the current one |
| $mod+Ctrl+Shift+$down | move workspace to output down | Moves the workspace to the screen down of the current one |
| $mod+Ctrl+Shift+$up | move workspace to output up | Moves the workspace to the screen above the current one |
| $mod+Ctrl+Shift+$right | move workspace to output right | Moves the workspace to the screen right of the current one |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=workspace-move-sh)>>
#+END_SRC
*** Close windows
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Close_windows-5e521a48
:END:
To close windows, we have two main shortcuts: Alt+F4 and mod+q. The first one is here due to habits, but I dont really use it anymore due to my main keyboard which doesnt have any easy access to the functions keys, hence mod+q.
#+NAME: close-win-sh
| shortcut | command | what it does |
|----------+---------+-------------------------|
| $mod+q | kill | kill the current window |
| $alt+F4 | kill | kill the current window |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=close-win-sh)>>
#+END_SRC
*** Manage the size of the current window
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Manage_the_size_of_the_current_window-11afa914
:END:
It is possible to change the size of the current window, even if it is a floating one. The first shortcut that might interest you is $mod+f which switches your current window to fullscreen. But to resize a window, you will need to enter the ~resize~ mode.
#+NAME: size-win-sh
| shortcut | command | what it does |
|----------+-------------------+---------------------------------------------------|
| $mod+f | fullscreen toggle | Puts the current window in fullscreen or exits it |
| $mod+r | mode "resize" | Enter resize mode |
When it comes to modes, they are defined as follows:
#+BEGIN_SRC conf :tangle no
mode "nameofyourmode" {
here go your shortcuts
}
#+END_SRC
So, all the following shortcuts will be inserted in a mode called ~resize~. Note that not only are the resizing shortcuts bound to the arrow keys, they are also bound to ~ctsr~, which is the bépo equivalent of ~hjkl~.
#+NAME: resize-win-sh
| shortcut | command | what it does |
|----------+-------------------------------------+-------------------------------------------|
| $right | resize grow width 20 px or 10 ppt | Increase the width of the current window |
| r | resize grow width 20 px or 10 ppt | Increase the width of the current window |
| $left | resize shrink width 10 px or 5 ppt | Decrease the width of the current window |
| c | resize shrink width 10 px or 5 ppt | Decrease the width of the current window |
| $down | resize grow height 10 px or 5 ppt | Increase the height of the current window |
| t | resize grow height 10 px or 5 ppt | Increase the height of the current window |
| $up | resize shrink height 10 px or 5 ppt | Decrease the height of the current window |
| s | resize shrink height 10 px or 5 ppt | Decrease the height of the current window |
| Return | mode "default" | Return to the default mode |
| Escape | mode "default" | Return to the default mode |
If you prefer, you can think of these shortcuts not as increasing or decreasing the width or height of the current window, but rather as how the bottom or right limit of the windows will be moved relative to the top left corner.
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=size-win-sh)>>
mode "resize" {
<<generate-shortcuts(table=resize-win-sh)>>
}
#+END_SRC
*** Manage floating windows
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Manage_floating_windows-9206f4da
:END:
As said above, your windows can be floating windows instead of being tiled like they are by default. For this too we have a couple of shortcuts:
#+NAME: float-win-sh
| shortcut | command | what it does |
|------------------+----------------------+------------------------------------------------------|
| $mod+Shift+space | floating toggle | Toggles the window between tiled and floating mode |
| $mod+space | focus mode_toggle | Toggles the focus between tiled and floating windows |
| $mod+Ctrl+c | move position center | Centers the focused floating window |
If you want to move around your floating window, you can do it with your mouse while holding down the floating modifier declared [[#Variables_declaration-Floating_windows-897d0c3b][here]].
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=float-win-sh)>>
#+END_SRC
*** Scratchpad and window display
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Scratchpad_and_window_display-10d8d1f4
:END:
You can think of i3s scratchpad as some sort of extra workspace in which you can hide your windows you are not using, or as if you want to reduce a window to the taskbar of other window managers or desktop environments. You have basically two shortcuts for the scratchpad: one that sends the current window to the scratchpad, and one that cicles through the windows sent to the scratchpad and shows them to you sequencially. If you go through all of them, they will be hidden again. You can get a window out of the scratchpad by tiling it to the current workspace with the shortcut described above.
You also have the possibility of making a floating window a sticky window. This means not only will it show on all workspaces, it will also be on top of every other window. It can be useful if you have some notes you want to keep an eye on for instance.
#+NAME: scratchpad-sh
| shortcut | command | what it does |
|--------------+-----------------+------------------------------------------------------|
| $mod+Shift+s | move scratchpad | Sends the current window to the scratchpad |
| $mod+s | scratchpad show | Shows and cycles through windows from the scratchpad |
| $mod+Ctrl+s | sticky toggle | Toggles sticky mode on current window |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=scratchpad-sh)>>
#+END_SRC
*** Gaps management
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Gaps_management-33979213
:END:
It is possible to dynamically change the gaps between containers if we want to change a bit the appearance of i3. For that, we obviously have some shortcuts.
#+NAME: gaps-resize-sh
| shortcut | command | what it does |
|-------------------+-----------------------------------------------+-----------------------------|
| $mod+g | gaps inner current plus 5 | Increase the inner gap size |
| $mod+Shift+g | gaps inner current minus 5 | Decrease the inner gap size |
| $mod+Ctrl+g | gaps outer current plus 5 | Increase the outer gap size |
| $mod+Ctrl+Shift+g | gaps outer current minus 5 | Decrease the outer gap size |
| $mod+$alt+g | gaps inner all set 20; gaps outer all set -10 | Reset gaps |
Here is the corresponding configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=gaps-resize-sh)>>
#+END_SRC
** Launching software
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-0e088e69
:END:
A big part of my i3 shortcuts though are related to launching various software. Ill try to sort them by category here, but do take a look even at categories which you might not be interested in, they might actually have something useful for you.
*** Software and command launcher
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Software_and_command_launcher-a3f5863e
:END:
These commands will allow the user to launch applications which provide ~.desktop~ files or user-defined ~.desktop~ files, as well as commands with the help of rofi.
#+NAME: launcher-sh
| shortcut | command | what it does |
|--------------+---------------------------------------+-------------------------------------------------------|
| $mod+Shift+d | exec --no-startup-id j4-dmenu-desktop | Launch a registered application |
| $mod+d | exec --no-startup-id $rofiexec | Launch a terminal command or a registered application |
Here is the configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=launcher-sh)>>
#+END_SRC
*** Internet software
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Internet_software-a0524cd8
:END:
I have a couple of Internet-related software I can launch easily.
#+NAME: internet-sh
| shortcut | command | what it does |
|--------------+---------------------+-----------------------------|
| $mod+b | exec firefox | Launch browser |
| $mod+m | exec $mail | Launch Gnus, my mail client |
| Ctrl+Shift+d | exec discord-canary | Launch Discord |
Hence this configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=internet-sh)>>
#+END_SRC
*** Screenshots
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Screenshots-41e41c88
:END:
A couple of shortcuts are available for taking screenshots.
#+NAME: screenshot-sh
| shortcut | command | what it does |
|-------------+-----------------------------------+----------------------------------------------------------|
| Print | exec --no-startup-id scrot | Takes a screenshot of the entire desktop |
| Ctrl+Print | exec --no-startup-id "scrot -s" | Takes a screenshot of a region or the selected window |
| Shift+Print | exec --no-startup-id "scrot -d 3" | takes a screenshot of the desktop three in three seconds |
This gives us this configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=screenshot-sh)>>
#+END_SRC
*** Screen brightness
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Screen_brightness-6855d53f
:END:
Here we have four commands for managing our screens brightness (this is useful for laptops, not so much with desktops), and two of them are actually duplicates of the other two in case a laptop doesnt have dedicated keys or we are using a keyboard which doesnt provide them.
#+NAME: brightness-sh
| shortcut | command | what it does |
|-----------------------+------------------------+---------------------------------------|
| XF86MonBrightnessUp | exec xbacklight -inc 5 | Increase the brightness of the screen |
| $mod+$alt+Next | exec xbacklight -inc 5 | Increase the brightness of the screen |
| XF86MonBrightnessDown | exec xbacklight -dec 5 | Decrease the brightness of the screen |
| $mod+$alt+Prev | exec xbacklight -dec 5 | Decrease the brightness of the screen |
This gives us this configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=brightness-sh)>>
#+END_SRC
*** Media control
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Media_control-18ad2815
:END:
Some shortcuts are dedicated to media control, especially when it comes to controlling music. All of these media control shortcuts will be calls to ~mpc~ which will in turn send commands to ~mpd~, which is the music server I use on my computers.
#+NAME: media-sh
| shortcut | command | what it does |
|---------------------------+--------------------+--------------------------------|
| XF86AudioNext | exec mpc next | Forward to the next track |
| $alt+XF86AudioRaiseVolume | exec mpc next | Forward to the next track |
| $mod+Next | exec mpc next | Forward to the next track |
| XF86AudioPrev | exec mpc prev | Backward to the previous track |
| $alt+XF86AudioLowerVolume | exec mpc prev | Backward to the previous track |
| $mod+Prior | exec mpc prev | Backward to the previous track |
| XF86AudioPlay | exec mpc toggle | Play or pause the music |
| $mod+p | exec mpc toggle | Play or pause the music |
| $mod+$alt+p | exec mpc stop | Completely stop the music |
| XF86AudioStop | exec mpc stop | Completely stop the music |
| $alt+XF86AudioPlay | exec mpc stop | Completely stop the music |
| $mod+$alt+7 | exec mpc volume +5 | Increase the volume from mpd |
| $mod+$alt+8 | exec mpc volume -5 | Decrease the volume from mpd |
We also have two shortcuts for launching ncmpcpp, my mpd frontend, either with the playlist open by default, or the visualizes open.
#+NAME: ncmpcpp-sh
| shortcut | command | what it does |
|--------------+-----------------------------------+----------------------------------|
| $mod+Shift+n | exec $term ncmpcpp -q | Launch ncmpcpps playlist editor |
| $mod+Shift+v | exec $term ncmpcpp -qs visualizer | Launch ncmpcpps visualizer |
We also have more general shortcuts, like how to manipulate the general volume level.
#+NAME: volume-sh
| shortcut | command | what it does |
|----------------------+----------------------------------------+----------------------|
| XF86AudioMute | exec "amixer set Master 1+ toggle" | Mute or unmute audio |
| Ctrl+$mod+Prior | exec "amixer -q set Master 2%+ unmute" | Raise volume |
| XF86AudioRaiseVolume | exec "amixer -q set Master 2%+ unmute" | Raise volume |
| Ctrl+$mod+Next | exec "amixer -q set Master 2%- unmute" | Reduce volume |
| XF86AudioLowerVolume | exec "amixer -q set Master 2%- unmute" | Reduce volume |
This gives us this configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=media-sh)>>
<<generate-shortcuts(table=ncmpcpp-sh)>>
<<generate-shortcuts(table=volume-sh)>>
#+END_SRC
*** Rofi utilities
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Rofi_utilities-b8eb5b95
:END:
We also have some utilities Ive written and which are interfaced with rofi. Here are said shortcuts.
#+NAME: rofi-sh
| shortcut | command | what it does |
|-------------------+-----------------------+-----------------------------------------------------------------------|
| $mod+Shift+p | exec rofi-pass --type | Types the selected password available from ~pass~ where the cursor is |
| $mod+Ctrl+Shift+p | exec rofi-pass | Copies in the clipboard the selected password from ~pass~ for 45 sec |
| $mod+Ctrl+m | exec rofi-mount | Volume mounting helper |
| $mod+Ctrl+u | exec rofi-umount | Volume unmounting helper |
| $mod+$alt+e | exec rofi-emoji | Emoji picker, copies it in the clipboard |
| $mod+Ctrl+w | exec wacom-setup | Sets my Wacom Bamboo tablet as being active on the selected screen |
| $mod+Shift+w | exec connect-wifi | Connect to an available WiFi network |
This gives us the following configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=rofi-sh)>>
#+END_SRC
*** Miscellaneous
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Miscellaneous-7ec80fea
:END:
And last but not least, I have some other shortcuts for various software, some of them which I use quite a lot like the shortcut for launching Emacs.
#+NAME: misc-sh
| shortcut | command | what it does |
|-------------+------------------+---------------------------------|
| $mod+e | exec $ec | Launch Emacs client |
| $mod+n | exec nemo | Launch Nemo (file manager) |
| $mod+$alt+c | exec speedcrunch | Launch Speedcrunch (calculator) |
| $mod+F3 | exec arandr | Launch arandr |
This gives us the following configuration:
#+BEGIN_SRC conf
<<generate-shortcuts(table=misc-sh)>>
#+END_SRC
*** Screen management
:PROPERTIES:
:CUSTOM_ID: Shortcuts-Launching_software-Screen_management-f9b35bf2
:END:
Additionally, we have a shortcut for entering presentation mode on the additional screen of the computer; on my main computer, Mila, the additional screen is HDMI-1, while it is VGA1 on my travel laptop. Well use some Emacs Lisp to determine on the configuration file export which screens names to use.
#+NAME: hostname-screen-management
#+BEGIN_SRC emacs-lisp
(cond ((string= system-name "Marpa") "bindsym $mod+Ctrl+p xrandr --output HDMI-1 --mode 1024x768 --right-of eDP-1")
((string= system-name "gampo") "bindsym $mod+Ctrl+p xrandr --output VGA1 --mode 1024x768 --right-of LVDS1"))
#+END_SRC
Now, we just have to call this Emacs Lisp code as a noweb reference and execute it.
#+BEGIN_SRC conf :noweb yes
<<hostname-screen-management()>>
#+END_SRC
* Software autolaunch
:PROPERTIES:
:CUSTOM_ID: Software_autolaunch-ccee82f6
:END:
When i3 is launched, I want it to also launch some software automatically. Here is what we will launch:
#+NAME: autolaunch
| always execute it? | command | what it is |
|--------------------+-------------------------------------------+----------------------------------------|
| no | /usr/lib/xfce-polkit/xfce-polkit | Launch the XFCE Polkit |
| no | picom --experimental-backends -e 1 | Launch picom |
| no | xss-lock -- lock | Launch power management |
| no | numlockx on | Activate NumLock |
| no | dunst -config ~/.config/dunst/dunstrc | Launch notification manager |
| no | nm-applet | NetworkManager system tray |
| yes | wal -i "$(< "${HOME}/.cache/wal/wal")" | Sets the wallpaper from last session |
| no | xrdb $HOME/.Xresources | Load Xresources files |
| yes | polybar-launch | Launch polybar |
| no | mpc stop | Stop music from mpd |
| no | mpd_discord_richpresence --no-idle --fork | Launch mpd status sharing with Discord |
#+NAME: generate-autolaunch
#+BEGIN_SRC emacs-lisp :exports none :cache yes :var table=autolaunch
(mapconcat (lambda (x)
(format (concat (if (string= (car x)
"yes")
"exec_always"
"exec")
" --no-startup-id %s")
(cadr x)))
table
"\n")
#+END_SRC
#+RESULTS[283577fe2e66b30c936b7fcf142713d285db8da6]: generate-autolaunch
#+begin_example
exec_always --no-startup-id wal -i "$(< "${HOME}/.cache/wal/wal")"
exec --no-startup-id xss-lock -- i3lock -fol
exec --no-startup-id dunst -config ~/.config/dunst/dunstrc
exec --no-startup-id xrdb $HOME/.Xresources
exec --no-startup-id compton -F --opengl --config ~/.config/compton.conf -e 1
exec_always --no-startup-id polybar-launch
exec_always --no-startup-id enable_touch
exec --no-startup-id syndaemon -i 1.0 -t -k
exec --no-startup-id mpc stop
exec --no-startup-id mpd_discord_richpresence --no-idle --fork
exec --no-startup-id nm-applet
exec --no-startup-id numlockx on
#+end_example
My travel laptop has a fingerprint reader which can be used as an authentification method when the root password is asked. Lets launch our policy kit manager if that is the case:
#+NAME: fingerprint-thinkpad
#+BEGIN_SRC emacs-lisp
(if (string= system-name "gampo")
"exec --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1"
"")
#+END_SRC
#+BEGIN_SRC conf
<<fingerprint-thinkpad()>>
<<generate-autolaunch()>>
#+END_SRC

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

View File

@ -1,117 +0,0 @@
#+TITLE: Nano configuration
#+setupfile: ../headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's nano configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's nano configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the nano configuration of Phundrak" />
#+PROPERTY: header-args :tangle ~/.config/nano/nanorc
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-7e535842
:END:
#+begin_center
*Before proceeding, be aware that I deprecated this nano config on August 28th, 2020, meaning I wont update it anymore unless I use it again some day in the future. I will keep it on my website though.*
#+end_center
I nowadays rarely use Nano as a text editor, since I mainly rely on Emacs for all sorts of tasks, including quick file editing. However, at times, Emacs wont work or wont be available, and I therefore need a lightweight, fast and reliable text editor: Nano. And despite Nano being a simple piece of software, it does offer some customization I cannot refuse. Here is how I configured it:
* Configuration
:PROPERTIES:
:CUSTOM_ID: Configuration-b55668a7
:END:
When saving a file, create a backup file by adding a tilde (=~=) to the file's name. And make and keep not just one backup file, but make and keep a uniquely numbered one every time a file is saved — when backups are enabled with =set backup= or =--backup= or =-B=. The uniquely numbered files are stored in the directory =~/.cache/nano/backups/=.
#+BEGIN_SRC conf
set backup
set backupdir /home/phundrak/.cache/nano/backups/
#+END_SRC
Save a file by default in Unix format. This overrides nano's default behavior of saving a file in the format that it had. (This option has no effect when you also use =set noconvert=.)
#+BEGIN_SRC conf
set unix
#+END_SRC
** Keys behavior
:PROPERTIES:
:CUSTOM_ID: Configuration-Keys_behavior-c665fa36
:END:
Make the Home key smarter. When Home is pressed anywhere but at the very beginning of non-whitespace characters on a line, the cursor will jump to that beginning (either forwards or backwards). If the cursor is already at that position, it will jump to the true beginning of the line.
#+BEGIN_SRC conf
set smarthome
#+END_SRC
** Search
:PROPERTIES:
:CUSTOM_ID: Configuration-Search-6e458076
:END:
Do case-unsensitive searches by default.
#+BEGIN_SRC conf
unset casesensitive
#+END_SRC
Do regular-expression searches by default. Regular expressions in =nano= are of the extended type (ERE).
#+BEGIN_SRC conf
set regexp
#+END_SRC
** Visual settings
:PROPERTIES:
:CUSTOM_ID: Configuration-Visual_settings-9952f2ae
:END:
Use bold instead of reverse video for the title bar, status bar, key combos, function tags, line numbers, and selected text. This can be overridden by setting the options =titlecolor=, =statuscolor=, =keycolor=, =functioncolor=, =numbercolor=, and =selectedcolor=.
#+BEGIN_SRC conf
set boldtext
#+END_SRC
Enable soft line wrapping for easier viewing of very long lines.
#+BEGIN_SRC conf
set softwrap
#+END_SRC
When soft line wrapping is enabled, make it wrap lines at blank characters (tabs and spaces) instead of always at the edge of the screen.
#+BEGIN_SRC conf
set atblanks
#+END_SRC
Display line numbers to the left of the text area.
#+BEGIN_SRC conf
set linenumbers
#+END_SRC
Constantly display the cursor position in the status bar. This overrides the option =quickblank=.
#+BEGIN_SRC conf
set constantshow
#+END_SRC
** Whitespace settings
:PROPERTIES:
:CUSTOM_ID: Configuration-Whitespace_settings-8cef9cd7
:END:
Convert typed tabs to spaces. Sue me.
#+BEGIN_SRC conf
set tabstospaces
#+END_SRC
Use a tab size of a certain amount of columns. The value of number must be greater than 0. The default value is 8.
#+BEGIN_SRC conf
set tabsize 2
#+END_SRC
Automatically indent a newly created line to the same number of tabs and/or spaces as the previous line (or as the next line if the previous line is the beginning of a paragraph).
#+BEGIN_SRC conf
set autoindent
#+END_SRC
Remove trailing whitespace from wrapped lines when automatic hard-wrapping occurs or when text is justified.
#+BEGIN_SRC conf
set trimblanks
#+END_SRC
** Included configuration file
:PROPERTIES:
:CUSTOM_ID: Configuration-Included_configuration_file-70b0f35b
:END:
Nano gives the opportunity to include some files located elsewhere. This is why I added [[https://github.com/scopatz/nanorc][this repo]] as a submodule of my dotfiles so I can access a lot of them at the same time. Since the submodule is cloned in =~/.config/nanorc=, we can add only one line to include all of the =.nanorc= files.
#+BEGIN_SRC conf
include ~/.config/nano/nano-syntax/*.nanorc
#+END_SRC

View File

@ -1,858 +0,0 @@
#+TITLE: Polybar config
#+setupfile: ../headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's polybar config" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's polybar config" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the polybar config file of Phundrak" />
#+PROPERTY: header-args :exports none
#+PROPERTY: header-args:emacs-lisp :tangle no :exports none
#+PROPERTY: header-args:conf-windows :tangle ~/.config/polybar/config :noweb yes :exports code :mkdirp yes
* Presentation
:PROPERTIES:
:CUSTOM_ID: Presentation-4e723f32
:END:
#+begin_center
*Before proceeding, be aware that I deprecated this polybar config on August 22nd, 2020, meaning I wont update it anymore unless I use it again some day in the future. I will keep it on my website though.*
#+end_center
Polybar is a desktop utility for displaying various information in form of bars for GNU/Linux systems. It is often used as a replacement for native bars available in window managers, such as i3. In my case, I use two instances of polybar in order to get two bars displayed on each screen. The information displayed is either related to i3 itself, or it is system information, such as CPU or disk usage. More information will be given and explained below.
If you want to learn more about how to configure Polybar, you can go to its [[https://github.com/jaagr/polybar][official repository on Github]].
#+BEGIN_EXPORT latex
Be aware that this PDF documents suffers from a couple of issues with some characters such as emojis. If you wish to see everything correctly, I would suggest you to take a look at the online HTML version of this document.
#+END_EXPORT
* General settings
:PROPERTIES:
:CUSTOM_ID: General_settings-e02fb78c
:END:
Some general settings are available for Polybar, and they are declared under
the ~[settings]~ section.
#+BEGIN_SRC conf-windows
[settings]
#+END_SRC
Only one setting is used in this configuration though: the ability to relauch
polybar on a configuration file rewrite.
#+BEGIN_SRC conf-windows
screenchange-reload = true
#+END_SRC
Some global settings are also available in order to adjust the
~_NET_WM_STRUT_PARTIAL~ top and bottom values:
#+BEGIN_SRC conf-windows
[global/wm]
margin-top = 32
margin-bottom = 22
#+END_SRC
* Colors declaration for polybar
:PROPERTIES:
:CUSTOM_ID: Colors_declaration_for_polybar-75ee0b65
:END:
#+BEGIN_SRC conf-windows :exports none
; -*- mode: conf-windows -*-
#+END_SRC
Like most status bars available, we can declare custom colors to be used in polybar. This part of the configuration file is declared with the following header:
#+BEGIN_SRC conf-windows
[colors]
#+END_SRC
As I use pywal as a color scheme generator based on the color of my wallpaper, I need to tell polybar to fetch the colors it will use from xrdb. If such color cannot be used, other colors will be used as fallback colors. First, lets declare our default background and foreground colors with their alternative option.
#+BEGIN_SRC conf-windows
background = ${xrdb:color1:#50000000}
background-alt = ${xrdb:color2:#444}
foreground = ${xrdb:color7:#dfdfdf}
foreground-alt = ${xrdb:color6:#555}
#+END_SRC
Now, we can also declare our primary and secondary colors.
#+BEGIN_SRC conf-windows
primary = #ffb52a
secondary = #e60053
#+END_SRC
Polybar is also aware of alerts sent by window managers such as i3 when a window opens in an unfocused workspace. For that, lets declare an alert color.
#+BEGIN_SRC conf-windows
alert = #bd2c40
#+END_SRC
* Declaration of the bars
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-a95135a3
:END:
It is possible in i3 to declare as many bars as we wish, and each of these bars will be named. Naming the bar is done in its module declaration like so:
#+BEGIN_SRC conf-windows :tangle no
[bar/nameofthebar]
#+END_SRC
In my configuration, I use two of such bars, one atop of my screen, and one at the bottom.
** Top bar declaration
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-fc0cd977
:END:
As unimaginative as it might seem, I went for a rather explicit name for my bars. The top one is simply named ~top~, as shown below.
#+BEGIN_SRC conf-windows
[bar/top]
#+END_SRC
*** Positioning
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Positioning-2505760c
:END:
We need to set on which screen the bar is to be displayed. Indeed, it is possible to display a bar on only one specific screen if we wish to. Actually, it is even the default behavior of polybar, but as we will see later with the launching script, it is possible to launch bars on multiple outputs at the same time. Here, we simply get the value of the variable ~monitor~ from the launch environment.
#+NAME: monitor-bar
#+BEGIN_SRC conf-windows
monitor = ${env:MONITOR}
#+END_SRC
We have a few position-related variables that need to be set. We can specify whether or not we want our bar at the bottom of the screen —which is the default behavior of polybar—, its width, its height, the radius for the rounding of its corners and whether the bar should be centered or not. In my case, my bars are rather small height-wise, and it occupies most of the width of my screens. There is some gaps between this bar and the border of the screen, but this is due to a border around the bar itself which acts not only on the width of the bar itself, but also on its height.
#+BEGIN_SRC conf-windows
bottom = false
border-size = 5
<<position-bar-top>>
#+END_SRC
#+NAME: position-bar-top
#+BEGIN_SRC conf-windows :exports none :tangle no
width = 100%
height = 22
radius = 10.0
fixed-center = true
#+END_SRC
We also want to add some padding to our bar so our modules are not too close to its edges, especially due to the rounding of the top bar.
#+NAME: padding-bar
#+BEGIN_SRC conf-windows
padding-left = 2
padding-right = 4
#+END_SRC
Each module will have some padding around it, so that modules arent glued together and instead have some room to breathe. The padding on the left is a bit less than the padding on the right for aesthetic reasons.
#+NAME: module-margin-bar
#+BEGIN_SRC conf-windows
module-margin-left = 1
module-margin-right = 2
#+END_SRC
The top bar doesnt include any system tray, so lets disable that.
#+BEGIN_SRC conf-windows
tray-position = none
#+END_SRC
*** Colors and display
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Colors_and_display-30f12652
:END:
As explained above, we declared some global variables when it comes to colors, and this is where they will be used. The bars background will be of the same color as the main background color declared earlier, and the same goes for the foreground.
#+NAME: bar-colors
#+BEGIN_SRC conf-windows
background = ${colors.background}
foreground = ${colors.foreground}
#+END_SRC
If we wanted, we could also declare a default color for the underlines under the various modules that will be included in the bar, but in our case this variable is unused. So we will simply add this commented line as a memento this is possible, but it wont have any effect with this current configuration of polybar. Same goes for the border around the bar, it is a useless variable in this configuration since we want the border to be transparent.
#+NAME: line-border-color
#+BEGIN_SRC conf-windows
line-color = #f00
; border-color = #00000000
#+END_SRC
Although the variable for the default line color is not used, we still have to set the default width of the underline of our modules. By default, their underline will be three pixels thick.
#+NAME: line-size-bar
#+BEGIN_SRC conf-windows
line-size = 3
#+END_SRC
*** Fonts and locale
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Fonts_and_locale-70a25466
:END:
Now we can chose which font fill be used in order to display text in this bar, as well as the locale we want. The locale will be useful for displaying information such as date and time, which is a module we will have in this top bar. First, the declaration of the locale is done like so:
#+NAME: locale-bar
#+BEGIN_SRC conf-windows
locale = ja_JP.UTF-8
#+END_SRC
Now, we can declare the fonts we want to use in Polybar. It is possible to declare several of them, the first one is the one which gets the absolute priority, and the next ones with a larger index are fallback fonts. Font declaration accepts the fontconfig format as well as possible offset[fn:1]. Five fonts are used in my polybar config:
#+NAME: fonts-polybar
| Font | fontconfig | Vertical offset | Why its used |
|--------------+----------------------------------------------------+-----------------+-----------------------|
| Fira Sans | Fira Sans Book:style=Book:pixelsize=10 | 1 | Text display |
| IPA Mincho | IPAMincho:style=regular:pixelsize=6 | 0 | Japanese text display |
| Unifont | unifont:fontformat=truetype:size=6:antialias=false | 0 | Fallback font |
| NotoEmoji | NotoEmoji:style=Book:scale=16 | 0 | Emoji display |
| Siji | Siji:pixelsize=8 | 0 | Symbol display |
| Default font | fixed:pixelsize=8 | 0 | Fallback font |
#+NAME: font-ws-config
#+HEADER: :var text="font"
#+BEGIN_SRC emacs-lisp :var table=fonts-polybar[,1:2] :cache yes
(setq counter 0)
(mapconcat (lambda (font)
(setq counter (+ 1 counter))
(format "%s-%d = %s;%s"
text
(- counter 1)
(nth 0 font)
(nth 1 font)))
table
"\n")
#+END_SRC
#+RESULTS[53fd99d75f6b08e96288fd2a62b455d7ef8b1754]: font-ws-config
: font-0 = Fira Sans Book:style=Book:pixelsize=10;1
: font-1 = IPAMincho:style=regular:pixelsize=6;0
: font-2 = unifont:fontformat=truetype:size=6:antialias=false;0
: font-3 = NotoEmoji:style=Book:scale=16;0
: font-4 = Siji:pixelsize=8;0
: font-5 = fixed:pixelsize=8;0
Heres the font configuration:
#+BEGIN_SRC conf-windows
<<font-ws-config(text="font",table=fonts-polybar)>>
#+END_SRC
Note that only Fira Sans get a small offset due to the size of the font and the height of the bar itself.
*** Modules
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Modules-18979638
:END:
Finally, arguably one of the most important parts of our bar configuration: the module selection. Modules can be positioned in three different parts of our bar: to the right, in middle or to the left. On the left, we want our workspace indicator for i3. In the middle, well get the title of the focused window, and to the left well have the date and time.
#+NAME: modules-generate
#+BEGIN_SRC emacs-lisp :var table=top-modules :results value :cache yes
(setq right '()
center '()
left '())
(dolist (module table)
(let* ((module-name (nth 0 module))
(module-layout (nth 1 module)))
(message "%S" module-layout)
(add-to-list (cond
((string= "left" module-layout) 'left)
((string= "center" module-layout) 'center)
(t 'right))
module-name)))
(concat (concat "modules-left = "
(mapconcat #'identity left " ")
"\n")
(concat "modules-center = "
(mapconcat #'identity center " ")
"\n")
(concat "modules-right = "
(mapconcat #'identity right " ")
"\n"))
#+END_SRC
#+RESULTS[90b932dc0fd32501e1513f14059b92de09a7b59e]: modules-generate
: modules-left = i3
: modules-center = xwindow
: modules-right = date
Here is the list of modules used:
#+NAME: top-modules
| Module name | Position | Brief description |
|-------------+----------+----------------------------|
| i3 | left | i3 workspace indicator |
| xwindow | center | Name of the focused window |
| date | right | Date and time |
#+BEGIN_SRC conf-windows :cache yes
<<modules-generate(table=top-modules)>>
#+END_SRC
Each module will be described in details later in this document.
** Bottom bar declaration
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-8504b5ec
:END:
As described above, we will once again have to declare our bar with an equally unimaginative but explicit name.
#+BEGIN_SRC conf-windows
[bar/bottom]
#+END_SRC
*** Positioning
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Positioning-b1883756
:END:
The variables are the same as above, but two of them will be slightly modified:
#+BEGIN_SRC conf-windows
bottom = true
border-size = 0
<<position-bar-bottom>>
#+END_SRC
#+NAME: position-bar-bottom
#+BEGIN_SRC conf-windows :exports none :tangle no
width = 100%
height = 22
radius = 0.0
fixed-center = true
#+END_SRC
When it comes to the bottom bar, I prefer to have it fit my outputs, without any margin around it. And of course, I have to declare it as being at the bottom of the screen, hence these modifications. As regards the padding of our modules, their own margins, and the screen output, they arent modified.
#+BEGIN_SRC conf-windows
<<padding-bar>>
<<module-margin-bar>>
<<monitor-bar>>
#+END_SRC
However, we do display the system tray on this bottom bar at its right. It has no padding and it is not detached from the bar (this allows the bar to be displayed under the icons of the system tray), and their maximum size was chosen so they are well visible without being too big.
#+BEGIN_SRC conf-windows
tray-position = right
tray-padding = 0
tray-detached = false
tray-maxsize = 15
#+END_SRC
*** Colors and display
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Colors_and_display-854aae82
:END:
Nothing changes from the top bar, all the variables stay with the same values. See [[#Declaration_of_the_bars-Bottom_bar_declaration-Colors_and_display-854aae82][Colors and display]] of the top bar for more information.
#+BEGIN_SRC conf-windows
<<bar-colors>>
<<line-border-color>>
<<line-size-bar>>
#+END_SRC
*** Fonts and locale
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Fonts_and_locale-67459d62
:END:
Again, nothing changes from the top bar, so for more info on whats going on, see [[#Declaration_of_the_bars-Top_bar_declaration-Fonts_and_locale-70a25466][Fonts and locale]] of the top bar.
#+BEGIN_SRC conf-windows
<<locale-bar>>
<<font-ws-config(text="font",table=fonts-polybar)>>
#+END_SRC
*** Modules
:PROPERTIES:
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Modules-702b21fc
:END:
Now, we can get to something interesting again: modules. This bar has a lot more modules than the top bar. Here is the list of the modules we have on the bottom bar:
#+NAME: table-modules-bottom
| Module name | Position | Brief description |
|----------------+----------+---------------------------------|
| mpd | left | MPD status indicator |
| filesystem | right | Free storage in our filesystem |
| wlan | right | Name of the active WiFi network |
| eth | right | Local address on Ethernet |
| volume | right | System volume |
| backlight-acpi | right | Screen backlight |
| cpu | right | CPU usage |
| memory | right | RAM usage |
| temperature | right | CPU temperature |
| custom-battery | right | Battery usage |
Heres the corresponding configuration:
#+ATTR_LATEX: :options breaklines
#+BEGIN_SRC conf-windows
<<modules-generate(table=table-modules-bottom)>>
#+END_SRC
All these modules will be explained below.
As you may have noticed, no modules will be displayed in the middle of this bar.
* Modules
:PROPERTIES:
:CUSTOM_ID: Modules-2e1a51bc
:END:
Before we begin to describe the different modules, I would like to point out something that will be repeated multiple times if I dont talk about it right now: for each module, it is possible to declare the foreground and background color of the prefix of the modules, as well as the underline color and the padding of the module. I like these parameters to be rather consistent, so the code block you will see below will often be reused. The colors refer to the colors declared earlier, and the padding is minimal.
#+NAME: mod-prefix-col
#+BEGIN_SRC conf-windows :tangle no
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}
format-underline = ${colors.secondary}
format-padding = 1
#+END_SRC
** Hardware
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-26426ebd
:END:
*** Battery
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Battery-299f2e42
:END:
This module allows the user to get a battery widget among the polybar modules that will also send a notification to the user if the battery level drops below a certain value. This module relies on ~polybar-another-battery~ ([[https://github.com/drdeimos/polybar_another_battery][link]]) and its generated binary ~polybar-ab~ which should be in the ~$PATH~.
The first line of the module declaration lets the user name the module however they want. In this case, the name is ~custom-battery~.
#+BEGIN_SRC conf-windows
[module/custom-battery]
#+END_SRC
Since it is not a core module, we have to declare it as a custom script so polybar knows what to do with it.
#+BEGIN_SRC conf-windows
type = custom/script
#+END_SRC
We now can specify the script execution, and whether or not the script will be continuously outputting something. In our case, the answer to this last question is yes.
#+BEGIN_SRC conf-windows
exec = polybar-ab -polybar -thr 10
tail = true
#+END_SRC
The ~-thr 10~ specifies the threshold for polybar-ab at which it should warn the user about the battery level of the computer.
Of course, users on desktop computers wont need this module which is aimed at laptop users. Feel free to remove it if you do not need it.
*** Filesystem
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Filesystem-26f0a3c6
:END:
This module allows to display information about our filesystem, including (and this is what I use this module for) displaying the used space and remaining space on different mount points. This module is an internal module to polybar, so lets declare it as such:
#+BEGIN_SRC conf-windows
[module/filesystem]
type = internal/fs
#+END_SRC
We can specify how often the filesystem is to be checked with the variable ~interval~. I prefer it not to check it too often in order to not ping too often my drives, but I want it to be often enough so it is somewhat responsive. This is why I settled on a 20 seconds interval.
#+BEGIN_SRC conf-windows
interval = 20
#+END_SRC
We now have to indicate where our different filesystems are mounted. In the case of my main computer /Marpa/, I have two partitions, the root partition and the home partition. But on my travel laptop, I only have the root partition, hence the usage of the below Elisp code that determines based on the computer it is running whether or not the second mount point to my home partition should be included.
#+NAME: include-home-partition
#+BEGIN_SRC emacs-lisp :tangle no :exports code
(if (string= system-name "Marpa")
"mount-1 = /home")
#+END_SRC
#+BEGIN_SRC conf-windows
mount-0 = /
<<include-home-partition()>>
#+END_SRC
Now we can set the format of our module. There are two mains formats, one for mounted and one for unmounted mountpoints. For both, well simply use their label.
#+BEGIN_SRC conf-windows
format-mounted = <label-mounted>
format-unmounted = <label-unmounted>
#+END_SRC
When it comes to the mounted partition, we want to display the name of the mountpoint and how used it is, both in terms of gigabytes and percentage.
#+BEGIN_SRC conf-windows
label-mounted = 💽 %mountpoint%: %used%/%total% (%percentage_used%%)
label-mounted-foreground = ${colors.foreground}
label-mounted-underline = ${colors.secondary}
#+END_SRC
If the volume is unmounted (which should be worrying considering the mountpoints chosen), then well simply have a message telling us about that, and the foreground color will use the alternative foreground color described earlier.
#+BEGIN_SRC conf-windows
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.foreground-alt}
#+END_SRC
*** Xbacklight
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Xbacklight-2901c504
:END:
This module is used in order to display the level of brightness of a screen. It is not used by itself, but rather by other modules, such as [[#Modules-Hardware-ACPI_backlight-9eaeaa79][ACPI backlight]]. First of all, this module is an internal module for xbacklight. It will also display the brightness percentage, prefixed by a sun emoji. Lastly, it will be underlined by a green line.
#+BEGIN_SRC conf-windows
[module/xbacklight]
type = internal/xbacklight
format = <label>
label = %percentage%%
format-prefix = "🌞 "
format-underline = #9f78e1
#+END_SRC
*** ACPI backlight
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-ACPI_backlight-9eaeaa79
:END:
This module indicates the backlight level of a screen thanks to the ACPI Linux module. There isnt much to tell about the module itself other than it inherits the module described above, [[#Modules-Hardware-Xbacklight-2901c504][xbacklight]]. It also sets which driver should be used, in this case the ~intel_backlight~ driver.
#+BEGIN_SRC conf-windows
[module/backlight-acpi]
inherit = module/xbacklight
type = internal/backlight
card = intel_backlight
#+END_SRC
*** CPU
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-CPU-365dcb98
:END:
This module indicates how much of the CPU is being used. As shown below, I made it so we can see the load on each core. The first thing to do is to declare the module as an internal module dedicated to the CPU.
#+BEGIN_SRC conf-windows
[module/cpu]
type = internal/cpu
#+END_SRC
Now, we can set the refresh rate in seconds of the module. I like it at two seconds:
#+BEGIN_SRC conf-windows
interval = 2
#+END_SRC
Now, lets declare what will be displayed. The format will be a computer emoji followed by ramp characters.
#+BEGIN_SRC conf-windows
format = <label> <ramp-coreload>
format-prefix = "💻 "
label = %percentage%%
ramp-coreload-0 = ▁
ramp-coreload-1 = ▂
ramp-coreload-2 = ▃
ramp-coreload-3 = ▄
ramp-coreload-4 = ▅
ramp-coreload-5 = ▆
ramp-coreload-6 = ▇
ramp-coreload-7 = █
#+END_SRC
Finally, this module will be underlined in red.
#+BEGIN_SRC conf-windows
format-underline = #f90000
#+END_SRC
*** Memory
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Memory-2f2f9475
:END:
Similarly to the CPU module, it is possible for Polybar to display the RAM load of the computer. As above, lets declare this module as an internal module to Polybar:
#+BEGIN_SRC conf-windows
[module/memory]
type = internal/memory
#+END_SRC
As the CPU module still, the refresh rate will be of two seconds.
#+BEGIN_SRC conf-windows
interval = 2
#+END_SRC
Its format will be the percentage of used RAM, prefixed by a disk emoji.
#+BEGIN_SRC conf-windows
format = <label>
format-prefix = "💿 "
label = %gb_used%
#+END_SRC
Lastly, it will be underlined in green.
#+BEGIN_SRC conf-windows
format-underline = #4bffdc
#+END_SRC
*** Wlan
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Wlan-3457f36b
:END:
It is possible for Polybar to display the name of the current WiFi network the computer is connected to. For that, we first need to declare the Wlan module as an internal module of Polybar.
#+BEGIN_SRC conf-windows
[module/wlan]
type = internal/network
#+END_SRC
Now, we should set the name of the interface. As this depends on the hardware I am using, I am going to rely on the machines hostname and on some Elisp code to get this setting right.
#+NAME: name-wlan-interface
#+BEGIN_SRC emacs-lisp :exports code :tangle no
(cond ((string= system-name "Marpa") "wlp8s0")
((string= system-name "gampo") "wlp3s0"))
#+END_SRC
#+BEGIN_SRC conf-windows
interface = <<name-wlan-interface()>>
#+END_SRC
The name of the current WiFi network will be refreshed every three seconds.
#+BEGIN_SRC conf-windows
interval = 3.0
#+END_SRC
The format of the module when connected to a network will the the display of the antenna emoji, followed by the name of the network. When disconnected, the module will simply be empty.
#+BEGIN_SRC conf-windows
format-connected = <label-connected>
format-connected-prefix = "📶 "
label-connected = %essid%
#+END_SRC
*** Ethernet
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Ethernet-dc749304
:END:
Just like any other module, the ethernet module has to be declared as an internal module.
#+BEGIN_SRC conf-windows
[module/eth]
type = internal/network
#+END_SRC
And just like the Wlan module, it requires an interface which can vary depending on the machine I am using, hence this piece of Elisp:
#+NAME: name-eth-interface
#+BEGIN_SRC emacs-lisp :exports code :tangle no
(cond ((string= system-name "Marpa") "enp9s0")
((string= system-name "gampo") "enp0s25"))
#+END_SRC
#+BEGIN_SRC conf-windows
interface = <<name-eth-interface()>>
#+END_SRC
The format of this module will be the local address of the computer on the network, and it will be prefixed by a desktop computer emoji. Meanwhile, when disconnected, the module wont be visible.
#+BEGIN_SRC conf-windows
format-connected = <<label-connected>>
format-connected-prefix = "🖥 "
label-connected = %local_ip%
format-disconnected =
#+END_SRC
The module will be underlined in green.
#+BEGIN_SRC conf-windows
format-connected-underline = #55aa55
#+END_SRC
*** Volume
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Volume-ebf9f7a4
:END:
The volume module in Polybar is linked to its internal bindings to ALSA. Lets declare it accordingly.
#+BEGIN_SRC conf-windows
[module/volume]
type = internal/alsa
#+END_SRC
Its format is quite simple: if the audio is not muted, it is then prefixed with a speaker emoji, followed by the volume percentage.
#+BEGIN_SRC conf-windows
format-volume = <label-volume>
format-volume-prefix = "🔈 "
label-volume = %percentage%%
#+END_SRC
If the audio is muted, then the only thing the user will see is the muted speaker emoji followed by the text “muted”.
#+BEGIN_SRC conf-windows
format-muted-prefix = "🔇 "
label-muted = muted
#+END_SRC
In any case, it will be underlined in green.
#+BEGIN_SRC conf-windows
format-volume-underline = #55aa55
#+END_SRC
*** Temperature
:PROPERTIES:
:CUSTOM_ID: Modules-Hardware-Temperature-a9f08cde
:END:
The temperature module checks the temperature of the CPU, and warns the user above a certain threshold of heat, in my case if my CPU is above 60°C.
#+BEGIN_SRC conf-windows
[module/temperature]
type = internal/temperature
thermal-zone = 0
warn-temperature = 60
#+END_SRC
The format of the module is the thermometer emoji followed by the temperature of the CPU. If the CPU becomes too hot, the text will change color for the secondary foreground color.
#+BEGIN_SRC conf-windows
format = <label>
format-underline = #f50a4d
format-warn = <label-warn>
format-warn-underline = ${self.format-underline}
format-prefix = "🌡 "
format-warn-prefix = "🌡 "
label = %temperature-c%
label-warn = %temperature-c%
label-warn-foreground = ${colors.secondary}
#+END_SRC
** Software
:PROPERTIES:
:CUSTOM_ID: Modules-Software-f6529189
:END:
*** Window title
:PROPERTIES:
:CUSTOM_ID: Modules-Software-Window_title-3f931641
:END:
This modules aim is to simply provide the name of the currently focused window given by Xorg. This module is an internal module to polybar, that is to say it is built-in, and is of the type ~xwindow~. So, lets declare the module accordingly, including the piece of common code declared at the beginning of the chapter:
#+BEGIN_SRC conf-windows
[module/xwindow]
type = internal/xwindow
<<mod-prefix-col>>
#+END_SRC
Now we can take care of the label, which is the actual text that will be displayed. In our case, we want the label to be the title of the current X window, hence the value of ~label~, and we dont want it to be too long, though Im not sure Ive often seen window titles longer than 70 characters.
#+BEGIN_SRC conf-windows
label = %title%
label-maxlen = 70
#+END_SRC
*** i3
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-db36ddfb
:END:
Now comes the module for i3 interaction. Thanks to this module, it is possible to show which workspaces are active and focused, and it is possible to change workspaces by clicking on the ones displayed in the bar. First, lets declare it; it is an internal module by the way.
#+BEGIN_SRC conf-windows
[module/i3]
type = internal/i3
#+END_SRC
Now, lets display only the workspaces that are on the current output. This means if a workspace is either inactive or on another screen or output, it wont be displayed.
#+BEGIN_SRC conf-windows
pin-workspaces = true
#+END_SRC
We also want our workspaces to be sorted by number rather than by output.
#+BEGIN_SRC conf-windows
index-sort = true
#+END_SRC
I dont want to be able to scroll through the workspaces when my mouse is hovering the module: when it happens, most of the time it was done accidentally. So lets deactivate that. However, I sometimes like to click on them to switch from one another, so well keep that activated.
#+BEGIN_SRC conf-windows
enable-scroll = false
wrapping-scroll = false
reverse-scroll = false
enable-click = true
#+END_SRC
This parameters splits the workspaces name on ~:~. Lets deactivate that.
#+BEGIN_SRC conf-windows
strip-wsnumbers = false
#+END_SRC
An on the topic of workspaces name, ~fuzzy-match~ allows the user to use fuzzy search for workspaces name when we will be applying custom names below. Not really useful since I only use the default workspaces name, but its good to have it enabled by default.
#+BEGIN_SRC conf-windows
fuzzy-match = true
#+END_SRC
The label format is described first by its label, but also by one of its three possible modes: focused, visible or unfocused. These will be discussed later, but for now lets simply set our format.
#+begin_src conf-windows
format = <label-state> <label-mode>
#+end_src
We also wand to set the label mode to be whichever mode the workspace described by polybar is in. This label will also have a padding of 2 pixels, and the text will be written in white.
#+begin_src conf-windows
label-mode = %mode%
label-mode-padding = 2
label-mode-foreground = #000
#+end_src
**** Workspace icons
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-Workspace_icons-89237191
:END:
Now, lets name our workspaces. We can give them whatever name we want them to have, but I just like the aesthetics of Japanese characters, so lets go with the kanji equivalent of the number of the workspaces.
#+NAME: ws-names
| workspace number | name |
|------------------+------|
| 1 | 一 |
| 2 | 二 |
| 3 | 三 |
| 4 | 四 |
| 5 | 五 |
| 6 | 六 |
| 7 | 七 |
| 8 | 八 |
| 9 | 九 |
| 0 | 十 |
Here are the corresponding configuration lines:
#+BEGIN_SRC conf-windows
<<font-ws-config(text="ws",table=ws-names)>>
#+END_SRC
In case we create a workspace which isnt named from ~0~ to ~9~, I want it to appear as is.
#+begin_src conf-windows
ws-icon-default = %index%
#+end_src
**** Focused workspaces
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-Focused_workspaces-0ca3b93d
:END:
Now we can define the label itself. First, we will need to define the label when the workspace is focused. Well simply take the alternative background for the focused label, and the underline will be defined from Xrdbs 8th color, with yellow as the fallback color. It will also have a two pixels padding. The text itself will be the dynamic icons declared above.
#+begin_src conf-windows
label-focused = %icon%
label-focused-background = ${colors.background-alt}
label-focused-underline = ${xrdb:color8:#ffff00}
label-focused-padding = 2
#+end_src
**** Visible workspaces
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-Visible_workspaces-4be78e50
:END:
The ~visible~ label is related to the ~focused~ labels since it is describing workspaces that can be seen, but are not currently focused, i.e. a workspace that appears on another screen than the one currently used so it is visible, but it isnt focused. The difference with the ~unfocused~ workspaces is that the latter are neither focused nor visible. As you can see, we are simply using all of the declarations from above for the focused labels so we can ensure they appear the same way the focused labels do.
#+begin_src conf-windows
label-visible = ${self.label-focused}
label-visible-background = ${self.label-focused-background}
label-visible-underline = ${self.label-focused-underline}
label-visible-padding = ${self.label-focused-padding}
#+end_src
**** Unfocused workspaces
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-Unfocused_workspaces-13063042
:END:
When it comes to the unfocused label, there wont be any custom background or underline, so well just copy the two remaining lines from the focused labels for unfocused labels.
#+begin_src conf-windows
label-unfocused = %icon%
label-unfocused-padding = 2
#+end_src
**** Urgent workspaces
:PROPERTIES:
:CUSTOM_ID: Modules-Software-i3-Urgent_workspaces-ed2bd93c
:END:
Lastly, we get our urgent workspaces: workspaces in which most of the time its just a popup that appeared or a software that finally launched itself while working on something else on another workspace. To make it a bit more unique, lets declare its background as being the color 0 from xrdb, with some dark red as the fallback color. And as the other labels, the text will be the icon and it will have a two pixels padding.
#+begin_src conf-windows
label-urgent = %icon%
label-urgent-background = ${xrdb:color0:#bd2c40}
label-urgent-padding = 2
#+end_src
*** Mpd
:PROPERTIES:
:CUSTOM_ID: Modules-Software-Mpd-4b1ec78e
:END:
Mpd is a music server for GNU/Linux systems that interfaces will several front-ends, including ncmpcpp (the main one I use), ncmpcpp and mpc. It also interfaces with polybar thanks to some built in commands.
First, lets declare our module as an internal module.
#+BEGIN_SRC conf-windows
[module/mpd]
type = internal/mpd
#+END_SRC
The next thing we want to do is set the label for the module: we will display both the title and the name of the artist of the song playing. The maximum length will be 70 characters.
#+BEGIN_SRC conf-windows
label-song = %title% - %artist%
label-song-maxlen = 70
label-song-ellipsis = true
#+END_SRC
While Mpd is online, the format of the module should be the control icons and then the song label.
#+BEGIN_SRC conf-windows
format-online = <icon-prev> <toggle> <icon-next> <label-song>
icon-prev = ⏭
icon-stop = ⏹
icon-play = ▶
icon-pause = ⏸
icon-next = ⏭
#+END_SRC
If Mpd is offline, then I would like to display a short messages that tells the user so.
#+BEGIN_SRC conf-windows
format-offline = <label-offline>
label-offline = 🎵 mpd is offline
#+END_SRC
*** Date
:PROPERTIES:
:CUSTOM_ID: Modules-Software-Date-f7338626
:END:
This module is really simple: it gives the current date. It is an internal module, and as declared below, it updates every second:
#+BEGIN_SRC conf-windows
[module/date]
type = internal/date
interval = 1
#+END_SRC
The main date and time format is the standard one, following the ISO-8601 standard.
#+BEGIN_SRC conf-windows
date = %Y-%m-%d
time = %H-%M-%S
#+END_SRC
It also has an alternative format which I occasionally use, which displays the date and time in the Japanese format.
#+BEGIN_SRC conf-windows
date-alt = %A %d, %B
time-alt = %H:%M:%S
#+END_SRC
The format is quite simple: a clock emoji preceding the date and time.
#+BEGIN_SRC conf-windows
format-prefix = "🕑 "
label = %date% %time%
#+END_SRC
This module is underlined in blue:
#+BEGIN_SRC conf-windows
format-underline = #0a6cf5
#+END_SRC
* Footnotes
:PROPERTIES:
:CUSTOM_ID: Footnotes-62d05520
:END:
[fn:1] [[https://github.com/polybar/polybar/wiki/Fonts][https://github.com/polybar/polybar/wiki/Fonts]]
# LocalWords: Siji pixelsize Fira Mincho IPAMincho Unifont unifont fontformat
# LocalWords: truetype antialias xwindow wlan eth acpi cpu

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
/home/phundrak/LICENSE.md

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,56 +0,0 @@
#+title: Ncmpcpp Configuration
#+setupfile: ../headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundraks ncmpcpp Configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundraks ncmpcpp Configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the ncmpcpp configuration of Phundrak" />
#+PROPERTY: header-args :tangle ~/.config/ncmpcpp/config2 :exports code
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-3e61ecfc
:END:
Ncmpcpp is a TUI front-end for MPD, with an UI very similar to Ncmpc. This is
my main MPD front-end after my i3 shortcuts. You can find below some
screenshots of how my current ncmpcpp configuration looks like.
[[file:img/ncmpcpp-queue.png]]
[[file:img/ncmpcpp-directory.png]]
[[file:img/ncmpcpp-visualizer.png]]
* Core Ncmpcpp settings
:PROPERTIES:
:CUSTOM_ID: Core_Ncmpcpp_settings-8cacae18
:END:
#+BEGIN_SRC conf :exports none
# -*- mode: conf -*-
#+END_SRC
** Directories
:PROPERTIES:
:CUSTOM_ID: Core_Ncmpcpp_settings-Directories-28092c92
:END:
Ncmpcpp has two vital directories: the lyrics directory, and its own configuration directory. The configuration for ncmpcpp is generally either in ~$HOME/.ncmpcpp/~ or in ~$XDG_CONFIG_HOME/ncmpcpp/~.
#+BEGIN_SRC conf
ncmpcpp_directory = ~/.config/ncmpcpp
#+END_SRC
When it comes to the lyrics, be sure to set the directory to the same directory pointed at by Mpd.
#+BEGIN_SRC conf
lyrics_directory = ~/.lyrics
#+END_SRC
** MPD
:PROPERTIES:
:CUSTOM_ID: Core_Ncmpcpp_settings-MPD-a2a7452e
:END:
These settings tell ncmpcpp how to communicate with Mpd. Once again, be sure to follow your own MPD settings. In my case, I am connecting to my local MPD server, hence the ~localhost~ value of the variable below, and I did not change the default port of MPD. My music is located at =~/Music=, and ncmpcpp should connect pretty much immediately, although I allow a five seconds timeout before ncmpcpp treats it as an error. Also, no crossfade please.
#+BEGIN_SRC conf
mpd_host = localhost
mpd_port = 6600
mpd_music_dir = ~/Music
mpd_connection_timeout = 5
mpd_crossfade_time = 0
#+END_SRC

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,798 +0,0 @@
#+title: Desktop settings
#+setupfile: headers
#+options: unique-id:t
#+html_head: <meta name="description" content="Phundraks Emacs Configuration" />
#+html_head: <meta property="og:title" content="Phundraks Emacs Configuration" />
#+html_head: <meta property="og:description" content="Phundraks Emacs Configuration Detailed" />
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/desktop.el
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
#+property: header-args:lisp :mkdirp :tangle ~/.stumpwm.d/desktop.lisp :noweb yes
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-w831x4a0l9j0
:END:
Many settings formerly present in this websites index are related to
my desktop settings, while some others are not.
# Also, since I switched to StumpWM, many of my keybinds from Emacs need
# to be kept up to date with my StumpWM keybinds, and /vice versa/. This
# document aims to regroup all settings related to the desktop in order
# to have an easier time managing them.
* Common Emacs and StumpWM settings :noexport:
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-neseiaa0l9j0
:END:
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:
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-ngnclyk0l9j0
:END:
*** Elisp
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-Elisp-oeqclyk0l9j0
:END:
#+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
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-Lisp-qntclyk0l9j0
:END:
#+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
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Frames-Management-5zhea5c0l9j0
:END:
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
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Window-Management-8kt59fa0l9j0
:END:
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
:PROPERTIES:
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Media-Control-r56g2hc0l9j0
:END:
#+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
:PROPERTIES:
:CUSTOM_ID: Theme-and-graphical-tweaks-ukp6gbc0l9j0
:END:
** GTK Settings
:PROPERTIES:
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-2307gbc0l9j0
:END:
*** GTK2
:PROPERTIES:
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-fq77gbc0l9j0
:END:
**** General configuration
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-2.0/gtkrc
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-General-configuration-xod7gbc0l9j0
:END:
This file is tangled at ~$HOME/.config/gtk-2.0/gtkrc~. This is an
equivalent for the GTK3 configuration file you will see below, and it
shares most of its settings. First, lets select the Nordic theme for
GTK2. Lets also set the icon theme.
#+BEGIN_SRC conf-unix
# -*- mode: unix-config -*-
gtk-theme-name="Nordic"
gtk-icon-theme-name="Flat-Remix-Dark"
#+END_SRC
#+BEGIN_SRC conf-unix
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle="hintslight"
#+END_SRC
This changes the shortcuts in menu, lets also make the menus snappier.
#+BEGIN_SRC conf-unix
gtk-can-change-accels=1
gtk-menu-bar-popup-delay=0
gtk-menu-popdown-delay=0
gtk-menu-popup-delay=0
#+END_SRC
**** Filechooser
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-2.0/gtkfilechooser.ini
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-Filechooser-nmh7gbc0l9j0
:END:
#+BEGIN_SRC conf-unix
[Filechooser Settings]
#+END_SRC
The first option alows me to open the file chooser in the current working
directory:
#+BEGIN_SRC conf-unix
StartupMode=cwd
#+END_SRC
Next, setting the location mode to ~path-bar~ will show the path as buttons that
can be clicked rather than the full path.
#+BEGIN_SRC conf-unix
LocationMode=path-bar
#+END_SRC
With this configuration, by default we wont see hidden files.
#+BEGIN_SRC conf-unix
ShowHidden=true
#+END_SRC
And we'll also see the size of the visible files.
#+BEGIN_SRC conf-unix
ShowSizeColumn=true
#+END_SRC
Now, lets choose the geometry of our file picker. These two first lines set
where the file picker appears:
#+BEGIN_SRC conf-unix
GeometryX=566
GeometryY=202
#+END_SRC
And these two describe the size of the window:
#+BEGIN_SRC conf-unix
GeometryWidth=800
GeometryHeight=400
#+END_SRC
With these two lines, we set how our files are sorted: by name, and in the
ascending order.
#+BEGIN_SRC conf-unix
SortColumn=name
SortOrder=ascending
#+END_SRC
Our default view mode is a list of files:
#+BEGIN_SRC conf-unix
ViewMode=list-view
#+END_SRC
And finally, setting our icon view scale to ~-1~ sets the icon view to the max
size.
#+BEGIN_SRC conf-unix
IconViewScale=-1
#+END_SRC
*** GTK3
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-3.0/settings.ini
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK3-ojl7gbc0l9j0
:END:
The following file helps me to choose the aspect of various GTK+ 3
software, including their theme and icons. First, lets declare the
header:
#+BEGIN_SRC conf-unix
[Settings]
#+END_SRC
Now, lets hint to GTK that I prefer dark themes. This can have an influence
also on some websites that can detect this preference and therefore set their
own theme to dark by themselves.
#+BEGIN_SRC conf-unix
gtk-application-prefer-dark-theme = true
#+END_SRC
Next, the icon theme is the Flat Remix Dark icon theme:
#+BEGIN_SRC conf-unix
gtk-icon-theme-name = Nordzy
#+END_SRC
Now, the general theme for GTK3 is Nordic.
#+BEGIN_SRC conf-unix
gtk-theme-name = Nordic
#+END_SRC
#+BEGIN_SRC conf-unix
gtk-can-change-accels=1
gtk-menu-bar-popup-delay=0
gtk-menu-popdown-delay=0
gtk-menu-popup-delay=0
#+END_SRC
#+BEGIN_SRC conf-unix
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
# gtk-xft-rgba=rgb
#+END_SRC
Since window decorations are handled by my WMs, I will leave this variable
empty.
#+BEGIN_SRC conf-unix
gtk-decoration-layout=
#+END_SRC
** Picom (Compton)
:PROPERTIES:
:CUSTOM_ID: Theme-and-graphical-tweaks-Picom-Compton-uko7gbc0l9j0
:END:
Picom is a standalone compositor for Xorg, and the successor to
Compton, itself successor to xcompmgr-dana, itself a fork of xcompmgr.
You can find my Picom configuration [[file:picom.org][here]].
** Xresources
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
:CUSTOM_ID: Theme-and-graphical-tweaks-Xresources-4dr7gbc0l9j0
:END:
The main body in my Xresources declaration is the declaration of my
color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]].
#+BEGIN_SRC conf
#define nord0 #2E3440
#define nord1 #3B4252
#define nord2 #434C5E
#define nord3 #4C566A
#define nord4 #D8DEE9
#define nord5 #E5E9F0
#define nord6 #ECEFF4
#define nord7 #8FBCBB
#define nord8 #88C0D0
#define nord9 #81A1C1
#define nord10 #5E81AC
#define nord11 #BF616A
#define nord12 #D08770
#define nord13 #EBCB8B
#define nord14 #A3BE8C
#define nord15 #B48EAD
,*.foreground: nord4
,*.background: nord0
,*.cursorColor: nord4
,*fading: 35
,*fadeColor: nord3
,*.color0: nord1
,*.color1: nord11
,*.color2: nord14
,*.color3: nord13
,*.color4: nord9
,*.color5: nord15
,*.color6: nord8
,*.color7: nord5
,*.color8: nord3
,*.color9: nord11
,*.color10: nord14
,*.color11: nord13
,*.color12: nord9
,*.color13: nord15
,*.color14: nord7
,*.color15: nord6
#+END_SRC
* Gpg configuration
:PROPERTIES:
:CUSTOM_ID: Gpg-configuration-6i2ip6l0m9j0
:END:
#+begin_src conf :tangle ~/.gnupg/gpg.conf
keyserver hkp://keys.gnupg.net
keyserver-options auto-key-retrieve
keyserver hkp://pgp.mit.edu:11371
#+end_src
* Email signature
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.signature
:CUSTOM_ID: Email-signature-jnn75ac0l9j0
:END:
This file gets inserted automatically at the end of my emails.
#+BEGIN_SRC text
Lucien “Phundrak” Cartier-Tilet
https://phundrak.com (Français)
https://phundrak.com/en (English)
Sent from GNU/Emacs
#+END_SRC
* ~.desktop~ files for custom applications
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-cksiyhg0m9j0
:END:
Some software I use are not packaged (yet) on my system. Therefore, in
order to make them available in ~rofi~, I need to write a ~.desktop~ file
to launch them.
** Emacs
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-Emacs-6e9actg0m9j0
:END:
Emacs does have a default ~.desktop~ file, but I want to override it to
just “open with Emacs” from other software (such as Nemo) and it will
open with ~emacsclient~ instead of just =emacs=.
#+begin_src conf-desktop :tangle ~/.local/share/applications/emacs.desktop
[Desktop Entry]
Name=Emacs
GenericName=Text Editor
Comment=Edit text
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=emacsclient -c %F
Icon=emacs
Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupWMClass=Emacs
Keywords=Text;Editor;
#+end_src
I also have ~mu4e.desktop~ which is used to set my default email client.
It relies on ~emacsmail~ defined in [[file:bin.org::#Emacsmail-afffb7cd][this document]].
#+begin_src conf-desktop :tangle ~/.local/share/applications/mu4e.desktop
[Desktop Entry]
Name=Mu4e
GenericName=Mu4e
Comment=Maildir Utils for Emacs
MimeType=x-scheme-handler/mailto;
Exec=/home/phundrak/.local/bin/emacsmail %U
Icon=emacs
Type=Application
Terminal=false
Categories=Network;Email;TextEditor
StartupWMClass=Gnus
Keywords=Text;Editor;
#+end_src
Then I also have ~org-protocol.desktop~ that helps capture elements from
other software, mainly web pages from Firefox through the [[https://github.com/sprig/org-capture-extension][org-capture
extension]].
#+begin_src conf-desktop :tangle ~/.local/share/applications/org-protocol.desktop
[Desktop Entry]
Name=org-protocol
Exec=emacsclient %u
Type=Application
Terminal=false
Categories=System;
MimeType=x-scheme-handler/org-protocol;
#+end_src
** FlowScape
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-FlowScape-7zelglg0m9j0
:END:
[[https://pixelforest.itch.io/flowscape][FlowScape]] is a nice 3D compositing software I sometimes use to create
landscapes. I always install it in =~/.local/opt/Flowscape=, so the
~.desktop~ file is relatively straightforward.
#+begin_src conf-desktop :tangle ~/.local/share/applications/FlowScape.desktop
[Desktop Entry]
Version=1.5
Name=FlowScape
Comment=Create gorgeous 3D landscapes with ease.
Exec=/usr/bin/prime-run /home/phundrak/.local/opt/FlowScape/FlowScape.x86_64
Path=/home/phundrak/.local/opt/FlowScape
Icon=/home/phundrak/.local/opt/FlowScape/icon.jpg
Terminal=false
Type=Application
Categories=Graphics
#+end_src
** macOS
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-macOS-yb1dmyg0m9j0
:END:
You did not read wrong! Yes I have an entry for macOS, but this is for
a virtual machine located in ~~/VMs/macOS~.
#+begin_src conf-desktop :tangle ~/.local/share/applications/macos.desktop
[Desktop Entry]
Version=1
Name=macOS
Comment=macOS in a virtual machine
Exec=/usr/bin/prime-run /home/phundrak/VMs/macOS/basic.sh
Path=/home/phundrak/VMs/macOS
Icon=/home/phundrak/VMs/macOS/macOS.png
Terminal=false
Type=Application
Categories=Development
#+end_src
** Minecraft
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-Minecraft-tds7ddh0m9j0
:END:
Yup, I play Minecraft. And yes, it does have a default ~.desktop~ file,
but this one overrides it to launch automatically Minecraft with
[[https://wiki.archlinux.org/title/PRIME][prime-run]], using my Nvidia GPU instead of my integrated GPU.
#+begin_src conf-desktop :tangle ~/.local/share/applications/minecraft-launcher.desktop
[Desktop Entry]
Type=Application
Version=1.0
Name=Minecraft Launcher (Nvidia)
Comment=Official Minecraft Launcher
Exec=/usr/bin/prime-run /usr/bin/minecraft-launcher
Path=/usr/bin/
Icon=minecraft-launcher
Terminal=false
Categories=Game;Application;
#+end_src
** OtherWorldMapper
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-OtherWorldMapper-rnh4omg0m9j0
:END:
OtherWorldMapper is a map creation software. It is always installed in
~~/.local/opt/OtherWorldMapper~.
#+begin_src conf-desktop :tangle ~/.local/share/applications/OWM.desktop
[Desktop Entry]
Version=1.0.4
Name=OtherWorldMapper
Comment=OtherWorldMapper is a powerful yet intuitive fantasy map creation tool.
Exec=/usr/bin/prime-run /home/phundrak/.local/opt/OtherWorldMapper/OWM
Path=/home/phundrak/.local/opt/OtherWorldMapper
Icon=/home/phundrak/.local/opt/OtherWorldMapper/owm.ico
Terminal=false
Type=Application
Categories=Graphics
#+end_src
** YouTube ~.desktop~ files
:PROPERTIES:
:CUSTOM_ID: -desktop-files-for-custom-applications-YouTube-desktop-files-0pw918h0m9j0
:END:
The first ~.desktop~ file related to YouTube is ~ytdl.desktop~ which runs
~ytdl~ defined in [[file:bin.org::#ytdl-a-youtube-dl-wrapper-03bd63e0][this document]].
#+begin_src conf-desktop :tangle ~/.local/share/applications/ytdl.desktop
[Desktop Entry]
Version=0.3
Name=YTDL
Comment=YouTube (and more) video downloader
Exec=/home/phundrak/.local/bin/rofi-ytdl
Path=/home/phundrak/.local/bin
Terminal=false
Type=Application
Categories=Network;Video
#+end_src
There is also ~ytplay.desktop~ for ~ytplay~ defined in [[file:bin.org::#Media-youtube-dl-wrappers-ytplay-z6ka39h0m9j0][this document]].
#+begin_src conf-desktop
[Desktop Entry]
Type=Application
Version=1.0
Name=ytplay (YouTube in mpv)
Comment=Play YouTube videos in mpv
Exec=/home/phundrak/.local/bin/ytplay
Path=/home/phundrak/.local/bin
Terminal=false
Categories=Media
#+end_src

File diff suppressed because it is too large Load Diff

View File

@ -1,694 +0,0 @@
#+TITLE: Fish config
#+setupfile: headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's fish config" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's fish config" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the fish config file of Phundrak" />
#+PROPERTY: header-args:fish :mkdirp yes :tangle ~/.config/fish/config.fish :exports code :noweb yes
#+PROPERTY: header-args :exports code :tangle no
* Presentation
:PROPERTIES:
:CUSTOM_ID: Presentation-340195eb
:END:
The file present in =~/.config/fish/config.fish= is the configuration file for
the [[https://fishshell.com/][fish shell]]. It contains custom functions, environment variables and
abbreviations.
Just in case, we might sometimes need to declare the fish function =fish_title=
as =true=, so lets do so.
#+BEGIN_SRC fish
function fish_title
true
end
#+END_SRC
* Fish from within Emacs
:PROPERTIES:
:CUSTOM_ID: Fish_from_within_Emacs-360c0a74
:END:
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
variable =TERM= needs to have the value =eterm-color=.
#+BEGIN_SRC fish
if test -n "$EMACS"
set -x TERM eterm-color
end
#+END_SRC
* Global variables
:PROPERTIES:
:CUSTOM_ID: Global_variables-1c84df8b
:END:
An important thing to do is to load all variables from my =~/.profile=
file (which you can find [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/.profile][here]]). The [[https://github.com/oh-my-fish/plugin-foreign-env][foreign-env]] plugin comes in handy:
#+begin_src fish
fenv source ~/.profile
#+end_src
** Development
:PROPERTIES:
:CUSTOM_ID: Global_variables-Development-76b3ff13
:END:
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
lets do so.
#+BEGIN_SRC fish
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
#+END_SRC
* Tramp remote access
:PROPERTIES:
:CUSTOM_ID: Tramp_remote_access-72aedec2
:END:
When accessing from a remote machine our computer from Emacs, tramp
needs a precise shell appearance: a simple =$= followed by a space after
which to put the commands it needs to execute, and nothing else. Due
to this, lets deactivate and redefine some functions defining the
appearance of fish.
#+BEGIN_SRC fish
if test "$TERM" = "dumb"
function fish_prompt
echo "\$ "
end
function fish_right_prompt; end
function fish_greeting; end
function fish_title; end
end
#+END_SRC
* Regular fish shell appearance
:PROPERTIES:
:CUSTOM_ID: Regular_fish_shell_appearance-c3e532e1
:END:
Now, there is only one function I modify when it comes to the
appearance of fish when Im the one using it: the ~fish_greeting~
function. I just want it empty.
#+BEGIN_SRC fish
function fish_greeting; end
#+END_SRC
For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Lets load it:
#+begin_src fish
starship init fish | source
#+end_src
* Setting up external tools
:PROPERTIES:
:CUSTOM_ID: Setting-up-external-tools-2r4b97p0bbj0
:END:
** Starship configuration
:PROPERTIES:
:header-args:toml: :tangle ~/.config/starship.toml
:CUSTOM_ID: Starship-configuration-lpz4tz410bj0
:END:
As mentioned above, starship is a shell-agnostic prompt, written in Rust and which can be configured separately from the shell. I decided to configure it here though, since fish is the only shell I use which is compatible with starship.
First Ill modify the default format variable, removing the modules I dont need.
#+begin_src toml
format = """
$username\
$hostname\
$shlvl\
$singularity\
$kubernetes\
$directory\
$vcsh\
$git_branch\
$git_commit\
$git_state\
$git_metrics\
$git_status\
$hg_branch\
$docker_context\
$package\
$cmake\
$dart\
$deno\
$lua\
$nodejs\
$python\
$rlang\
$rust\
$scala\
$zig\
$memory_usage\
$env_var\
$custom\
$cmd_duration\
$line_break\
$jobs\
$battery\
$time\
$status\
$shell\
$character"""
#+end_src
I want starship to be able to detect Lisp files, be it CommonLisp or EmacsLisp. Unfortunately, it seems nerd-font doesnt have any symbol for either language, so Im just using a lambda character.
#+begin_src toml
[custom.lisp]
extensions = ["lisp", "el"]
symbol = "λ "
style = "bold green"
#+end_src
Finally, lets disable all modules I dont need.
#+begin_src toml
[cobol]
disable = true
[dotnet]
disable = true
[elixir]
disable = true
[elm]
disable = true
[erlang]
disable = true
[golang]
disable = true
[helm]
disable = true
[java]
disable = true
[julia]
disable = true
[kotlin]
disable = true
[nim]
disable = true
[ocaml]
disable = true
[perl]
disable = true
[php]
disable = true
[pulumi]
disable = true
[purescript]
disable = true
[red]
disable = true
[ruby]
disable = true
[swift]
disable = true
[terraform]
disable = true
[vlang]
disable = true
[vagrant]
disable = true
[nix_shell]
disable = true
[conda]
disable = true
[aws]
disable = true
[gcloud]
disable = true
[openstack]
disable = true
[crystal]
disable = true
#+end_src
** Loading ~zoxide~
:PROPERTIES:
:CUSTOM_ID: Setting-up-external-tools-Loading-zoxide-y97b97p0bbj0
:END:
~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded like so:
#+begin_src fish
zoxide init fish | source
#+end_src
* Abbreviations
:PROPERTIES:
:CUSTOM_ID: Abbreviations-97537716
:END:
#+NAME: generate-abbr
#+BEGIN_SRC emacs-lisp :var table=[] :exports none :tangle no
(replace-regexp-in-string "\\\\vert[{}]*"
"|"
(mapconcat (lambda (x) (format "abbr %s '%s'" (car x) (cadr x)))
table
"\n")
t t)
#+END_SRC
Abbreviations are a great way to keep correctly track of which commands are run
in the shell without polluting the history of the shell with obscure commands.
When typing an abbreviation, fish will replace it with replace it with its
expanded equivalent. Below are some of the abbreviations I use. Be aware some of
them that invoke GUI programs can be invoked through ~devour~ which will make
the terminal disappear while the program runs, and once the GUI program exists
the terminal window will come back.
** System monitoring
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_monitoring-bd909755
:END:
Here I have some abbreviations which are quite useful when performing
some system monitoring. With =df=, we can get an overview of our
filesystem usage, while with =diskspace= we get some more precise
information. =meminfo= is a call to =free= with sane defaults, and similar
to =meminfo=, we also have =gpumeminfo= to get a quick look at the
memory-related logs of our X session. I also declared =cpuinfo= an alias
of =lscpu= in order to keep consistent with =meminfo=. =pscpu= gives us
information on what the CPU is running right now, and =pscpu10= limits
that to the top 10 threads. Similarly, =psmem= gives us information on
the memory usage of the current threads, and =psmem10= only the ten most
important threads in terms of memory usage.
#+NAME: mgmt-abbr
| abbreviation | command |
|--------------+--------------------------------------------|
| df | df -H |
| diskspace | sudo df -h \vert grep -E "sd\vert{}lv\vert{}Size" |
| du | du -ch |
| meminfo | free -m -l -t |
| gpumeminfo | grep -i --color memory /var/log/Xorg.0.log |
| cpuinfo | lscpu |
| pscpu | ps auxf \vert sort -nr -k 3 |
| pscpu10 | ps auxf \vert sort -nr -k 3 \vert head -10 |
| psmem | ps auxf \vert sort -nr -k 4 |
| psmem10 | ps auxf \vert sort -nr -k 4 \vert head -10 |
#+begin_SRC fish
<<generate-abbr(table=mgmt-abbr)>>
#+END_SRC
** System management (packages and services)
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-7249fbb7
:END:
I added some of these abbreviations due to how often I have to write the whole
thing.
*** Package management
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-Package_management-efbcdf0f
:END:
The first command is =remove= which removes a package from my system, as well as
its dependencies no longer needed. =p=. =pacman='s or =paru='s. This is why I
simply type =purge=. And if I want to simply seach among the =pacman= repos, I
can type =search=. Otherwise, if I want to include AUR results, Ill use =paru=.
#+NAME: pm-abbr
| abbreviation | command |
|--------------+------------------|
| remove | sudo pacman -Rsc |
| purge | paru -Sc |
#+BEGIN_SRC fish
<<generate-abbr(table=pm-abbr)>>
#+END_SRC
*** Service management
:PROPERTIES:
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-Service_management-8c5ae482
:END:
I dont have the muscle memory of =systemctl=. So instead, I simply type =c=
when I want to do something user service related. And if I want to manipulate
system services, I can instead type a simple capital =S=.
#+NAME: service-abbr
| abbreviation | command |
|--------------+------------------|
| s | systemctl |
| suser | systemctl --user |
#+BEGIN_SRC fish
<<generate-abbr(table=service-abbr)>>
#+END_SRC
** Development
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-d6050ca4
:END:
A good amount of these commands are development related, especially when it
comes to compilation or Docker.
*** CMake
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-CMake-f2951675
:END:
I have the following abbreviations to quickly run CMake and create a
configuration for debug or release profiles.
#+NAME: abbr-cmake
| abbreviation | command |
|--------------+----------------------------------|
| cdebug | cmake -DCMAKE_BUILD_TYPE=Debug |
| crelease | cmake -DCMAKE_BUILD_TYPE=Release |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=abbr-cmake)>>
#+END_SRC
*** Docker
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Docker-2d0a1288
:END:
And of course, when it comes to Docker Compose, I don't have time to write the
full command, so I use these instead.
#+NAME: abbr-docker
| abbreviation | command |
|--------------+------------------------------|
| dc | docker-compose |
| dcb | docker-compose build |
| dcd | docker-compose down |
| dcl | docker-compose logs |
| dclf | docker-compose logs -f |
| dcp | docker-compose pull |
| dcr | docker-compose run --rm |
| dcu | docker-compose up |
| dcub | docker-compose up --build |
| dcud | docker-compose up -d |
| dcudb | docker-compose up -d --build |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=abbr-docker)>>
#+END_SRC
*** Text editors
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Text_editors-5a23df47
:END:
I greatly prefer to use Emacsclient as my main text editor; Emacs has basically
all I need. So, it's only normal I have an abbreviation to launch a new instance
of it. If launched in the terminal, Ill usually want Emacs to be displayed in
CLI mode and not in GUI mode, otherwise I would invoke it with my WMs shortcut.
In case we want to launch Emacs in GUI mode anyway, ~egui~ is available too.
#+NAME: abbr-text-ed
| abbreviation | command |
|--------------+-----------------------|
| e | emacsclient -c -n |
| egui | devour emacsclient -c |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish :noweb yes
<<generate-abbr(table=abbr-text-ed)>>
#+END_SRC
*** Compilation
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Compilation-dd066050
:END:
By default, I set ~clang~, ~clang++~, ~gcc~ and ~g++~ to the latest standard and
with the ~-Wall~ flag activated.
#+NAME: abbr-comp
| abbreviation | command |
|--------------+----------------------|
| clang | clang -Wall |
| clang++ | clang++ -Wall |
| g++ | g++ -Wall -std=c++20 |
| gcc | gcc -Wall -std=c18 |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=abbr-comp)>>
#+END_SRC
*** Git
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Development-Git-5e5055c1
:END:
And let's face it: we all at one point just wanted to commit our code without
thinking about the message, to just get over with it. Don't worry, I got you
covered.
#+NAME: abbr-git
| abbreviation | command |
|--------------+-----------------------------------------------------|
| randcommit | git commit -m (curl -s whatthecommit.com/index.txt) |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=abbr-git)>>
#+END_SRC
** LaTeX
:PROPERTIES:
:CUSTOM_ID: Abbreviations-LaTeX-76865eb9
:END:
Yes, although I use org-mode, I still have some use for LaTeX, especially when
it comes to PDF exports of my org files. Hence, why I use the LaTeX package
manager. It is recommended to use ~tllocalmgr~ instead of ~tlmgr~, but I can
never remember the command, and the latter is faster to type, so time for an
abbreviation. Same goes for ~texhash~ which must be run as sudo.
#+NAME: latex-abbr
| abbreviation | command |
|--------------+--------------|
| tlmgr | tllocalmgr |
| texhash | sudo texhash |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=latex-abbr)>>
#+END_SRC
** Some security measures
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Some_security_measures-489cb521
:END:
Some commands can be quite dangerous when not used properly, which is
why I added default flags and options in order to get warnings before
things get ugly. The =-i= and =-I= add prompts in case we might not want
to do what we asked the shell to do. Notice =lns= which creates
symlinks, =rmd= which removes directories, =rmf= which forces deletion,
and =rmdf= which forces the delition of a directory. Notice also the
=--preserve-root= which will prevent me from accidentally removing the
root folder. I added the same option to =chgrp=, =chmod=, and =chown=.
#+NAME: sec-abbr
| abbreviation | command |
|--------------+--------------------------|
| cp | cp -i |
| rsync | rsync -Pa --progress |
| ln | ln -i |
| lns | ln -si |
| mv | mv -i |
| rm | rm -Iv |
| rmd | rm --preserve-root -Irv |
| rmdf | rm --preserve-root -Irfv |
| rmf | rm --preserve-root -Ifv |
| chgrp | chgrp --preserve-root -v |
| chmod | chmod --preserve-root -v |
| chown | chown --preserve-root -v |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=sec-abbr)>>
#+END_SRC
** Typos
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Typos-370bbb27
:END:
Let's admit it, we all make typos from time to time in the shell, and some are
recurrent enough we make abbreviations or aliases of the correct command. Well,
I have some of my abbreviations which were make exactly because of this.
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~.
So, let's just replace the former by the latter. I'm also very bad at typing
~exit~. And sometimes I suck at typing ~htop~.
#+NAME: typo-abbr
| abbreviation | command |
|--------------+---------|
| clean | clear |
| exi | exit |
| exti | exit |
| hotp | htop |
Here is the corresponding fish configuration:
#+BEGIN_SRC fish
<<generate-abbr(table=typo-abbr)>>
#+END_SRC
** Misc
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-c2631eb6
:END:
Finally, some miscellaneous abbreviations that don't really fit into any of the
above categories.
*** Screens setup
:PROPERTIES:
:CUSTOM_ID: AbbreviationsMiscScreenssetup-27c5xn50srj0
:END:
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
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Media-e4b85d56
:END:
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
YouTube channel]]'s livestream.
#+BEGIN_SRC fish
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/watch?v=jfKfPfyJRdk" &'
#+END_SRC
When it comes to mpv, I do not want to force it to open a graphical window if
for example I want to listen to an audio file. I also do not want any border on
that window. So, I declared this abbreviation.
#+BEGIN_SRC fish
abbr mpv 'mpv --no-border --force-window=no'
#+END_SRC
When I want to download a song from YouTube, I'll just use the command ~flac
videoIdentifier~ to get it through ~youtube-dl~.
#+BEGIN_SRC fish
abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(uploader)s/%(title)s.%(ext)s"'
#+END_SRC
Some sane default options for [[https://github.com/nsxiv/nsxiv][~nsxiv~]]. This includes playing GIFs and
not displaying the filename below. Nsxiv will also open in fullscreen
and will fit the displayed image to the frame. It will also output to
stdout the selected files in case I want to pipe them to another
program.
#+BEGIN_SRC fish
abbr nsxiv 'nsxiv -abfos f'
#+END_SRC
The following abbreviation is here to launch software with my Nvidia
GPU.
#+begin_src fish
abbr nv 'env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'
#+end_src
Finally, let's declare the following abbreviation that will launch a MPV
instance displaying my webcam:
#+BEGIN_SRC fish
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed'
#+END_SRC
*** Sudo
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Sudo-aef0214a
:END:
First, I make it so that ~sudo~ comes with the ~-A~ switch in order to call my
custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0d7a8c0][askpass]]). I also made it so
~please~ is an equivalent to ~sudo -A~ as a joke.
#+BEGIN_SRC fish
abbr please 'sudo -A'
#+END_SRC
*** History
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-History-a2124b23
:END:
I find it more intuitive and faster to just write ~hist~ instead of ~history~,
so let's declare that.
#+BEGIN_SRC fish
abbr hist history
#+END_SRC
*** Compression
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Compression-4fd4ffef
:END:
It seems it's just like many other people, but I cannot for the life of me
remember the syntax of ~tar~. So, I made the following abbreviations, and one
day hopefully, after seeing the abbreviations' expansion over and over I'll
remember the command like I did for the abbreviation of ~remove~ (see [[#Abbreviations-System_management_(packages_and_services)-Package_management-efbcdf0f][Package
management]]).
#+NAME: tar-abbr
| abbreviation | command |
|--------------+-----------|
| compress | tar -czf |
| untar | tar -xvzf |
#+BEGIN_SRC fish
<<generate-abbr(table=tar-abbr)>>
#+END_SRC
*** exa
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-exa-e1b528b9
:END:
#+NAME: exa-abbr
| abbreviation | command |
|--------------+--------------------------------------------|
| exa | exa -halg@ --group-directories-first --git |
| lsl | exa -halg@ --group-directories-first --git |
#+BEGIN_SRC fish
<<generate-abbr(table=exa-abbr)>>
#+END_SRC
*** Network Management
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Network_Management-0b7fc91d
:END:
First, we have just =nmcli= with sane default options, that is a pretty output
with colors.
#+BEGIN_SRC fish
abbr nmcli 'nmcli -p -c auto'
#+END_SRC
*** NordVPN
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-NordVPN-09438638
:END:
Next, we have some NordVPN-related shortcuts. The first one is a simple
abbreviation to =nordvpn=. The second one is a shortcut to connect to a server,
and to disconnect from the current server. I also have a couple of shortcuts to
quickly connect to some preselected countries, mainly France, Germany, Japan and
the US.
#+NAME: nordvpn-abbr
| abbreviation | command |
|--------------+-------------------------|
| n | nordvpn |
| nc | nordvpn c |
| nd | nordvpn d |
| ncf | nordvpn c France |
| ncg | nordvpn c Germany |
| ncj | nordvpn c Japan |
| ncu | nordvpn c United_States |
#+BEGIN_SRC fish
<<generate-abbr(table=nordvpn-abbr)>>
#+END_SRC
*** Wget
:PROPERTIES:
:CUSTOM_ID: Abbreviations-Misc-Wget-27f4bebf
:END:
By default, continue a download that was interupted.
#+BEGIN_SRC fish
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
#+END_SRC
* Last thing before were done
:PROPERTIES:
:CUSTOM_ID: Last-thing-before-we-re-done-670f1461
:END:
For some reason, Fish began searching for packages when I enter a command name
wrong. For instance, if I type ~vim~, I get something like this:
#+BEGIN_SRC text :tangle no
$ vim
fish: Unknown command: vim
usr/bin/vim is owned by extra/gvim 8.2.2653-1
usr/bin/vim is owned by extra/vim 8.2.2653-1
#+END_SRC
But I dont want that, it slows down my shell. So, in order to fix that, we need
the following lines:
#+BEGIN_SRC fish
function fish_command_not_found
__fish_default_command_not_found_handler $argv
end
#+END_SRC
Tadah! No more package suggestions from fish!
I also have some private abbreviations I dont want people to know
about that I store in a separate configuration file.
#+begin_src fish
source $HOME/.config/fish/private.fish
#+end_src

View File

@ -1,294 +0,0 @@
# -*- indent-tabs-mode: t; -*-
#+title: Git configuration
#+setupfile: headers
#+PROPERTY: header-args :exports code :tangle no
#+PROPERTY: header-args:conf-unix :mkdirp yes :tangle ~/.config/git/config :exports code :noweb yes
* Basic configuration
#+begin_src conf-unix
# -*- indent-tabs-mode: t; -*-
#+end_src
#+begin_src conf-unix
[user]
email = lucien@phundrak.com
name = Lucien Cartier-Tilet
signingkey = BD7789E705CB8DCA
#+end_src
#+begin_src conf-unix
[core]
editor = emacsclient -c -a emacs
whitespace = fix,-indent-with-non-tab,trailing-space
excludesfile = /home/phundrak/.gitignore_global
#+end_src
#+begin_src conf-unix
[pull]
rebase = true
#+end_src
#+begin_src conf-unix
[init]
defaultBranch = main
#+end_src
#+begin_src conf-unix
[color]
ui = auto
#+end_src
#+begin_src conf-unix
[web]
browser = firefox
#+end_src
* Aliases
#+name: git-add-abbrev
| abbreviation | equivalent |
|--------------+------------------------------------------------|
| =a= | =add --all= |
| =aca= | =!git add --all && git commit --amend= |
| =acan= | =!git add --all && git commit --amend --no-edit= |
#+name: abbrev-gen
#+begin_src emacs-lisp :tangle no :exports none :var abbrevs=git-push-abbrev :wrap "src conf-unix :tangle no"
(mapconcat (lambda (abbreviation)
(replace-regexp-in-string
(concat (regexp-quote "\\vert") (rx (? "{}")))
"|"
(concat "\t"
(string-replace "=" "" (car abbreviation))
" = "
(string-replace "=" "" (cadr abbreviation)))))
abbrevs
"\n")
#+end_src
#+RESULTS: abbrev-gen
#+begin_src conf-unix :tangle no
ps = push
psf = push --force-with-lease
pso = push origin
psfo = push --force-with-lease origin
pushall = !git remote | xargs -L1 git push
psl = !git remote | xargs -L1 git push
pullall = !git remote | xargs -L1 git pull
pll = !git remote | xargs -L1 git pull
#+end_src
#+name: git-branch-abbrev
| abbreviation | equivalent |
|--------------+------------|
| =b= | =branch= |
| =bd= | =branch -d= |
| =bdd= | =branch -D= |
#+name: git-commit-abbrev
| abbreviation | equivalent |
|--------------+----------------------|
| =c= | =commit -S= |
| =ca= | =commit -Sa= |
| =can= | =commit -Sa --no-edit= |
| =cm= | =commit -Sm= |
| =cam= | =commit -Sam= |
#+name: git-checkout-abbrev
| abbreviation | equivalent |
|--------------+------------------|
| =co= | =checkout= |
| =cob= | =checkout -b= |
| =cod= | =checkout develop= |
#+name: git-clone-abbrev
| abbreviation | equivalent |
|--------------+-----------------|
| =cl= | =clone= |
| =cl1= | =clone --depth 1= |
#+name: git-fetch-abbrev
| abbreviation | equivalent |
|--------------+---------------|
| =f= | =fetch= |
| =fp= | =fetch --prune= |
#+name: git-push-abbrev
| abbreviation | equivalent |
|--------------+----------------------------------|
| =ps= | =push= |
| =psf= | =push --force-with-lease= |
| =pso= | =push origin= |
| =psfo= | =push --force-with-lease origin= |
| =pushall= | =!git remote \vert{} xargs -L1 git push= |
| =psl= | =!git remote \vert{} xargs -L1 git push= |
| =pullall= | =!git remote \vert{} xargs -L1 git pull= |
| =pll= | =!git remote \vert{} xargs -L1 git pull= |
#+name: git-pull-abbrev
| abbreviation | equivalent |
|--------------+---------------|
| =pl= | =pull= |
| =pb= | =pull --rebase= |
#+name: git-rebase-abbrev
| abbreviation | equivalent |
|--------------+-------------------|
| =r= | =rebase= |
| =ra= | =rebase --abort= |
| =rc= | =rebase --continue= |
| =rd= | =rebase develop= |
| =ri= | =rebase -i= |
#+name: git-rm-abbrev
| abbreviation | equivalent |
|--------------+------------|
| =rmf= | =rm -f= |
| =rmd= | =rm -r= |
| =rmdf= | =rm -rf= |
#+name: git-submodule-abbrev
| abbreviation | equivalent |
|--------------+-------------------------------------|
| =sm= | =submodule= |
| =sms= | =submodule status= |
| =sma= | =submodule add= |
| =smu= | =submodule update= |
| =smui= | =submodule update --init= |
| =smuir= | =submodule update --init --recursive= |
#+name: git-stash-abbrev
| abbreviation | equivalent |
|--------------+-------------|
| =st= | =stash= |
| =stc= | =stash clear= |
| =stp= | =stash pop= |
| =stw= | =stash show= |
#+name: git-unstage-abbrev
| abbreviation | equivalent |
|--------------+------------|
| =u= | =reset --= |
| =unstage= | =reset --= |
#+name: git-single-abbrev
| abbreviation | equivalent |
|--------------+----------------------------------|
| =d= | =diff -w= |
| =l= | =log --oneline --graph --decorate= |
| =s= | =status= |
| =staged= | =diff --cached= |
| =upstream= | =!git push -u origin HEAD= |
#+RESULTS:
: a = add --all
: aca = !git add --all && git commit --amend
: acan = !git add --all && git commit --amend --no-edit
#+begin_src conf-unix
[alias]
<<abbrev-gen(abbrevs=git-add-abbrev)>>
<<abbrev-gen(abbrevs=git-branch-abbrev)>>
<<abbrev-gen(abbrevs=git-commit-abbrev)>>
<<abbrev-gen(abbrevs=git-checkout-abbrev)>>
<<abbrev-gen(abbrevs=git-clone-abbrev)>>
<<abbrev-gen(abbrevs=git-fetch-abbrev)>>
<<abbrev-gen(abbrevs=git-push-abbrev)>>
<<abbrev-gen(abbrevs=git-pull-abbrev)>>
<<abbrev-gen(abbrevs=git-rebase-abbrev)>>
<<abbrev-gen(abbrevs=git-rm-abbrev)>>
<<abbrev-gen(abbrevs=git-submodule-abbrev)>>
<<abbrev-gen(abbrevs=git-stash-abbrev)>>
<<abbrev-gen(abbrevs=git-unstage-abbrev)>>
<<abbrev-gen(abbrevs=git-single-abbrev)>>
#+end_src
* Tools
** Sendemail
#+begin_src conf-unix
[sendemail]
smtpserver = mail.phundrak.com
smtpuser = lucien@phundrak.com
smtpencryption = tls
smtpserverport = 587
#+end_src
#+begin_src conf-unix
[credentials "smtp://lucien@phundrak.com@mail.phundrak.com:587"]
helper = "secret-tool lookup password email_lucien-phundrak-com"
#+end_src
** Magit
#+begin_src conf-unix
[magithub]
online = true
[magithub "status"]
includeStatusHeader = true
includePullRequestsSection = true
includeIssuesSection = true
#+end_src
** GPG
#+begin_src conf-unix
[gpg]
program = gpg2
[commit]
gpgsign = true
#+end_src
** Merge
#+begin_src conf-unix
[merge]
tool = ediff
#+end_src
#+begin_src conf-unix
[mergetool.ediff]
cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
#+end_src
** Pager
#+begin_src conf-unix
[pager]
diff = delta
log = delta
reflog = delta
show = delta
#+end_src
** Delta
#+begin_src conf-unix
[delta]
features = side-by-side line-numbers decorations
whitespace-error-style = 22 reverse
[delta "decorations"]
commit-decoration-style = bold yellow box ul
file-style = bold yellow ul
file-decoration-style = none
[interactive]
diffFilter = delta --color-only
#+end_src
** Git forges
#+begin_src conf-unix
[github]
user = phundrak
#+end_src
#+begin_src conf-unix
[url "https://phundrak@github.com"]
insteadOf = https://github.com
[url "https://phundrak@labs.phundrak.com"]
insteadOf = https://labs.phundrak.com
#+end_src
** LFS
#+begin_src conf-unix
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
#+end_src

View File

@ -1,48 +0,0 @@
# -*- mode: org -*-
#+AUTHOR: Lucien Cartier-Tilet
#+EMAIL: lucien@phundrak.com
#+CREATOR: Lucien Cartier-Tilet
#+LANGUAGE: en
#+startup: overview noalign noinlineimages hideblocks
# ### ORG OPTIONS ##############################################################
#+OPTIONS: H:4 broken_links:mark email:t ^:{}
#+KEYWORDS: dotfiles, linux, emacs, configuration, phundrak, drakpa
# ### LaTeX #############################################################
#+latex_class: article
#+latex_class_options: [a4paper]
#+latex_header: \input{headers.tex}
# ### HTML #############################################################
#+HTML_DOCTYPE: html5
#+HTML_HEAD: <meta property="og:image" content="https://cdn.phundrak.com/img/rich_preview.png" />
#+HTML_HEAD: <meta name="twitter:card" content="summary" />
#+HTML_HEAD: <meta name="twitter:site" content="@phundrak" />
#+HTML_HEAD: <meta name="twitter:creator" content="@phundrak" />
#+HTML_HEAD: <link rel="stylesheet" href="https://config.phundrak.com//style/main.css"/>
#+HTML_HEAD: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/mahakala-128x128.png" type="img/png" media="screen" />
#+HTML_HEAD: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/favicon.ico" type="image/x-icon" media="screen" />
#+HTML_HEAD: <script defer src="https://config.phundrak.com/dart/main.dart.js"></script>
#+html_head: <!-- Matomo -->
#+html_head: <script>
#+html_head: var _paq = window._paq = window._paq || [];
#+html_head: /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
#+html_head: _paq.push(['trackPageView']);
#+html_head: _paq.push(['enableLinkTracking']);
#+html_head: (function() {
#+html_head: var u="https://matomo.phundrak.com/";
#+html_head: _paq.push(['setTrackerUrl', u+'matomo.php']);
#+html_head: _paq.push(['setSiteId', '2']);
#+html_head: var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
#+html_head: g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
#+html_head: })();
#+html_head: </script>
#+html_head: <!-- End Matomo Code -->
# ### MACROS ############################################################
#+MACRO: newline @@latex:\hspace{0pt}\\@@ @@html:<br>@@

View File

@ -1,15 +0,0 @@
% LaTeX headers
\usepackage[total={17cm,24cm}]{geometry}
\usepackage{xltxtra}
\setmainfont{Charis SIL}
\usepackage{indentfirst}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage{xcolor}
\hypersetup{colorlinks=true,linkbordercolor=red,linkcolor=blue,pdfborderstyle={/S/U/W 1}}
\usepackage{newunicodechar}
\newunicodechar{}{'}
\newunicodechar{}{\ldots}
\newunicodechar{ }{~}
\newunicodechar{}{~}
\usepackage{glossaries}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 323 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.3 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 KiB

View File

@ -1,231 +0,0 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Phundraks dotfiles
#+setupfile: headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's dotfiles" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's dotfiles" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the dotfiles of Phundrak" />
* Presentation
:PROPERTIES:
:CUSTOM_ID: Presentation-981f2f04
:END:
This is my collection of dotfiles for my daily GNU/Linux environment, tweaked to
my liking. If you wish to get the same setup as mine, follow the instructions
below.
For starters, here is the link to all the pages on my website that you might
find interesting. Ill describe them in more details below.
#+include: sitemap.org
As you can see, I personally use [[https://fishshell.com/][fish]] as my shell of choice, and [[https://www.gnu.org/software/emacs/][Emacs]]
29.0 as my main text editor.
When it comes to my graphical UI, I do not have any desktop
environment. Instead, I have a tiling window managers, [[https://stumpwm.github.io/][StumpWM]]. I used
to use [[https://github.com/Airblader/i3][i3-gaps]], an [[https://i3wm.org/][i3]] fork by [[https://github.com/Airblader/i3][Airblader]], with which I used [[https://polybar.github.io/][Polybar]] as
well as [[https://github.com/dylanaraps/pywal][pywal]] to define my systems color scheme, and then I used
[[file:Deprecated/awesome.org][Awesome]]. But now, as said above, I prefer to use StumpWM. It has a
built-in status bar (called a mode-line, like in Emacs) which I use,
and I settled on the dark [[https://www.nordtheme.com/][Nord theme]] for pretty much everything I use.
Finally, you can find my configuration for my ErgodoxEZ keyboard [[https://configure.ergodox-ez.com/ergodox-ez/layouts/5WrVw/latest/0][here]]. It is
optimized for usage with the Bépo layout set as a software layout. It has also a
layer set to emulate a Qwerty layout when using the Bépo software layout due to
some games that do not offer to remap keys (Im looking at you, Among Us).
* Features
:PROPERTIES:
:CUSTOM_ID: Features-5ab2a2c0
:END:
- Emacs' configuration perfectly tailored for my own use
- Beautiful and comfy StumpWM configuration
- And enough information below to get basically the same distro
install as I have on computer.
Most of the org files you will find in this repo are the actual source
code of much of my config files. For instance, the bootstrap found in
[[file:bootstrap.org][bootstrap.org]] exports almost all of its code snippets to
=$HOME/.config/yadm/bootstrap= thanks to =M-x org-babel-tangle= from
within Emacs. Below I will also present and comment some of my short
config files which do not deserve to have a full org file dedicated to
them.
** Tiling Window Managers
:PROPERTIES:
:CUSTOM_ID: Features-Tiling_Window_Managers-da221e37
:END:
*** StumpWM
:PROPERTIES:
:CUSTOM_ID: Features-Tiling-Window-Managers-StumpWM-u9kdbd6137j0
:END:
StumpWM is the tiling window manager I use at the moment. It is
written and configured in Common Lisp, which I enjoy a lot since it
has a syntax quite close to Elisp, the Lisp dialect used in Emacs. Im
currently still in the process of figuring out my config, so please
consider it as a kind of work in progress. You can find the
configuration [[file:stumpwm.org][here]].
*** AwesomeWM (Deprecated)
:PROPERTIES:
:CUSTOM_ID: Features-Tiling_Window_Managers-AwesomeWM-2eac61a9
:END:
AwesomeWM is the TWM I used for quite some time after switching from
i3. This is an automatic tiling window manager written and configured
mostly in Lua, with its core written in C (this is originally a dwm
fork). My configuration for it is documented in detail in its
corresponding document, which you can find [[file:Deprecated/awesome.org][here]].
*** i3 configuration (Deprecated)
:PROPERTIES:
:CUSTOM_ID: Features-Tiling_Window_Managers-i3_configuration-9c92e43c
:END:
The i3 configuration is detailed in its corresponding README which you
can find [[file:Deprecated/i3.org][here]]. Be aware I do not use i3 anymore, and I will not update
it until I may someday use it again. This was deprecated on August
22nd, 2020.
**** Polybar config (Deprecated)
:PROPERTIES:
:CUSTOM_ID: Features-Polybar_config_(Deprecated)-c8f95774
:END:
My annotated polybar config can be found [[file:Deprecated/polybar.org][here]], if you wish to use it.
Be aware I do not use polybar anymore, and I will not update it until
I may someday use it again. This was deprecated on August 22nd, 2020.
** Text and source code editing
:PROPERTIES:
:CUSTOM_ID: Features-Text_and_source_code_editing-63cc66d5
:END:
*** Emacs configuration
:PROPERTIES:
:CUSTOM_ID: Features-Text_and_source_code_editing-Emacs_configuration-ef937102
:END:
Emacs is my main text editor, which I use for almost everything.
Because, you know…
#+begin_quote
Emacs is a great operating system, it just lacks a good text editor.
#+end_quote
My current configuration is a vanilla config, meaning I do not rely on
another configuration or framework such as Spacemacs or DoomEmacs to
configure Emacs. You can find its configuration [[file:emacs.org][here]].
I used to use a Spacemacs-based configuration, however I deprecated it
on October 20th 2021. You can find it [[file:Deprecated/spacemacs.org][here]].
*** Nano (deprecated)
:PROPERTIES:
:CUSTOM_ID: Features-Text_and_source_code_editing-Nano-a9d4839f
:END:
Although it is a very simple piece of software, nano does offer some
customization. Mine can be found in my [[file:Deprecated/nano.org][nano.org]] file. Be aware I do
not use nano anymore, and I will not update it until I may someday use
it again. This was deprecated on August 28th, 2020.
*** Rustfmt
:PROPERTIES:
:CUSTOM_ID: Features-Text_and_source_code_editing-Rustfmt-2c4ac0b3
:END:
You can find my Rustfmt configuration [[file:rustfmt.org][here]].
** Custom scripts in =PATH=
:PROPERTIES:
:CUSTOM_ID: Features-Custom_scripts_in_=PATH=-043e8c8e
:END:
I have written some scripts that help me daily accomplish some simple
tasks, like mounting and unmounting a drive or Android device, an
emoji picker, a utility to set up my Wacom tablet, and so on. You can
find them stored in my [[file:bin.org][bin.org]] file along with their detailed
explanation in the README placed in the same folder —which is actually
their source code once the org-mode file gets tangled.
** Terminal configuration
:PROPERTIES:
:CUSTOM_ID: Features-Terminal-configuration-9662b145
:END:
*** Fish configuration with useful abbreviations
:PROPERTIES:
:CUSTOM_ID: Features-Fish_configuration_with_useful_abbreviations-c71ffba0
:END:
You can also find in my Fish shell configuration in my [[file:fish.org][fish.org]] file,
which contains my usual abbreviations.
*** Tmux configuration
:PROPERTIES:
:CUSTOM_ID: Features-Tmux_configuration-ce76e030
:END:
You can find my tmux configuration in [[file:tmux.org][tmux.org]]. It depends on the submodule
[[https://github.com/gpakosz/.tmux.git][.tmux]] by [[https://pempek.net/][Gregory Pakosz]].
** And some minor configuration files
:PROPERTIES:
:CUSTOM_ID: Features-And_some_minor_configuration_files-d5cec319
:END:
*** Global gitignore
:PROPERTIES:
:HEADER-ARGS: :mkdirp yes :tangle ~/.gitignore_global
:CUSTOM_ID: Features-And_some_minor_configuration_files-Global_gitignore-42467108
:END:
Sometimes, there are some lines that always reappear in gitignores.
So, instead of always adding them, let git now that some elements are
to be ignored by default, hence the ~$HOME/.gitignore_global~ file.
First, we dont want nanos backup files.
#+BEGIN_SRC fundamental
,*~
#+END_SRC
And object files and output binaries generated by =gcc= and the likes arent
welcome either.
#+BEGIN_SRC fundamental
,*.out
,*.o
#+END_SRC
*** Paru
:PROPERTIES:
:CUSTOM_ID: Features-And-some-minor-configuration-files-Paru-1f3ef49e
:END:
~paru~ is an AUR helper for Arch Linux which aims to be a replacement
for ~yay~. A couple of the options you will see below aim at restoring
the behavior of ~yay~ in ~paru~. Sudo loop avoids me having to enter again
my password if one package takes too much time to compile and/or
compress. I know it can be a security issue if someone ever get access
to my computer while paru is running, but if it ever happens it will
be already concerning enough they managed to. I also make use of [[file:bin.org::#Emacs-stuff-Dired-2eeca9da][my
custom script dired]] so I can use Emacs Dired as the file manager
for ~paru~.
#+BEGIN_SRC conf :tangle ~/.config/paru/paru.conf :mkdirp yes
[options]
BottomUp
Devel
DevelSuffixes = -git -cvs -svn -bzr -darcs -always
NewsOnUpgrade
PgpFetch
Provides
RemoveMake
SudoLoop
UpgradeMenu
[bin]
FileManager = dired
#+END_SRC
* Installation
:PROPERTIES:
:CUSTOM_ID: Installation-9ec2ae86
:END:
For an installation walkthrough of my Arch Linux installation, check
out my [[file:bootstrap.org][bootstrap]] file where I walk you through the first manual steps
and through the bootstrap you can execute to automatically take care
of a lot of elements.
* License
:PROPERTIES:
:CUSTOM_ID: License-48911096
:END:
All of my dotfiles (and my dotfiles only) are available under the GNU
GPLv3 License. Please consult [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/LICENSE.md][the license file]] for more information.
In short: you are free to access, edit and redistribute all of my
dotfiles under the same license and as allowed by the license, and if
you fuck up something, its your own responsibility.

View File

@ -1,104 +0,0 @@
#+title: MPD Configuration
#+setupfile: headers
#+options: unique-id:t
#+html_head: <meta name="description" content="Phundraks MPD Configuration" />
#+html_head: <meta property="og:title" content="Phundraks MPD Configuration" />
#+html_head: <meta property="og:description" content="Phundraks MPD Configuration Detailed" />
#+property: header-args:emacs-lisp :lexical t :exports none :tangle no
#+property: header-args:emacs-lisp+ :noweb yes :wrap src conf-space
#+property: header-args:conf-space :tangle ~/.config/mpd/mpd.conf :noweb yes :exports code
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-zln38f71v8j0
:END:
As its name indicates, the [[https://www.musicpd.org/][Music Player Daemon]] --- or MPD for short
--- is a daemon that manages music files on a computer and plays them.
It can be manipulated by various front-end applications, such as the
command-line utility ~mpc~, TUI ~ncmpcpp~, or GUI ~cantata~. In my case, I
use mainly ~ncmpcpp~ and Emacs EMMS.
On my computer, MPD runs as a user daemon, as seen in [[file:bootstrap.org::#Execute_bootstrap-Enable_some_services-Mpd-f0f5b9b7][my bootstrap
file here]].
* Required Parameters
:PROPERTIES:
:CUSTOM_ID: Required-Parameters-sa4jfr71v8j0
:END:
MPD requires a few compulsory parameters that we will see below.
#+name: mpd-required-parameters
| Parameter name | Value | Comment |
|-------------------------+---------------------------+--------------------------------------------------------------------------|
| =follow_outside_symlinks= | =yes= | Whether to follow symlinks pointing outside the music directory |
| =follow_inside_symlinks= | =yes= | Whether to follow symlinks pointing inside the music directory |
| =db_file= | =~/.config/mpd/database= | Location of MPDs database |
| =sticker_file= | =~/.config/mpd/sticker.sql= | Location of the sticker database (dynamic information attached to songs) |
| =log_file= | =~/.config/mpd/log= | Location of MPDs log file |
#+name: mpd-gen-values
#+begin_src emacs-lisp :var table=mpd-required-parameters :exports results
(mapconcat (lambda (parameter)
(let* ((trim-name (lambda (parameter)
(replace-regexp-in-string (regexp-quote "=")
""
parameter)))
(name (apply trim-name `(,(car parameter))))
(value (apply trim-name `(,(cadr parameter)))))
(format "%s \"%s\"" name value)))
table
"\n")
#+end_src
#+RESULTS: mpd-gen-values
#+begin_src conf-space
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
db_file "~/.config/mpd/database"
sticker_file "~/.config/mpd/sticker.sql"
log_file "~/.config/mpd/log"
#+end_src
* Optional Parameters
:PROPERTIES:
:CUSTOM_ID: Optional-Parameters-hkw8zz71v8j0
:END:
While these values are not strictly necessary, some are still useful
such as ~music_directory~: we dont have to manually add our music to
MPD each time we run it.
#+name: mpd-optional-parameters
| Parameter | Value | Comment |
|--------------------+---------------------+-----------------------------------------------------------|
| =music_directory= | =~/Music= | Location of the music directory |
| =playlist_directory= | =~/Music/playlists= | Location of MPD playlists |
| =pid_file= | =~/.config/mpd/pid= | Location of MPDs PID |
| =state_file= | =~/.config/mpd/state= | File where the state of MPD is saved when killed |
| =bind_to_address= | =localhost= | Limit MPD to the localhost address |
| =auto_update= | =yes= | No need to manually update MPDs database with ~mpc update~ |
#+begin_src conf-space
<<mpd-gen-values(table=mpd-optional-parameters)>>
#+end_src
* Audio outputs
:PROPERTIES:
:CUSTOM_ID: Audio-outputs-emqjro81v8j0
:END:
Two audio outputs will be defined. The first one sets Pulseaudio up so
I can actually hear my music. Its configuration is simple, really.
#+begin_src conf-space
audio_output {
type "pulse"
name "pulse audio"
}
#+end_src
Another one sets up the visualizer of ~ncmpcpp~. It is not necessary to
create this one if you dont plan on using this feature.
#+begin_src conf-space
audio_output {
type "fifo"
name "my_fifo"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
#+end_src

View File

@ -1,588 +0,0 @@
#+title: Neofetch configuration
#+setupfile: headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's Neofetch config" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's Neofetch config" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the Neofetch config file of Phundrak" />
#+PROPERTY: header-args :noweb yes :exports code :tangle no :exports none
#+PROPERTY: header-args:sh :tangle ~/.config/neofetch/config.conf :exports code
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-5942aea3
:END:
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was written in
Bash, and thus its configuration file is written as a Bash script too. This
document was written with org-mode, and my configuration file is tangled from
the source blocks you will see below to ~~/.config/neofetch/config.conf~. This
configuration will only contain what I need. For any further information, please
refer to the [[https://github.com/dylanaraps/neofetch][original repository]] and [[https://github.com/dylanaraps/neofetch/wiki/Customizing-Info][its documentation]].
* The ~print_info~ functions
:PROPERTIES:
:CUSTOM_ID: The_print_info_functions-bb30763f
:END:
The ~print_info~ function is the function called by Neofetch in order to print
the system information it could fetch. In this function, well choose what to
display, and how. This function looks like this:
#+BEGIN_SRC sh :tangle no
print_info() {
# Print information here…
}
#+END_SRC
Generally, what we will display will be shown through the ~info~ function,
redefined inside Neofetch (this is not ~info(1)~). This ~info~ function accepts
one or two arguments. With one argument, such as with ~info memory~, we can get
a result that looks like ~5136MiB / 15873MiB~, while calling it with two
arguments will treat the first one as a prefix and the second one as the
interesting information; ~info "Memory" memory~ will look like
~Memory: 5136MiB / 15873MiB~. Here is what we want to display:
#+NAME: info-elements-table
| Prefix | Information | What it does |
|----------+-------------+------------------------------|
| | title | Username and hostname |
| | line_break | Insert a blank line |
| | cols | System theme |
| | line_break | Insert a blank line |
| Distro | distro | Distribution name |
| Kernel | kernel | Kernel version |
| Uptime | uptime | Machine uptime |
| Packages | packages | Number of installed packages |
| Shell | shell | Users default shell |
| WM | wm | Users Window Manager |
| Terminal | term | Default terminal |
| CPU | cpu | CPU information |
| GPU | gpu | GPU information |
| Memory | memory | RAM information |
#+NAME: info-elements-gen
#+BEGIN_SRC emacs-lisp :var table=info-elements-table :cache yes
(mapconcat (lambda (x)
(let ((prefix (car x))
(information (cadr x)))
(format "info %s%s"
(if (not (string= prefix ""))
(format "\"%s\" " prefix)
"")
information)))
table
"\n")
#+END_SRC
#+RESULTS[83eb4aaa554df955ad996157d911eec3a9251628]: info-elements-gen
#+begin_example
info title
info line_break
info cols
info line_break
info "Distro" distro
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "WM" wm
info "Terminal" term
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
#+end_example
Hence, the function looks like so:
#+BEGIN_SRC sh
print_info() {
<<info-elements-gen()>>
}
#+END_SRC
Each of these modules can be tuned with the variables presented below.
* Information settings
:PROPERTIES:
:CUSTOM_ID: Information_settings-9d4cfe88
:END:
Each of the following variable tunes a function that can be called in
~print_info~ described above. It is possible to tune them by modifying this
document or the configuration file itself, and they can be overridden by the
command line with flags passed to ~neofetch~. I will divide these variables in
two main categories: hardware and software-related properties.
** Software
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-59f4cb0f
:END:
*** OS
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-OS-67908fc4
:END:
**** Distro
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-OS-Distro-cd12bc4f
:END:
This variable can shorten the output of the ~distro~ function.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--distro_shorthand~
- Supports :: Everything except Windows and Haiku
- Examples ::
- on :: ~Arch Linux~
- off :: ~Arch~
#+begin_src sh
distro_shorthand="off"
#+end_src
It is possible to display when the distro has been installed on the computer.
***** Distro art or image
:PROPERTIES:
:CUSTOM_ID: Information-settings-Software-OS-Distro-Distro-art-or-image-e60cbd1e
:END:
By default, Neofetch will display ascii art next to our system information
representing our distros logo. Well customize it a bit. First, lets change
the ~backend~ value. Note that most of them (except ~off~ of course) support
shorthands such as ~--kitty~ when passed as arguments from the command line. In
my case, I will use the Kitty backend since it is the native backend of the
terminal emulator I use.
- Default value :: ~"ascii"~
- Values ::
- ~ascii~
- ~caca~
- ~catimg~
- ~chafa~
- ~jp2a~
- ~iterm2~
- ~off~
- ~pot~
- ~termpix~
- ~pixterm~
- ~tycat~
- ~w3m~
- ~kitty~
- ~ueberzug~
- ~viu~
- flag :: ~--backend~
#+BEGIN_SRC sh
image_backend="kitty"
#+END_SRC
Now, since I indicated I wanted an image engine, Ill indicate neofetch which
image to find. Note that ~auto~ will pick the best image source for whatever
image backend is used. In ascii mode, distro ascii art will be used and in an
image mode, your wallpaper will be used.
- Default value :: ~auto~
- Values ::
- ~auto~
- ~ascii~
- ~wallpaper~
- ~/path/to/img~
- ~/path/to/ascii~
- ~/path/to/dir/~
- ~command output (neofetch --ascii "$(fortune | cowsay -W 30)")~
- Flag :: ~--source~
#+BEGIN_SRC sh
image_source="$HOME/org/config/img/leon.png"
#+END_SRC
The default image size will probably not be correct since it is half the
terminal width and I have an ultrawide monitor, so Ill need to set it manually.
- Default value :: ~auto~
- Values ::
- ~auto~
- ~00px~
- ~00%~
- ~none~
- Flag :: ~--image-size~ or ~--size~
#+BEGIN_SRC sh
image_size="224px"
#+END_SRC
**** Kernel
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-OS-Kernel-658cedce
:END:
The variable below can shorten the output ofh the ~kernel~ function.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--kernel_shorthand~
- Supports :: Everything except *BSDs (except PacBSD and PC-BSD)
- Examples ::
- on :: ~4.8.9-1-ARCH~
- off :: ~Linux 4.8.9-1-ARCH~
#+begin_src sh
kernel_shorthand="off"
#+end_src
**** OS Architecture
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-OS-OS_Architecture-2f60c93c
:END:
This variable can show or hide the OS architecture in the ~distro~ output.
- Default value :: ~"off"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--os_arch~
- Examples ::
- on :: ~Arch Linux x86_64~
- off :: ~Arch Linux~
#+begin_src sh
os_arch="off"
#+end_src
**** Packages
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-OS-Packages-f836a58d
:END:
It is possible to show or hide Package Manager names.
- Default :: ~'tiny'~
- Values :: ~'on'~ / ~'tiny'~ / ~'off'~
- Flag :: ~--package_managers~
- Example ::
- on :: ~'998 (pacman), 8 (flatpak), 4 (snap)'~
- tiny :: ~'908 (pacman, flatpak, snap)'~
- off :: ~'908'~
#+BEGIN_SRC sh
package_managers="on"
#+END_SRC
**** Shell
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Shell-76439406
:END:
***** Shell path
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Shell-Shell_path-9eda636d
:END:
This allows to show either the path of the users shell, or simply its name.
- Default value :: ~"off"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--shell_path~
- Examples ::
- on :: ~/bin/bash~
- off :: ~bash~
#+begin_src sh
shell_path="off"
#+end_src
***** Shell version
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Shell-Shell_version-03964bb3
:END:
This allows to show the shells version in the output of ~shell~.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--shell_version~
- Examples ::
- on :: ~bash 4.4.5~
- off :: ~bash~
#+begin_src sh
shell_version="off"
#+end_src
*** Uptime
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Uptime-a7b5361a
:END:
This variable can shorten the output of the ~uptime~ function. ~on~ shortens
it a bit, while ~tiny~ shortens it greatly.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"tiny"~
- ~"off"~
- Flag :: ~--uptime_shorthand~
- Examples ::
- on :: ~2 days, 10 hours, 3 mins~
- off :: ~2 days, 10 hours, 3 minutes~
- tiny :: ~2d 10h 3m~
#+begin_src sh
uptime_shorthand="on"
#+end_src
*** IP address
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-IP_address-26df5e1d
:END:
It is possible to display the machines public IP address with the function
~ip~. The value below allows the user to change the website used to fetch it.
- Default value :: ~"http://ident.me"~
- Value :: ~"url"~
- Flag :: ~--ip_host~
#+begin_src sh
public_ip_host="http://ident.me"
#+end_src
# - Default value :: ~""~
# - Values ::
# - ~""~
# - ~""~
# - Flag :: ~""~
# - Supports ::
# - Examples ::
# - on :: ~~
# - off :: ~~
# #+begin_src sh
# #+end_src
*** Theming
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Theming-ba7f1ccd
:END:
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
default font.
**** Shorten output
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Theming-Shorten_output-cbef1fa4
:END:
With this value, it is possible to shorten the output of the computers theming.
- Default value :: ~"off"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--gtk_shorthand~
- Examples ::
- on :: ~Numix, Adwaita~
- off :: ~Numix [GTK2], Adwaita [GTK3]~
#+begin_src sh
gtk_shorthand="on"
#+end_src
**** Enable or disable theming display for GTK2
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Theming-Enable_or_disable_theming_display_for_GTK2-f4398571
:END:
It is possible to explicitely show or hide the computers theming with GTK2 with
this variable.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--gtk2~
- Examples ::
- on :: ~Numix [GTK2], Adwaita [GTK3]~
- off :: ~Adwaita [GTK3]~
#+begin_src sh
gtk2="off"
#+end_src
**** Enable or disable theming display for GTK3
:PROPERTIES:
:CUSTOM_ID: Information_settings-Software-Theming-Enable_or_disable_theming_display_for_GTK3-c4070e66
:END:
The same variable as above is also available for GTK3.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--gtk3~
- Examples ::
- on :: ~Numix [GTK2], Adwaita [GTK3]~
- off :: ~Numix [GTK2]~
#+begin_src sh
gtk3="off"
#+end_src
** Hardware
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-de7ed990
:END:
*** CPU
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-eb0bcd7d
:END:
**** CPU brand
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_brand-5b25776b
:END:
With these variables, it is possible to show or hide the brand of a CPU in the
~cpu~ output.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--cpu_brand~
- Examples ::
- on :: ~Intel i7-6500U~
- off :: ~i7-6500U~
#+begin_src sh
cpu_brand="off"
#+end_src
**** CPU speed
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_speed-2bf6e5f7
:END:
With this variable, it is possible to show or hide the speed of the CPU.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--cpu_speed~
- Examples ::
- on :: ~Intel i7-6500U (4) @ 3.1GHz~
- off :: ~Intel i7-6500U (4)~
#+begin_src sh
cpu_speed="off"
#+end_src
**** CPU speed type
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_speed_type-a24de48f
:END:
This allows Neofetch to know what type of speed it has to fetch regarding the
machines CPU. Any file in ~/sys/devices/system/cpu/cpu0/cpufreq~ can be used as
a value.
- Default value :: ~"bios_limit"~
- Values ::
- ~"scaling_cur_freq"~
- ~"scaling_min_freq"~
- ~"scaling_max_freq"~
- ~"bios_limit"~
- Flag :: ~--speed_type~
- Supports :: Linux with ~cpufreq~
#+begin_src sh
speed_type="bios_limit"
#+end_src
**** CPU speed shorthand
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_speed_shorthand-0d15fe08
:END:
This value allows showing sorter CPU speed with fewer digits. This flag
is not supported in systems with CPU speed below 1GHz.
- Default value :: ~"off"~
- Values ::
- ~"on"~
- ~"on"~
- Flag :: ~--speed_shorthand~
- Examples ::
- on :: ~i7-6500U (4) @ 3.1GHz~
- off :: ~i7-6500U (4) @ 3.100GHz~
#+begin_src sh
speed_shorthand="on"
#+end_src
**** CPU cores
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_cores-30177354
:END:
With this variable, it is possible to display the number of cores that are
available in the CPU.
- Default value :: ~"logical"~
- Values ::
- ~"logical"~
- ~"physical"~
- ~"off"~
- Flag :: ~--cpu_cores~
- Supports :: ~physical~ does not work on BSD.
- Examples ::
- logical :: ~Intel i7-6500U (4) @ 3.1GHz~ (All virtual cores)
- physical :: ~Intel i7-6500U (2) @ 3.1GHz~ (All physical cores)
- off :: ~Intel i7-6500U @ 3.1GHz~
#+begin_src sh
cpu_cores="off"
#+end_src
**** CPU temperature
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-CPU-CPU_temperature-a22e522c
:END:
This variable allows the user to hide or show the CPUs temperature, and if
shown, the user can display it in Celcius or Farenheit degrees. For FreeBSD and
NetBSD-based systems, youll need to enable the ~coretemp~ kernel module. This
only supports newer Intel processors.
- Default value :: ~"off"~
- Values ::
- ~"C"~
- ~"F"~
- ~"off"~
- Flag :: ~--cpu_temp~
- Supports :: Linux, BSD
- Examples ::
- C :: ~Intel i7-6500U (4) @ 3.1GHz [27.2°C]~
- F :: ~Intel i7-6500U (4) @ 3.1GHz [82.0°F]~
- off :: ~Intel i7-6500U (4) @ 3.1GHz~
#+begin_src sh
cpu_temp="off"
#+end_src
*** GPU
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-GPU-2c842575
:END:
The function responsible for displaying information regarding the GPUs is ~gpu~.
It will try to list all available GPUs and display what it knows about them.
**** GPU brand
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-GPU-GPU_brand-6e2da615
:END:
This value allows the user to hide or show the brand of their GPU in the output
of ~gpu~.
- Default value :: ~"on"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--gpu_brand~
- Supports ::
- Examples ::
- on :: ~AMD HD 7950~
- off :: ~HD 7950~
#+begin_src sh
gpu_brand="off"
#+end_src
**** Which GPU to display
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-GPU-Which_GPU_to_display-f40d3aac
:END:
This allows the user to choose which GPU appears in the output of the function
~gpu~.
- Default value :: ~"all"~
- Values ::
- ~"all"~
- ~"dedicated"~
- ~"integrated"~
- Flag :: ~--gpu_type~
- Supports :: Linux
- Examples ::
- all ::
#+BEGIN_SRC text
GPU1: AMD HD 7950
GPU2: Intel Integrated Graphics
#+END_SRC
- dedicated :: ~GPU1: AMD HD 7950~
- integrated :: ~GPU1: Intel Integrated Graphics~
#+begin_src sh
gpu_type="all"
#+end_src
*** Resolution
:PROPERTIES:
:CUSTOM_ID: Information_settings-Hardware-Resolution-b768f865
:END:
This will try to list all the connected screens and display their resolution
individually. It is possible to display the refresh rate or to hide it.
- Default value :: ~"off"~
- Values ::
- ~"on"~
- ~"off"~
- Flag :: ~--refresh_rate~
- Supports :: Does not work on Windows
- Examples ::
- on :: ~1920x1080 @ 60Hz~
- off :: ~1920x1080~
#+begin_src sh
refresh_rate="off"
#+end_src

View File

@ -1,621 +0,0 @@
#+title: Picom (Compton) Configuration
#+setupfile: headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundraks Picom Configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundraks Picom Configuration" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the Picom configuration of Phundrak" />
#+PROPERTY: header-args:conf :exports code :mkdirp yes :tangle ~/.config/picom/picom.conf
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-a5320326
:END:
Picom is the successor to Compton, a standalone compositor for Xorg. It provides
compositing for WM that do not provide any, such as i3. I am currently using
[[https://github.com/ibhagwan/picom][ibhagwans fork of compton]] which provides the ~dual-kawase~ blur from [[https://github.com/tryone144/compton][tryones
compton]] and rounded corners from [[https://github.com/sdhand/picom][sdhands compton]].
* Shadows
:PROPERTIES:
:CUSTOM_ID: Shadows-f4ffbb27
:END:
The following enables client-side shadows on windows. Note desktop windows
(windows with ~_NET_WM_WINDOW_TYPE_DESKTOP~) never get shadow, unless explicitly
requested using the wintypes option.
#+BEGIN_SRC conf
shadow = true;
#+END_SRC
The blur radius for shadows is measured in pixels, and it defaults to
12px.
#+BEGIN_SRC conf
shadow-radius = 17;
#+END_SRC
Picom can also apply some level of opacity on shadows.
| Default value | ~0.75~ |
| Min value | ~0.0~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
shadow-opacity = 0.75
#+END_SRC
The left and top offsets for shadows are expressed in pixels.
| Default value | ~-15~ |
#+BEGIN_SRC conf
shadow-offset-x = -16;
shadow-offset-y = -16;
#+END_SRC
It is possible to set the color of the shadow with the string contained in
~shadow-color~ with a hexadecimal value. I havent included these values in my
config, but this value will override any value in ~shadow-red~, ~shadow-green~,
or ~shadow-blue~.
#+BEGIN_SRC conf
shadow-color = "#171A20"
#+END_SRC
It is possible to specify a list of conditions of windows that should
have no shadow.
| Default value | ~[]~ |
#+BEGIN_SRC conf
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
#+END_SRC
It is also possible to specify an X geometry that describes the region in which
shadows should not be painted in, such as a dock window region. For example,
#+BEGIN_SRC conf :tangle no
# shadow-exclude-reg = "x10+0+0"
#+END_SRC
would make the 10 pixels at the bottom of the screen not have any shadow painted
on.
| Default value | ~""~ |
#+BEGIN_SRC conf :tangle no
shadow-exclude-reg = ""
#+END_SRC
Finally, it is also possible to crop the shadow of a window fully on a
particular Xinerama screen to the screen.
- Default value :: ~false~
#+BEGIN_SRC conf
xinerama-shadow-crop = false
#+END_SRC
** Deprecated options
:PROPERTIES:
:HEADER-ARGS:conf: :tangle no
:CUSTOM_ID: Shadows-Deprecated_options-da215d5a
:END:
Options in this subheader *will not* be exported to my configuration file.
Thanks to this value, Picom can avoid drawing shadows on dock or panel windows.
This option is deprecated, and users should use the ~wintypes~ option in their
config file instead.
| Default value | ~false~ |
#+BEGIN_SRC conf
no-dock-shadow = false;
#+END_SRC
This option allows Picom not to draw on drag-and-drop windows. It is
deprecated, and users should use the ~wintypes~ option in their config
file instead.
| Default value | ~false~ |
#+BEGIN_SRC conf
no-dnd-shadow = false;
#+END_SRC
~shadow-ignore-shaped~ is also deprecated. It used to indicate Picom not to
paint shadows on shaped windows. Note shaped windows here means windows setting
their shape through X Shape extension. Those using ARGB background are beyond
Picoms control. Since it is deprecated, you could instead use
#+BEGIN_SRC conf :tangle no
shadow-exclude = 'bounding_shaped'
#+END_SRC
or
#+BEGIN_SRC conf :tangle no
shadow-exclude = 'bounding_shaped && !rounded_corners'
#+END_SRC
| Default value | ~""~ |
#+BEGIN_SRC conf :tangle no
shadow-ignore-shaped = ""
#+END_SRC
* Rounded corners
:PROPERTIES:
:CUSTOM_ID: Rounded_corners-33bfcd20
:END:
Here we can see the declaration of the corners radius:
#+BEGIN_SRC conf
corner-radius = 10;
#+END_SRC
It is also possible to exclude some windows from getting their corners rounded.
I personally excluded any window generated by AwesomeWM.
#+BEGIN_SRC conf
rounded-corners-exclude = [
"_NET_WM_WINDOW_TYPE@[0]:a = '_NET_WM_WINDOW_TYPE_DOCK'"
];
#+END_SRC
* Fading
:PROPERTIES:
:CUSTOM_ID: Fading-419d8047
:END:
Picom has the ability to create some fading effects on windows when opening or
closing or when the opacity changes. The following parameter toggles this
feature on or off. However, its behavior can be changed with
~no-fading-openclose~.
| Default value | ~false~ |
#+BEGIN_SRC conf
fading = true
#+END_SRC
These values control the opacity change between steps while fading in
and out.
| Default value | ~0.028~ (fade-in), ~0.03~ (fade-out) |
| Min value | ~0.01~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
fade-in-step = 0.25;
fade-out-step = 0.23;
#+END_SRC
This value represents the time between steps in fade steps, in milliseconds.
| Default value | ~10~ |
| Min value | ~1~ |
#+BEGIN_SRC conf
fade-delta = 20;
#+END_SRC
It is possible to exclude some windows that should not be faded with a specified
list of conditions.
| Default value | ~[]~ |
#+BEGIN_SRC conf
fade-exclude = [ "class_g = 'mpv'" ];
#+END_SRC
This option allows Picom not to create any fade on windows opening or closing.
| Default value | ~false~ |
#+BEGIN_SRC conf
no-fading-openclose = true;
#+END_SRC
Finally, this option is a workaround for Openbox, Fluxbox and others by not
fading destroyed ARGB windows with WM frame.
| Default value | ~false~ |
#+BEGIN_SRC conf
no-fading-destroyed-argb = false
#+END_SRC
* Transparency and opacity
:PROPERTIES:
:CUSTOM_ID: Transparency_and_opacity-6c6b36d2
:END:
Picom is also able to create some opacity or transparency for windows, depending
on their state or on some user-defined rules. For instance, the following value
describes the opacity of inactive windows.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
inactive-opacity = 0.8;
#+END_SRC
On the other hand, it is possible to declare a default opacity for active
windows.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
active-opacity = 1;
#+END_SRC
This however describes the opacity of window titlebars and borders.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
frame-opacity = 1.0;
#+END_SRC
~menu-opacity~ describes the opacity for dropdown menus and popup menus.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
# menu-opacity = 0.9;
#+END_SRC
~inactive-opacity-override~ allows the user to let inactive opacity set by ~-i~
override the ~_NET_WM_OPACITY_ values of windows.
| Default value | ~true~ |
#+BEGIN_SRC conf
inactive-opacity-override = true;
#+END_SRC
While it is possible to alter opacity on inactive windows, it is also possible
to dim them.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
# inactive-dim = 1.0
#+END_SRC
It is also possible to use a fixed inactive dim value, instead of adjusting
according to window opacity.
| Default value | ~1.0~ |
| Min value | ~0.1~ |
| Max value | ~1.0~ |
#+BEGIN_SRC conf
# inactive-dim-fixed = 1.0
#+END_SRC
It is also possible to specify a list of conditions of windows that should
always be considered focused.
| Default value | ~[]~ |
#+BEGIN_SRC conf
focus-exclude = [
"class_g = 'mpv'",
"class_g = 'qemu'",
"class_g = 'Qemu-system-x86_64'"
];
#+END_SRC
The user can also specify a list of opacity rules, in the format
~PERCENT:PATTERN~, like ~50:name *= "Firefox"~ . ~picom-trans~ is recommended
over this. Note we don't make any guarantee about possible conflicts with other
programs that set ~_NET_WM_WINDOW_OPACITY~ on frame or client windows.
| Default value | ~[]~ |
#+BEGIN_SRC conf
opacity-rule = [];
#+END_SRC
* Background blurring
:PROPERTIES:
:CUSTOM_ID: Background_blurring-55835066
:END:
The following are the parameters for background blurring, see the \*BLUR\*
section for more information.
#+BEGIN_SRC conf
blur: {
method = "dual_kawase";
strength = 7;
background = false;
background-frame = false;
background-fixed = false;
}
#+END_SRC
This value enables or disables the blur for the background of semi-transparent
or ARGB windows. It has bad performances though, with driver-dependent behavior.
The name of the switch may change without prior notifications.
| Default value | ~false~ |
#+BEGIN_SRC conf
blur-background = true;
#+END_SRC
Blur background of windows when the window frame is not opaque. If true, this
implies the value ~true~ for ~blur-background~.
| Default value | ~false~ |
#+BEGIN_SRC conf
blur-background-frame = true;
#+END_SRC
The following determines whether to use fixed blur strength rather than
adjusting according to window opacity.
| Default value | ~false~ |
#+BEGIN_SRC conf
blur-background-fixed = false;
#+END_SRC
Specify the blur convolution kernel, with the format
~"5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"~.
| Default value | ~""~ |
#+BEGIN_SRC conf
# blur-kern = "3x3box";
#+END_SRC
It is possible to write exclude conditions for background blur.
| Default value | ~[]~ |
#+BEGIN_SRC conf
blur-background-exclude = [
"window_type = 'desktop'",
"class_g = 'Polybar'",
"class_g = 'discord-overlay'",
"_GTK_FRAME_EXTENTS@:c"
];
#+END_SRC
* General settings
:PROPERTIES:
:CUSTOM_ID: General_settings-41398de7
:END:
Daemonize process. Fork to background after initialization. Can cause
issues with certain (badly-written) drivers.
| Default value | ~false~ |
#+BEGIN_SRC conf
daemon = true;
#+END_SRC
Picom has three backends it can use: ~xrender~, ~glx~, and ~xr_glx_hybrid~. GLX
backend is typically much faster but depends on a sane driver.
| Default value | ~xrender~ |
#+BEGIN_SRC conf
backend = "glx";
#+END_SRC
This enables or disables VSync.
| Default value | ~false~ |
#+BEGIN_SRC conf
vsync = true;
#+END_SRC
Enable remote control via D-Bus. See the *D-BUS API* section below for more
details.
| Default value | ~false~ |
#+BEGIN_SRC conf
dbus = false;
#+END_SRC
Try to detect WM windows (a non-override-redirect window with no child that has
~WM_STATE~) and markz them as active.
| Default value | ~false~ |
#+BEGIN_SRC conf
mark-wmwin-focused = true;
#+END_SRC
Mark override-redirect windows that doesn't have a child window with ~WM_STATE~
focused.
| Default value | ~false~ |
#+BEGIN_SRC conf
mark-ovredir-focused = true;
#+END_SRC
Try to detect windows with rounded corners and don't consider them shaped
windows. The accuracy is not very high, unfortunately.
| Default value | ~false~ |
#+BEGIN_SRC conf
detect-rounded-corners = true;
#+END_SRC
Detect ~_NET_WM_OPACITY~ on client windows, useful for window managers not
passing ~_NET_WM_OPACITY~ of client windows to frame windows.
| Default value | ~false~ |
#+BEGIN_SRC conf
detect-client-opacity = true;
#+END_SRC
Limit picom to repaint at most once every 1 / ~refresh_rate~ second to
boost performance. This should not be used with ~vsync
drm/opengl/opengl-oml~ as they essentially do sw-opti's job already,
unless you wish to specify a lower refresh rate than the actual value.
| Default value | ~""~ |
#+BEGIN_SRC conf
# sw-opti =;
#+END_SRC
Use EWMH ~_NET_ACTIVE_WINDOW~ to determine currently focused window, rather than
listening to ~FocusIn~/~FocusOut~ event. Might have more accuracy, provided that
the WM supports it.
| Default value | ~false~ |
#+BEGIN_SRC conf
# use-ewmh-active-win = false;
#+END_SRC
Unredirect all windows if a full-screen opaque window is detected, to
maximize performance for full-screen windows. Known to cause
flickering when redirecting/unredirecting windows. =paint-on-overlay=
may make the flickering less obvious.
| Default value | ~false~ |
#+BEGIN_SRC conf
unredir-if-possible = false;
#+END_SRC
Delay before unredirecting the window, in milliseconds.
| Default value | ~0~ |
#+BEGIN_SRC conf
unredir-if-possible-delay = 0;
#+END_SRC
Conditions of windows that shouldn't be considered full-screen for unredirecting
screen.
| Default value | ~[]~ |
#+BEGIN_SRC conf
unredir-if-possible-exclude = [];
#+END_SRC
Use ~WM_TRANSIENT_FOR~ to group windows, and consider windows in the same group
focused at the same time.
| Default value | ~false~ |
#+BEGIN_SRC conf
detect-transient = true;
#+END_SRC
Use ~WM_CLIENT_LEADER~ to group windows, and consider windows in the same group
focused at the same time. ~WM_TRANSIENT_FOR~ has higher priority if
detect-transient is enabled, too.
| Default value | ~false~ |
#+BEGIN_SRC conf
detect-client-leader = true;
#+END_SRC
Resize damaged region by a specific number of pixels. A positive value enlarges
it while a negative one shrinks it. If the value is positive, those additional
pixels will not be actually painted to screen, only used in blur calculation,
and such. (Due to technical limitations, with use-damage, those pixels will
still be incorrectly painted to screen.) Primarily used to fix the line
corruption issues of blur, in which case you should use the blur radius value
here (e.g. with a 3x3 kernel, you should use ~--resize-damage 1~, with a 5x5 one
you use ~--resize-damage 2~, and so on). May or may not work with
~--glx-no-stencil~. Shrinking doesn't function correctly.
| Default value | ~1~ |
#+BEGIN_SRC conf
resize-damage = 1;
#+END_SRC
Specify a list of conditions of windows that should be painted with inverted
color. Resource-hogging, and is not well tested.
| Default value | ~[]~ |
#+BEGIN_SRC conf
invert-color-include = [];
#+END_SRC
Disable the use of damage information. This cause the whole screen to be redrawn
everytime, instead of the part of the screen has actually changed. Potentially
degrades the performance, but might fix some artifacts. The opposing option is
use-damage
| Default value | ~false~ |
#+BEGIN_SRC conf
use-damage = false;
#+END_SRC
Use X Sync fence to sync clients' draw calls, to make sure all draw calls are
finished before picom starts drawing. Needed on nvidia-drivers with GLX backend
for some users.
| Default value | ~false~ |
#+BEGIN_SRC conf
xrender-sync-fence = false;
#+END_SRC
Force all windows to be painted with blending. Useful if you have a
glx-fshader-win that could turn opaque pixels transparent.
| Default value | ~false~ |
#+BEGIN_SRC conf
force-win-blend = false;
#+END_SRC
Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is
fullscreen based only on its size and coordinates.
| Default value | ~false~ |
#+BEGIN_SRC conf
no-ewmh-fullscreen = false;
#+END_SRC
Dimming bright windows so their brightness doesn't exceed this set
value. Brightness of a window is estimated by averaging all pixels in
the window, so this could come with a performance hit. Setting this to
1.0 disables this behaviour. Requires ~--use-damage~ to be disabled.
| Default value | ~1.0~ |
#+BEGIN_SRC conf
max-brightness = 1.0;
#+END_SRC
Make transparent windows clip other windows like non-transparent windows do,
instead of blending on top of them.
| Default value | ~false~ |
#+BEGIN_SRC conf
transparent-clipping = false;
#+END_SRC
Set the log level. Possible values in increasing level of importance are:
- ~trace~
- ~debug~
- ~info~
- ~warn~
- ~error~
Case doesn't matter. If using the "TRACE" log level, it's better to
log into a file using ~--log-file~, since it can generate a huge stream
of logs.
| Default value | ~"debug"~ |
#+BEGIN_SRC conf
log-level = "warn";
#+END_SRC
Set the log file. If ~--log-file~ is never specified, logs will be
written to stderr. Otherwise, logs will to written to the given file,
though some early logs might still be written to the stderr. When
setting this option from the config file, it is recommended to use an
absolute path.
| Default value | ~''~ |
#+BEGIN_SRC conf
# log-file = '/path/to/your/log/file';
#+END_SRC
Show all X errors (for debugging)
| Default value | ~false~ |
#+BEGIN_SRC conf
# show-all-xerrors = false;
#+END_SRC
Write process ID to a file.
| Default value | ~''~ |
#+BEGIN_SRC conf
# write-pid-path = '/path/to/your/log/file';
#+END_SRC
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in
EWMH standard:
- ~"unknown"~
- ~"desktop"~
- ~"dock"~
- ~"toolbar"~
- ~"menu"~
- ~"utility"~
- ~"splash"~
- ~"dialog"~
- ~"normal"~
- ~"dropdown_menu"~
- ~"popup_menu"~
- ~"tooltip"~
- ~"notification"~
- ~"combo"~
- ~"dnd"~
Following per window-type options are available:
- fade, shadow :: Controls window-type-specific shadow and fade settings.
- opacity :: Controls default opacity of the window type.
- focus :: Controls whether the window of this type is to be always considered
focused. (By default, all window types except "normal" and "dialog" has this
on.)
- full-shadow :: Controls whether shadow is drawn under the parts of the window
that you normally won't be able to see. Useful when the window has parts of it
transparent, and you want shadows in those areas.
- redir-ignore :: Controls whether this type of windows should cause
screen to become redirected again after being unredirected. If you
have =unredir-if-possible= set, and doesn't want certain window to
cause unnecessary screen redirection, you can set this to =true=.
#+BEGIN_SRC conf
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 0.8; }
};
#+END_SRC
** GLX backend-specific options
:PROPERTIES:
:CUSTOM_ID: General_settings-GLX_backend-specific_options-43892981
:END:
Avoid using stencil buffer, useful if you don't have a stencil buffer. Might
cause incorrect opacity when rendering transparent content (but never
practically happened) and may not work with blur-background. Tests show a 15%
performance boost. Recommended.
| Default value | ~false~ |
#+BEGIN_SRC conf
glx-no-stencil = true;
#+END_SRC
Avoid rebinding pixmap on window damage. Probably could improve performance on
rapid window content changes, but is known to break things on some drivers
(LLVMpipe, xf86-video-intel, etc.). Recommended if it works.
| Default value | ~false~ |
#+BEGIN_SRC conf
glx-no-rebind-pixmap = false;
#+END_SRC
Use specified GLSL fragment shader for rendering window contents. See
~compton-default-fshader-win.glsl~ and
~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples.
| Default value | ~''~ |
#+BEGIN_SRC conf :tangle no
glx-fshader-win = '';
#+END_SRC

View File

@ -1,113 +0,0 @@
#+TITLE: Rust format config
#+setupfile: headers
#+OPTIONS: unique-id:t
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's Rust format config" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's Rust format config" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the Rust format config file of Phundrak" />
#+PROPERTY: header-args:toml :mkdirp yes :tangle ~/.rustfmt.toml
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-465e99fe
:END:
The ~.rustfmt.toml~ file located in the ~$HOME~ directory is a global
configuration file for Rusts code formatters, such as ~rustfmt~. In this file,
you can find how my Rust code is always formatted.
* General settings
:PROPERTIES:
:CUSTOM_ID: General_settings-7f5cb2f6
:END:
First, we are using the 2018 edition of Rust.
#+BEGIN_SRC toml
edition = "2018"
#+END_SRC
Put single-expression functions on a single line.
#+BEGIN_SRC toml
fn_single_line = true
#+END_SRC
Format string literals where necessary.
#+BEGIN_SRC toml
format_strings = true
#+END_SRC
Maximum width of each line
#+BEGIN_SRC toml
max_width = 80
#+END_SRC
Merge multiple imports into a single nested import.
#+BEGIN_SRC toml
merge_imports = true
#+END_SRC
* Structs and Enums
:PROPERTIES:
:CUSTOM_ID: Structs_and_Enums-6a2a856d
:END:
The maximum length of enum variant having discriminant, that gets vertically
aligned with others. Variants without discriminants would be ignored for the
purpose of alignment.
Note that this is not how much whitespace is inserted, but instead the longest
variant name that doesn't get ignored when aligning.
#+BEGIN_SRC toml
enum_discrim_align_threshold = 20
#+END_SRC
The maximum diff of width between struct fields to be aligned with each other.
#+BEGIN_SRC toml
struct_field_align_threshold = 20
#+END_SRC
Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
#+BEGIN_SRC toml
reorder_impl_items = true
#+END_SRC
* Comments
:PROPERTIES:
:CUSTOM_ID: Comments-b1904bb0
:END:
Convert ~/* */~ comments to ~//~ comments where possible.
#+BEGIN_SRC toml
normalize_comments = true
#+END_SRC
Break comments to fit on the line.
#+BEGIN_SRC toml
wrap_comments = true
#+END_SRC
Report ~FIXME~ items in comments.
#+BEGIN_SRC toml
report_fixme = "Always"
#+END_SRC
Report ~TODO~ items in comments.
#+BEGIN_SRC toml
todo = "Always"
#+END_SRC
* Documentation
:PROPERTIES:
:CUSTOM_ID: Documentation-0c7981c7
:END:
Format code snippet included in doc comments.
#+BEGIN_SRC toml
format_code_in_doc_comments = true
#+END_SRC
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
#+BEGIN_SRC toml
normalize_doc_attributes = true
#+END_SRC
* Whitespace
:PROPERTIES:
:CUSTOM_ID: Whitespace-e8792b44
:END:
Use tab characters for indentation, spaces for alignment.
#+BEGIN_SRC toml
hard_tabs = false
#+END_SRC
Number of spaces per tab.
#+BEGIN_SRC toml
tab_spaces = 4
#+END_SRC
I want newlines to always be Unix style.
#+BEGIN_SRC toml
newline_style = "Unix"
#+END_SRC

View File

@ -1,21 +0,0 @@
#+TITLE: Sitemap for project config-website-org
- [[file:bootstrap.org][Arch Linux, Phundrak-flavored]]
- [[file:desktop.org][Desktop settings]]
- [[file:emacs.org][Emacs Configuration]]
- [[file:bin.org][Executable scripts]]
- [[file:fish.org][Fish config]]
- [[file:mpd.org][MPD Configuration]]
- [[file:neofetch.org][Neofetch configuration]]
- [[file:index.org][Phundraks dotfiles]]
- [[file:picom.org][Picom (Compton) Configuration]]
- [[file:rustfmt.org][Rust format config]]
- [[file:stumpwm.org][StumpWM config]]
- Deprecated
- [[file:Deprecated/awesome.org][AwesomeWM configuration]]
- [[file:Deprecated/nano.org][Nano configuration]]
- [[file:Deprecated/polybar.org][Polybar config]]
- [[file:Deprecated/spacemacs.org][Spacemacs Configuration]]
- [[file:Deprecated/i3.org][i3 config]]
- WIP
- [[file:WIP/ncmpcpp.org][Ncmpcpp Configuration]]

File diff suppressed because it is too large Load Diff

View File

@ -1,313 +0,0 @@
#+title: Tmux
#+setupfile: headers
#+options: unique-id:t
#+html_head: <meta name="description" content="Phundraks Tmux Configuration" />
#+html_head: <meta property="og:title" content="Phundraks Tmux Configuration" />
#+html_head: <meta property="og:description" content="Phundraks Tmux Configuration Detailed" />
#+property: header-args:tmux :mkdirp yes :lexical t :exports code
#+property: header-args:tmux+ :tangle ~/.config/tmux/tmux.conf
#+property: header-args:tmux+ :mkdirp yes :noweb yes
* Introduction
:PROPERTIES:
:CUSTOM_ID: Introduction-elnbk9c1huj0
:END:
Tmux is one of the widest known terminal multiplexers along with
=screen=. I find it useful when I dont want to bother with panes in my
[[https://sw.kovidgoyal.net/kitty/][kitty]] terminal.
Be aware this configuration is mostly keybinds.
* Setting sane configurations
:PROPERTIES:
:CUSTOM_ID: Settingsaneconfigurations-7mrbk9c1huj0
:END:
By default, Tmux does not support all the colours your terminal may
support, so we need to tell it to set true colours..
#+begin_src tmux
set-option -sa terminal-overrides ",xterm*:Tc"
#+end_src
We can also tell it to enable mouse support. That way, we will be able
to click on Tmux elements and scroll in its panes!
#+begin_src tmux
set -g mouse on
#+end_src
Finally, Ill set ~vi-mode~ for some sane movements.
#+begin_src tmux
set-window-option -g mode-keys vi
#+end_src
* Windows and panes configuration
:PROPERTIES:
:CUSTOM_ID: Windowsandpanesconfiguration-nnelqdd1huj0
:END:
Although I agree in computer science most things should begin with
zero, I find it quite weird to see my first window and my first pane
to be labeled with it rather than one. So, lets pull a Lua on Tmux
and force it to begin with 1 instead of 0.
#+begin_src tmux
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
#+end_src
* Plugins!
:PROPERTIES:
:CUSTOM_ID: Plugins-0550rdd1huj0
:END:
Using [[https://github.com/tmux-plugins/tpm][TPM]], we can use plugins in Tmux! The way I installed it is very simple:
#+begin_src bash
mkdir -p ~/.config/tmux/
git clone https://github.com/tmux-plugins/tpm.git ~/.config/tmux/tpm
#+end_src
Heres a list of the plugins that I use.
#+name: plugins
| Plugin | Why |
|-----------------------+------------------------------------------------------|
| tpm | TPM itself |
| tmux-sensible | Better defaults I cant be bothered to change myself |
| tmux-yank | Better copy/pasting |
| tmux-prefix-highlight | Tell me which prefix Im using |
| tmux-resurrect | Persist tmux sessions across system restarts |
| nordtheme/tmux | Nord theme for Tmux! |
#+begin_src emacs-lisp :var plugins=plugins[,0] :exports code :wrap src tmux
(mapconcat (lambda (plugin)
(format "set -g @plugin '%s'"
(if (string-match-p (quote "/") plugin)
plugin
(concat "tmux-plugins/" plugin))))
plugins
"\n")
#+end_src
#+RESULTS:
#+begin_src tmux
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'nordtheme/tmux'
#+end_src
Lets run TPM right after that.
#+begin_src tmux
run '~/.config/tmux/tpm/tpm'
#+end_src
For restoring processes with =tmux-resurrect=, we must add additional
programs in the =@resurrect-processes= variable. These are:
#+name: resurrect-processes-list
- ="~ncmpcpp -q"=
- =btop=
- =ssh=
#+name: resurrect-processes
#+begin_src emacs-lisp :var processes=resurrect-processes-list :exports none :cache yes
(mapconcat (lambda (process) (string-replace "=" "" process))
processes
" ")
#+end_src
#+RESULTS[4f72312f2da98c81eff2b092779a59c993fa19e2]: resurrect-processes
: "~ncmpcpp -q" btop ssh
#+begin_src tmux :noweb yes
set -g @resurrect-processes '<<resurrect-processes()>>'
#+end_src
* Keybindings
:PROPERTIES:
:CUSTOM_ID: Keybindings-tx80rdd1huj0
:END:
First of all, I dont like prefixing all of my keybindings with ~C-b~,
thats what I use in ~insert-mode~ in Emacs to make the cursor go back.
So instead, lets set meta with space as my prefix.
#+begin_src tmux
unbind C-b
set -g prefix M-Space
bind M-Space send-prefix
#+end_src
Now, I will only add few keybindings on the root prefix that actually
do something immediately, I will mostly add keybindings that will lead
to other prefixes; I prefer by far to have keychords that are a bit
lengthy and mnemonic than some obscure “ ~C-M-&~ is for doing this and
that”.
#+name: std-prefix
| Keybinding | Command | Prefix to go to |
|------------+------------------+-----------------|
| =«= | select-window -p | |
| =»= | select-window -n | |
| =Tab= | | windows |
| =w= | | pane |
| =y= | | copy-mode |
Note I am using the key =w= to access the pane prefix because of how
used to Emacs I am, and in Emacs terminology panes are windows while
tmux windows would be tabs.
#+name: gen-keybinds
#+begin_src emacs-lisp :var keybinds=std-prefix :var prefix="prefix" :exports none
(mapconcat (lambda (keybind)
(format "bind-key -T %s %s %s"
prefix
(string-replace "=" "" (car keybind))
(let* ((command (nth 1 keybind))
(command (if (string= "" command) nil command))
(goto-prefix (nth 2 keybind))
(goto-prefix (if (string= "" goto-prefix) nil (concat "switch-client -T " goto-prefix))))
(if (and command goto-prefix)
(concat command "\\; " goto-prefix)
(or command goto-prefix)))))
keybinds
"\n")
#+end_src
#+RESULTS: gen-keybinds
: bind-key -T prefix « select-window -p
: bind-key -T prefix » select-window -n
: bind-key -T prefix Tab switch-client -T windows
: bind-key -T prefix w switch-client -T pane
: bind-key -T prefix y switch-client -T copy-mode
#+begin_src tmux
<<gen-keybinds()>>
#+end_src
** Panes
:PROPERTIES:
:CUSTOM_ID: KeybindingsPanes-7z99hld1huj0
:END:
As you will see not only here but also lower, I am not using the usual
=hjkl= to navigate around since I am using the [[https://bepo.fr][bépo]] layout. I use
instead the =ctsr= keys.
Below are the keybindings living in the =pane= prefix. Note that calls to
=split-window= have a =-c "#{pane_current_path}"= argument so new panes
open in the same directory as the directory I am currently in.
#+name: pane-prefix
| Keybinding | Command | Prefix to go to |
|------------+-------------------------------------------+-----------------|
| =/= | split-window -h -c "#{pane-current_path}" | |
| =-= | split-window -v -c "#{pane-current_path}" | |
| =c= | select-pane -L | |
| =t= | select-pane -D | |
| =s= | select-pane -U | |
| =r= | select-pane -R | |
| =f= | resize-pane -Z | |
| =.= | | pane-resize |
#+begin_src tmux
<<gen-keybinds(keybinds=pane-prefix, prefix="pane")>>
#+end_src
When it comes to resizing the panes, the keybindings are in their own
prefix referenced above: =pane-resize=. All keybindings will lead to the
same prefix again, which enables the user to type for instance =M-Space
w . r r r r r= in order to call repetitively =resize-pane -R 5=. Hitting
any key that is not part of the current prefix will get us out of it.
#+name: pane-resize-prefix
| Keybinding | Command | Prefix to go to |
|------------+------------------+-----------------|
| c | resize-pane -L 5 | pane-resize |
| t | resize-pane -D 5 | pane-resize |
| s | resize-pane -U 5 | pane-resize |
| r | resize-pane -R 5 | pane-resize |
| C | resize-pane -L | pane-resize |
| T | resize-pane -D | pane-resize |
| S | resize-pane -U | pane-resize |
| R | resize-pane -R | pane-resize |
#+begin_src tmux
<<gen-keybinds(keybinds=pane-resize-prefix, prefix="pane-resize")>>
#+end_src
** Windows
:PROPERTIES:
:CUSTOM_ID: KeybindingsWindows-zg3fjes0luj0
:END:
Since windows are more akin to tabs in Emacs, and I am way more used
to it than Tmux, all keybinds are prefixed with a =Tab=, itself prefixed
with the main prefix.
#+name: windows-prefix
| Keybinding | Command |
|------------+-----------------|
| c | new-window |
| n | next-window |
| p | previous-window |
#+begin_src tmux
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
#+end_src
In order to access more easily the different windows, I want to be able to type =<prefix> TAB <window number>=. However, 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
(let ((keybinds "")
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
(dotimes (i (length keys) keybinds)
(setq keybinds (string-trim
(concat keybinds
"\n"
(format "bind-key -T windows %s select-window -t :=%d"
(nth i keys)
(1+ i)))))))
#+end_src
#+RESULTS:
#+begin_src tmux
bind-key -T windows \" select-window -t :=1
bind-key -T windows « select-window -t :=2
bind-key -T windows » select-window -t :=3
bind-key -T windows ( select-window -t :=4
bind-key -T windows ) select-window -t :=5
bind-key -T windows @ select-window -t :=6
bind-key -T windows + select-window -t :=7
bind-key -T windows - select-window -t :=8
bind-key -T windows / select-window -t :=9
bind-key -T windows * select-window -t :=10
#+end_src
** Copy in vi mode
:PROPERTIES:
:CUSTOM_ID: KeybindingsCopyinvimode-2mjfpie1huj0
:END:
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
copy it. But first, I need to unbind some keys:
#+begin_src tmux
unbind -T copy-mode-vi H
unbind -T copy-mode-vi J
unbind -T copy-mode-vi K
unbind -T copy-mode-vi L
unbind -T copy-mode-vi h
unbind -T copy-mode-vi j
unbind -T copy-mode-vi k
unbind -T copy-mode-vi l
#+end_src
#+name: copy-mode-vi-prefix
| Keybinding | Command |
|------------+----------------------------------------|
| v | send-keys -X begin-selection |
| C-v | send-keys -X rectangle-toggle |
| y | send-keys -X copy-selection-and-cancel |
| C | send-keys -X top-line |
| J | send-keys -X jump-to-backward |
| S | send-keys -X scroll-up |
| R | send-keys -X bottom-line |
| T | send-keys -X scroll-down |
| c | send-keys -X cursor-left |
| t | send-keys -X cursor-down |
| s | send-keys -X cursor-up |
| r | send-keys -X cursor-right |
#+begin_src tmux
<<gen-keybinds(keybinds=copy-mode-vi-prefix, prefix="copy-mode-vi")>>
#+end_src