diff --git a/.config/i3/README.org b/.config/i3/README.org
new file mode 100644
index 0000000..8083917
--- /dev/null
+++ b/.config/i3/README.org
@@ -0,0 +1,932 @@
+# -*- org-confirm-babel-evaluate: nil -*-
+#+TITLE: Phundrak’s i3 config
+#+AUTHOR: Lucien "Phundrak” Cartier-Tilet
+#+EMAIL: lucien@phundrak.com
+#+OPTIONS: H:4 email:t ^:{} auto-id:t
+
+# ### LaTeX ####################################################################
+#+LATEX_CLASS: article
+#+LaTeX_CLASS_OPTIONS: [a4paper,twoside]
+#+LATEX_HEADER_EXTRA: \usepackage{tocloft} \setlength{\cftchapnumwidth}{3em}
+#+LATEX_HEADER_EXTRA: \usepackage{xltxtra,fontspec,xunicode,svg}
+#+LATEX_HEADER_EXTRA: \usepackage[total={17cm,24cm}]{geometry}
+#+LATEX_HEADER_EXTRA: \setromanfont{Charis SIL}
+#+LATEX_HEADER_EXTRA: \usepackage{xcolor}
+#+LATEX_HEADER_EXTRA: \usepackage{hyperref}
+#+LATEX_HEADER_EXTRA: \hypersetup{colorlinks=true,linkbordercolor=red,linkcolor=blue,pdfborderstyle={/S/U/W 1}}
+#+LATEX_HEADER_EXTRA: \usepackage{multicol}
+#+LATEX_HEADER_EXTRA: \usepackage{indentfirst}
+#+LATEX_HEADER_EXTRA: \sloppy
+
+# ### HTML #####################################################################
+#+HTML_DOCTYPE: html5
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+INFOJS_OPT: view:info toc:1 home:https://phundrak.com/config toc:t
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+#+HTML_HEAD_EXTRA:
+
+* Table of Contents :TOC_4_gh:noexport:
+ :PROPERTIES:
+ :CUSTOM_ID: h-c7ab05d0-4c5f-4a4c-8603-4c79e264141c
+ :END:
+
+- [[#presentation][Presentation]]
+- [[#variables-declaration][Variables declaration]]
+ - [[#global][Global]]
+ - [[#floating-windows][Floating windows]]
+- [[#i3-global-settings][i3 global settings]]
+ - [[#mouse-settings][Mouse settings]]
+ - [[#popup-handling][Popup handling]]
+ - [[#behavior-of-workspace-changes][Behavior of workspace changes]]
+ - [[#gaps-and-window-appearance][Gaps and window appearance]]
+- [[#assigning-windows-to-workspaces][Assigning windows to workspaces]]
+- [[#shortcuts][Shortcuts]]
+ - [[#terminal-shortcuts][Terminal shortcuts]]
+ - [[#i3-shortcuts][i3 shortcuts]]
+ - [[#window-and-workspace-management][Window and workspace management]]
+ - [[#managing-how-windows-will-split][Managing how windows will split]]
+ - [[#focus-windows][Focus windows]]
+ - [[#focus-workspaces][Focus workspaces]]
+ - [[#moving-windows][Moving windows]]
+ - [[#moving-containers][Moving containers]]
+ - [[#moving-workspaces][Moving workspaces]]
+ - [[#close-windows][Close windows]]
+ - [[#manage-the-size-of-the-current-window][Manage the size of the current window]]
+ - [[#manage-floating-windows][Manage floating windows]]
+ - [[#scratchpad-and-window-display][Scratchpad and window display]]
+ - [[#gaps-management][Gaps management]]
+ - [[#launching-software][Launching software]]
+ - [[#software-and-command-launcher][Software and command launcher]]
+ - [[#internet-software][Internet software]]
+ - [[#screenshots][Screenshots]]
+ - [[#screen-brightness][Screen brightness]]
+ - [[#media-control][Media control]]
+ - [[#rofi-utilities][Rofi utilities]]
+ - [[#miscellaneous][Miscellaneous]]
+ - [[#screen-management][Screen management]]
+- [[#software-autolaunch][Software autolaunch]]
+
+* Presentation
+ :PROPERTIES:
+ :CUSTOM_ID: h-2b02cfba-4ada-4f75-b522-bfcb8512119c
+ :HEADER-ARGS: :tangle config##yadm.j2
+ :END:
+ =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/resloved/i3][resloved’s fork of i3]], =i3-gaps-rounded=. Some
+ configuration will not work with =i3-gaps=, and some will not work with
+ vanilla =i3= either.
+
+ #+BEGIN_SRC conf :exports none
+ # -*- mode: conf -*-
+ #+END_SRC
+
+* Variables declaration
+ :PROPERTIES:
+ :CUSTOM_ID: h-27f4474a-e037-4e40-b33a-7fe34ca012e3
+ :HEADER-ARGS: :exports code :tangle config##yadm.j2
+ :END:
+** Global
+ :PROPERTIES:
+ :CUSTOM_ID: h-dda00dd9-90e4-460b-b49c-8939c1ae11ce
+ :END:
+ The first I do is declaring the modifier key and the alt key —I don’t 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.
+
+ Let’s 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.
+
+ I’ll 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.
+
+ Finally, some variables hold some long strings for commands I don’t want to
+ have to type multiple times.
+
+ #+NAME: variable-table
+ | variable | value |
+ |-------------+--------------------------------------------------------------------------|
+ | $mod | Mod4 |
+ | $alt | Mod1 |
+ | $up | Up |
+ | $down | Down |
+ | $left | Left |
+ | $right | Right |
+ | $term | st |
+ | $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 |
+ | $gnus | emacsclient --create-frame --eval '(gnus)' -a nvim -n |
+ | $ec | emacsclient --create-frame -a nvim -n |
+
+ Variables will be set like so.
+ #+BEGIN_SRC conf :tangle no :exports code
+ set $term st
+ #+END_SRC
+
+ #+NAME: generate-variables
+ #+BEGIN_SRC python :var variables=variable-table :exports none :tangle no
+ result = ''
+ for line in variables:
+ result += "set {0} {1}\n".format(line[0], line[1])
+ return result
+ #+END_SRC
+
+ Here is the configuration:
+ #+BEGIN_SRC conf :noweb yes
+ <>
+ #+END_SRC
+
+ Now comes the font for the window tiles. Honestly, this setting is useless
+ since we do not see it, but let’s set it anyway.
+ #+BEGIN_SRC conf
+ font DejaVuSans:monospace 8
+ #+END_SRC
+
+** Floating windows
+ :PROPERTIES:
+ :CUSTOM_ID: h-944b65df-c5c6-4f9a-9824-08e063ba20dd
+ :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).
+
+ Let’s declare our floading modyfier. With floating windows, you can move them
+ around by clicking on the window’s borders; but since we don’t 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: h-d9bc7729-d325-4071-8ad9-043ea5b80430
+ :HEADER-ARGS: :exports code :tangle config##yadm.j2
+ :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: h-3ab33a7a-6a31-4a76-a59f-baf7913279b4
+ :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_follow_mouse off
+ #+END_SRC
+
+** Popup handling
+ :PROPERTIES:
+ :CUSTOM_ID: h-64ef3c3b-bc70-4839-9bee-e113df4ee848
+ :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: h-192d7269-eba7-4684-80c7-cb01c32c5f38
+ :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: h-52a82bb4-42b0-4740-aae6-79636072dc62
+ :END:
+ As mentioned in at the beginning of this document, I am using
+ i3-gaps-rounded, which brings rounded corners to i3-gaps, a fork of i3 which
+ brings spacing (gaps) between tiled windows.
+
+ 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 off
+ #+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 outter -10
+ #+END_SRC
+
+ And I am not using i3-gaps-rounded for nothing: my containers that are not
+ tiled will get their corners rounded with a radius of five pixels.
+ #+BEGIN_SRC conf
+ border_radius 5
+ #+END_SRC
+
+ Some parameters are also available when it comes to the colors i3 uses.
+ Honestly, we won’t see these colors much, so let’s 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: h-21870449-7730-4164-8add-167cb4e75218
+ :HEADER-ARGS: :exports code
+ :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,
+ Gimp’s assignment will look like this:
+ #+BEGIN_SRC conf
+ assign [class="Gimp*"] 6
+ #+END_SRC
+
+ #+NAME: generate-workspaces
+ #+BEGIN_SRC python :var workspaces=assignment-table :exports none
+ results = ''
+ for line in workspaces:
+ results += 'assign [class="{0}"] {1}\n'.format(line[1],line[2])
+ return results
+ #+END_SRC
+
+ Here is the configuration:
+ #+BEGIN_SRC conf :noweb yes :tangle config##yadm.j2
+ <>
+ #+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 can make it a conditional thanks to yadm’s jinja2 syntax.
+
+ #+BEGIN_SRC conf :tangle config##yadm.j2
+ {% if YADM_HOSTNAME == 'Marpa' -%}
+ workspace 10 output eDP-1
+ {% endif -%}
+ #+END_SRC
+
+* Shortcuts
+ :PROPERTIES:
+ :CUSTOM_ID: h-b364743d-2ff0-4548-805e-9a9e6efdaddd
+ :HEADER-ARGS: :exports code :noweb yes :tangle config##yadm.j2
+ :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 I’ll 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 python :exports none :var table=[] :eval yes :tangle no
+ results = ''
+ for line in table:
+ results += "bindsym {0} {1}\n".format(line[0], line[1])
+ return results
+ #+END_SRC
+
+** Terminal shortcuts
+ :PROPERTIES:
+ :CUSTOM_ID: h-7dbb2902-29ca-48a7-bfa3-a831b72549f3
+ :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
+ <>
+ #+END_SRC
+
+** i3 shortcuts
+ :PROPERTIES:
+ :CUSTOM_ID: h-22855720-e388-463a-a941-fa8bad2c89c0
+ :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 system’s color configuration from it.
+ #+NAME: wal-sh
+ | shortcut | command | what it does |
+ |-------------+------------------------------------------------+--------------------------------------------------------------|
+ | $mod+Ctrl+w | exec "wal -i ~/Pictures/Wallpapers -o wal-set" | 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 | 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
+ <>
+ <>
+ <>
+ #+END_SRC
+
+** Window and workspace management
+ :PROPERTIES:
+ :CUSTOM_ID: h-cf3b4010-e937-473b-a0c9-9b25b2d3a0ec
+ :END:
+*** Managing how windows will split
+ :PROPERTIES:
+ :CUSTOM_ID: h-e4e57280-91d2-4140-9295-7117cf85ed04
+ :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
+ <>
+ #+END_SRC
+
+*** Focus windows
+ :PROPERTIES:
+ :CUSTOM_ID: h-570eda16-ed4b-4684-a54f-9202e8409ed9
+ :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
+ <>
+ #+END_SRC
+
+*** Focus workspaces
+ :PROPERTIES:
+ :CUSTOM_ID: h-333da167-e91c-48a7-99ef-d45b2af4c220
+ :END:
+ Just like windows, it is also possible to change focus between workspaces,
+ because let’s be honest, most people won’t 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
+ <>
+ #+END_SRC
+
+*** Moving windows
+ :PROPERTIES:
+ :CUSTOM_ID: h-0322384a-6a23-48c9-989b-7ecae53a4e06
+ :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
+ <>
+ #+END_SRC
+
+*** Moving containers
+ :PROPERTIES:
+ :CUSTOM_ID: h-834b2b46-1684-478b-a4d3-1cff8ec2ad2d
+ :END:
+ To move containers between the available screens, you have the following
+ shortcuts:
+ #+NAME: containers-move-sh
+ | shortcut | command | what it does |
+ |-------------------+--------------------------------+------------------------------------------------------------|
+ | $mod+Shift+$left | move container to output left | Moves the container to the screen left of the current one |
+ | $mod+Shift+$down | move container to output down | Moves the container to the screen down of the current one |
+ | $mod+Shift+$up | move container to output up | Moves the container to the screen above the current one |
+ | $mod+Shift+$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
+ <>
+ <>
+ #+END_SRC
+
+*** Moving workspaces
+ :PROPERTIES:
+ :CUSTOM_ID: h-4f79905e-e8e2-4675-918b-1bbe9846b088
+ :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
+ <>
+ #+END_SRC
+
+*** Close windows
+ :PROPERTIES:
+ :CUSTOM_ID: h-05e30514-86c2-42af-8712-dc0bdc30cd3d
+ :END:
+ To close windows, we have two main shortcuts: Alt+F4 and mod+q. The first
+ one is here due to habits, but I don’t really use it anymore due to my main
+ keyboard which doesn’t 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
+ <>
+ #+END_SRC
+
+*** Manage the size of the current window
+ :PROPERTIES:
+ :CUSTOM_ID: h-f730b4c8-8602-426b-a2bc-7dfbbe42e711
+ :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
+ <>
+ mode "resize" {
+ <>
+ }
+ #+END_SRC
+
+*** Manage floating windows
+ :PROPERTIES:
+ :CUSTOM_ID: h-08f738b7-3369-4dbd-98e6-df6d6aa381b8
+ :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 [[#h-944b65df-c5c6-4f9a-9824-08e063ba20dd][here]].
+
+ Here is the configuration:
+ #+BEGIN_SRC conf
+ <>
+ #+END_SRC
+
+*** Scratchpad and window display
+ :PROPERTIES:
+ :CUSTOM_ID: h-92e67454-eccb-4465-8d47-947a1a5d55d9
+ :END:
+ You can think of i3’s 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
+ <>
+ #+END_SRC
+
+*** Gaps management
+ :PROPERTIES:
+ :CUSTOM_ID: h-20c6fc10-984e-411c-acc9-8bc057d2aaa6
+ :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 outter gap size |
+ | $mod+Ctrl+Shift+g | gaps outer current minus 5 | Decrease the outter 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
+ <>
+ #+END_SRC
+
+** Launching software
+ :PROPERTIES:
+ :CUSTOM_ID: h-4839dab5-1cd3-450b-8fb9-2992dd0c4d22
+ :END:
+ A big part of my i3 shortcuts though are related to launching various
+ software. I’ll 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: h-c5e8b03a-a46d-4eef-b514-96794c42621d
+ :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
+ <>
+ #+END_SRC
+
+*** Internet software
+ :PROPERTIES:
+ :CUSTOM_ID: h-e27be13a-4085-4f09-ae90-c48ceb1c4c6f
+ :END:
+ I have a couple of Internet-related software I can launch easily.
+ #+NAME: internet-sh
+ | shortcut | command | what it does |
+ |--------------+---------------------+-----------------------------|
+ | $mod+c | exec firefox | Launch firefox |
+ | $mod+m | exec $gnus | Launch Gnus, my mail client |
+ | Ctrl+Shift+d | exec discord-canary | Launch Discord |
+
+ Hence this configuration:
+ #+BEGIN_SRC conf
+ <>
+ #+END_SRC
+
+*** Screenshots
+ :PROPERTIES:
+ :CUSTOM_ID: h-3e87379d-8476-4d05-b756-b7ee68130390
+ :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
+ <>
+ #+END_SRC
+
+*** Screen brightness
+ :PROPERTIES:
+ :CUSTOM_ID: h-f583f796-c287-4e4f-a88a-205cc1837ff6
+ :END:
+ Here we have four commands for managing our screen’s 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 doesn’t have dedicated keys or
+ we are using a keyboard which doesn’t 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
+ <>
+ #+END_SRC
+
+*** Media control
+ :PROPERTIES:
+ :CUSTOM_ID: h-4002e136-ffab-4819-ae93-1a72b9f995ae
+ :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 ncmpcpp’s playlist editor |
+ | $mod+Shift+v | exec $term ncmpcpp -qs visualizer | Launch ncmpcpp’s 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
+ <>
+ <>
+ <>
+ #+END_SRC
+
+*** Rofi utilities
+ :PROPERTIES:
+ :CUSTOM_ID: h-15f2639e-52d2-467e-83e2-6ab085fa7710
+ :END:
+ We also have some utilities I’ve 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+w | exec wacom-setup | Sets my Wacom Bamboo tablet as being active on the selected screen |
+
+ This gives us the following configuration:
+ #+BEGIN_SRC conf
+ <>
+ #+END_SRC
+
+*** Miscellaneous
+ :PROPERTIES:
+ :CUSTOM_ID: h-7f9ef1f7-da6b-4428-9d8c-f5a5f004c495
+ :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
+ <>
+ #+END_SRC
+
+*** Screen management
+ :PROPERTIES:
+ :CUSTOM_ID: h-ea5bab8e-cb7c-4ccb-8594-c2c319d1f7eb
+ :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. We’ll use yadm’s
+ jinja2 syntax to manage that.
+ #+BEGIN_SRC conf
+ {% if YADM_HOSTNAME == 'Marpa' -%}
+ bindsym $mod+Ctrl+p xrandr --output HDMI-1 --mode 1024x768 --right-of eDP-1
+ {% else %}
+ bindsym $mod+Ctrl+p xrandr --output VGA1 --mode 1024x768 --right-of LVDS1
+ {% endif -%}
+ #+END_SRC
+
+* Software autolaunch
+ :PROPERTIES:
+ :CUSTOM_ID: h-18769c14-2ec0-41a2-9450-dae71714d0f4
+ :HEADER-ARGS: :exports code :noweb yes :tangle config##yadm.j2
+ :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 |
+ |--------------------+----------------------------------------------------------+----------------------------------------|
+ | yes | wal -i "$(< "${HOME}/.cache/wal/wal")" | Sets the wallpaper from last session |
+ | no | xss-lock -- i3lock -fol | Launch power management |
+ | no | dunst -config ~/.config/dunst/dunstrc | Launch notification manager |
+ | no | xrdb $HOME/.Xresources | Load Xresources files |
+ | no | compton -F --opengl --config ~/.config/compton.conf -e 1 | Launch compton |
+ | yes | polybar-launch | Launch polybar |
+ | yes | enable_touch | Set correct touchpad values |
+ | no | syndaemon -i 1.0 -t -k | Set touchpad values |
+ | no | mpd | Launch music server |
+ | no | mpc stop | Stop music from mpd |
+ | no | mpd_discord_richpresence --no-idle --fork | Launch mpd status sharing with Discord |
+ | no | nm-applet | NetworkManager system tray |
+
+ #+NAME: generate-autolaunch
+ #+BEGIN_SRC python :exports none :tangle no :var table=autolaunch
+ results = ''
+ for line in table:
+ results += 'exec_always ' if line[0] == 'yes' else 'exec '
+ results += '--no-startup-id ' + line[1] + '\n'
+ return results
+ #+END_SRC
+
+ My travel laptop has a fingerprint reader which can be used as an
+ authentification method when the root password is asked. Let’s launch our
+ policy kit manager if that is the case:
+ #+BEGIN_SRC conf
+ {% if YADM_HOSTNAME == 'Gampo' -%}
+ exec --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1
+ {% endif -%}
+ <>
+ #+END_SRC
diff --git a/.config/i3/config##yadm.j2 b/.config/i3/config##yadm.j2
index f2d4a71..268dfb1 100644
--- a/.config/i3/config##yadm.j2
+++ b/.config/i3/config##yadm.j2
@@ -1,302 +1,40 @@
# -*- mode: conf -*-
-# Declaration of the mod key
-set $mod Mod4
-set $alt Mod1
-# Font for window titles
-font DejaVuSans:monospace 8
+set $mod Mod4
+set $alt Mod1
+set $up Up
+set $down Down
+set $left Left
+set $right Right
+set $term st
+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 $gnus emacsclient --create-frame --eval '(gnus)' -a nvim -n
+set $ec emacsclient --create-frame -a nvim -n
-# Variables
-set $up Up
-set $down Down
-set $left Left
-set $right Right
-set $exiti3 "i3-nagbar -t warning -m 'Leave i3?' -b 'Yes' 'sudo -A systemctl restart ly'"
-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 $gnus "emacsclient --create-frame --eval '(gnus)' -a nvim -n"
-set $ec "emacsclient --create-frame -a nvim -n"
-set $term st
+font DejaVuSans:monospace 8
-# use Mouse+$mod to drag floating windows to their wanted position
-floating_modifier $mod
-
-################################################################################
-### Clients position ###
-################################################################################
-
-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="discord"] 10
-assign [class="Steam"] 9
-
-################################################################################
-### Shortcuts ###
-################################################################################
-
-# start a terminal
-bindsym $mod+Return exec $term
-bindsym $mod+$alt+Return split h;; exec $term
-bindsym $mod+Shift+Return split v;; exec $term
-
-# kill focused window
-bindsym $mod+q kill
-bindsym $alt+F4 kill
-
-# program launcher
-bindsym $mod+Shift+d exec --no-startup-id j4-dmenu-desktop
-bindsym $mod+d exec --no-startup-id $rofiexec
-
-# change focus
-bindsym $mod+$left focus left
-bindsym $mod+$down focus down
-bindsym $mod+$up focus up
-bindsym $mod+$right focus right
-# move focused window
-bindsym $mod+Shift+$left move left
-bindsym $mod+Shift+$down move down
-bindsym $mod+Shift+$up move up
-bindsym $mod+Shift+$right move right
-# move focused container
-bindsym $mod+Ctrl+$left move container to output left
-bindsym $mod+Ctrl+$down move container to output down
-bindsym $mod+Ctrl+$up move container to output up
-bindsym $mod+Ctrl+$right move container to output right
-# move focused workspace
-bindsym $mod+Ctrl+Shift+$left move workspace to output left
-bindsym $mod+Ctrl+Shift+$down move workspace to output down
-bindsym $mod+Ctrl+Shift+$up move workspace to output up
-bindsym $mod+Ctrl+Shift+$right move workspace to output right
-
-# Change split
-bindsym $mod+h split h
-bindsym $mod+v split v
-bindsym $mod+t split toggle
-
-# enter fullscreen mode for the focused container
-bindsym $mod+f fullscreen toggle
-
-# toggle tiling / floating
-bindsym $mod+Shift+space floating toggle
-# change focus between tiling / floating windows
-bindsym $mod+space focus mode_toggle
-# center floating window
-bindsym Ctrl+$mod+c move position center
-
-# enable sticky window
-bindsym Ctrl+$mod+s sticky toggle
-
-# Scratchpad
-bindsym $mod+Shift+s move scratchpad
-bindsym $mod+s scratchpad show
-
-# switch to workspace
-bindsym $mod+1 workspace 1
-bindsym $mod+2 workspace 2
-bindsym $mod+3 workspace 3
-bindsym $mod+4 workspace 4
-bindsym $mod+5 workspace 5
-bindsym $mod+6 workspace 6
-bindsym $mod+7 workspace 7
-bindsym $mod+8 workspace 8
-bindsym $mod+9 workspace 9
-bindsym $mod+0 workspace 10
-
-# move focused container to workspace
-bindsym $mod+Shift+1 move container to workspace 1
-bindsym $mod+Shift+2 move container to workspace 2
-bindsym $mod+Shift+3 move container to workspace 3
-bindsym $mod+Shift+4 move container to workspace 4
-bindsym $mod+Shift+5 move container to workspace 5
-bindsym $mod+Shift+6 move container to workspace 6
-bindsym $mod+Shift+7 move container to workspace 7
-bindsym $mod+Shift+8 move container to workspace 8
-bindsym $mod+Shift+9 move container to workspace 9
-bindsym $mod+Shift+0 move container to workspace 10
-
-# move to previous or next workspace
-bindsym $mod+Tab workspace next
-bindsym $mod+Shift+Tab workspace previous
-
-{% if YADM_HOSTNAME == 'Marpa' -%}
-# Assign workspace to designated screen
-workspace 10 output eDP-1
-{% endif -%}
-
-# reload the configuration file
-bindsym $mod+Shift+c exec yadm alt && i3-msg reload
-# restart i3 inplace
-bindsym $mod+Shift+r exec yadm alt && i3-msg restart
-# exit i3
-bindsym $mod+Shift+e exec $exiti3
-
-# resize window (you can also use the mouse for that)
-mode "resize" {
- bindsym $right resize grow width 20 px or 10 ppt
- bindsym $left resize shrink width 10 px or 5 ppt
- bindsym $down resize grow height 10 px or 5 ppt
- bindsym $up resize shrink height 10 px or 5 ppt
- bindsym Return mode "default"
- bindsym Escape mode "default"
-}
-bindsym $mod+r mode "resize"
+floating_modifier $mod
mouse_warping none
-# Keyboard layout
-bindsym $mod+$alt+k exec setxkbmap fr bepo
-bindsym $mod+$alt+Shift+k exec setxkbmap fr
-bindsym $mod+$alt+Ctrl+k exec setxkbmap us
+focus_follow_mouse off
-# bindings for MS Natural Ergonomic Keyboard 4000 ##############################
-bindsym XF86Launch5 exec $ec
-bindsym $mod+e exec $ec
-bindsym XF86Launch6 exec firefox
-bindsym $mod+c exec firefox
-bindsym XF86HomePage exec "firefox https://labs.phundrak.fr"
-bindsym XF86Search exec "firefox https://duckduckgo.com/"
-bindsym XF86Launch9 exec nemo
-bindsym $mod+n exec nemo
-bindsym XF86Launch8 exec $gnus
-bindsym XF86Mail exec $gnus
-bindsym $mod+m exec $gnus
-bindsym XF86Launch7 exec discord-canary
-bindsym Ctrl+Shift+d exec discord-canary
-bindsym XF86AudioMute exec "amixer set Master 1+ toggle"
-bindsym Ctrl+$mod+Prior exec "amixer -q set Master 2%+ unmute"
-bindsym XF86AudioRaiseVolume exec "amixer -q set Master 2%+ unmute"
-bindsym Ctrl+$mod+Next exec "amixer -q set Master 2%- unmute"
-bindsym XF86AudioLowerVolume exec "amixer -q set Master 2%- unmute"
-bindsym XF86Calculator exec speedcrunch
-bindsym $mod+$alt+c exec speedcrunch
-#bindsym XF86Favourites
-#bindsym Help
-#bindsym Undo
-#bindsym Redo
-#bindsym XF86New
-#bindsym SunOpen
-#bindsym XF86Close
-#bindsym XF86Reply
-#bindsym XF86MailForward
-#bindsym XF86Send
-#bindsym XF86Save
+popup_during_fullscreen leave_fullscreen
-bindsym $mod+F3 exec arandr
-bindsym $mod+Shift+l exec dmenu-lpass
-bindsym $mod+Shift+p exec rofi-pass
-bindsym $mod+Ctrl+Shift+p exec rofi-pass --type
+workspace_auto_back_and_forth yes
-# Brightness keyboard shortcuts
-bindsym XF86MonBrightnessUp exec xbacklight -inc 5
-bindsym $mod+$alt+Next exec xbacklight -inc 5
-bindsym XF86MonBrightnessDown exec xbacklight -dec 5
-bindsym $mod+$alt+Prev exec xbacklight -dec 5
+smart_gaps on
-# Wal
-bindsym $mod+Ctrl+w exec "wal -i ~/Pictures/Wallpapers -o wal-set"
+smart_borders off
-# Take a screenshot
-bindsym --release Print exec --no-startup-id scrot
-bindsym --release Ctrl+Print exec --no-startup-id "scrot -s"
-bindsym Shift+Print exec --no-startup-id "scrot -d 3"
+default_border pixel 0
-# Lock screen
-bindsym $mod+l exec "i3lock -fol"
-bindsym $mod+$alt+h exec "systemctl suspend"
-bindsym $mod+Ctrl+h exec "systemctl hibernate"
+gaps inner 20
+gaps outter -10
-# SSH terminals
-bindsym $mod+$alt+m exec $term ssh Mila
-bindsym $mod+$alt+n exec $term ssh Naro
-
-# Utilities
-bindsym $mod+Shift+h exec $term htop
-bindsym $mod+Ctrl+m exec rofi-mount
-bindsym $mod+Ctrl+u exec rofi-umount
-bindsym $mod+$alt+e exec rofi-emoji
-bindsym $mod+w exec wacom-setup
-
-# Music shortcuts
-bindsym XF86AudioNext exec mpc next
-bindsym $alt+XF86AudioRaiseVolume exec mpc next
-bindsym $mod+Next exec mpc next
-bindsym XF86AudioPrev exec mpc prev
-bindsym $alt+XF86AudioLowerVolume exec mpc prev
-bindsym $mod+Prior exec mpc prev
-bindsym XF86AudioPlay exec mpc toggle
-bindsym $mod+p exec mpc toggle
-bindsym $mod+$alt+p exec mpc stop
-bindsym XF86AudioStop exec mpc stop
-bindsym $alt+XF86AudioPlay exec mpc stop
-# below, 7 and 8 are the emplacement for `+` and `-` on the bépo layout
-# respectively, hence the order
-bindsym $mod+$alt+7 exec mpc volume +5
-bindsym $mod+$alt+8 exec mpc volume -5
-bindsym $mod+Shift+n exec $term ncmpcpp -q
-bindsym $mod+Shift+v exec $term ncmpcpp -qs visualizer
-
-################################################################################
-# i3-gaps settings #
-################################################################################
-
-smart_gaps on
-gaps inner 20
-gaps outer -10
-border_radius 10
-popup_during_fullscreen leave_fullscreen
-workspace_auto_back_and_forth yes
-focus_follows_mouse off
-
-# Change gaps size
-bindsym $mod+g gaps inner current plus 5
-bindsym $mod+Shift+g gaps inner current minus 5
-bindsym $mod+Ctrl+g gaps outer current plus 5
-bindsym $mod+Ctrl+Shift+g gaps outer current minus 5
-bindsym $mod+$alt+g gaps inner all set 20; gaps outer all set -10
-
-default_border pixel 0
-smart_borders on
-
-################################################################################
-# Modules startup #
-################################################################################
-{% if YADM_HOSTNAME=="Marpa" -%}
-exec --no-startup-id numlockx
-{% endif -%}
-exec_always --no-startup-id wal -i "$(< "${HOME}/.cache/wal/wal")"
-exec --no-startup-id xrdb $HOME/.Xresources
-exec --no-startup-id compton -F --opengl --config ~/.config/compton.conf -e 1
-{% if YADM_HOSTNAME == 'Gampo' -%}
-exec --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1
-{% endif -%}
-exec_always --no-startup-id enable_touch
-exec_always --no-startup-id polybar-launch
-exec --no-startup-id xss-lock -- i3lock -fol
-exec --no-startup-id mpd
-exec --no-startup-id mpc stop
-exec --no-startup-id mpd_discord_richpresence --no-idle --fork
-exec --no-startup-id syndaemon -i 1.0 -t -k
-exec --no-startup-id i3-battery-popup -N -t 2m
-exec --no-startup-id dunst -config ~/.config/dunst/dunstrc
-
-################################################################################
-# Set up second output for presentation #
-################################################################################
-{% if YADM_HOSTNAME == 'Marpa' -%}
-bindsym $mod+Ctrl+p xrandr --output HDMI-1 --mode 1024x768 --right-of eDP-1
-{% else %}
-bindsym $mod+Ctrl+p xrandr --output VGA1 --mode 1024x768 --right-of LVDS1
-{% endif -%}
-
-
-################################################################################
-# Set colors from Xresources #
-################################################################################
+border_radius 5
set_from_resource $fg i3wm.color7 #f0f0f0
set_from_resource $bg i3wm.color2 #f0f0f0
@@ -308,4 +46,179 @@ client.unfocused $bg $bg $fg $bg $bg
client.urgent $bg $bg $fg $bg $bg
client.placeholder $bg $bg $fg $bg $bg
-# client.background $bg
+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
+
+{% if YADM_HOSTNAME == 'Marpa' -%}
+workspace 10 output eDP-1
+{% endif -%}
+
+bindsym $mod+Return exec $term
+bindsym $mod+$alt+Return split h;; exec $term
+bindsym $mod+Shift+Return split v;; exec $term
+bindsym $mod+$alt+m exec $term ssh Mila
+bindsym $mod+$alt+n exec $term ssh Naro
+bindsym $mod+Shift+h exec $term htop
+
+bindsym $mod+Shift+c exec yadm alt && i3-msg reload
+bindsym $mod+Shift+r exec yadm alt && i3-msg restart
+bindsym $mod+Shift+e exec $exiti3
+bindsym $mod+Ctrl+w exec "wal -i ~/Pictures/Wallpapers -o wal-set"
+bindsym $mod+l i3lock -fol
+bindsym $mod+$alt+h exec "systemctl suspend"
+bindsym $mod+Ctrl+h exec "systemctl hibernate"
+bindsym $mod+Shift+F4 exec poweroff
+
+bindsym $mod+h split h
+bindsym $mod+v split v
+
+bindsym $mod+$left focus left
+bindsym $mod+$down focus down
+bindsym $mod+$up focus up
+bindsym $mod+$right focus right
+
+bindsym $mod+1 workspace 1
+bindsym $mod+2 workspace 2
+bindsym $mod+3 workspace 3
+bindsym $mod+4 workspace 4
+bindsym $mod+5 workspace 5
+bindsym $mod+6 workspace 6
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+bindsym $mod+0 workspace 10
+
+bindsym $mod+Shift+$left move left
+bindsym $mod+Shift+$down move down
+bindsym $mod+Shift+$up move up
+bindsym $mod+Shift+$right move right
+
+bindsym $mod+Shift+$left move container to output left
+bindsym $mod+Shift+$down move container to output down
+bindsym $mod+Shift+$up move container to output up
+bindsym $mod+Shift+$right move container to output right
+bindsym $mod+Shift+1 move container to workspace 1
+bindsym $mod+Shift+2 move container to workspace 2
+bindsym $mod+Shift+3 move container to workspace 3
+bindsym $mod+Shift+4 move container to workspace 4
+bindsym $mod+Shift+5 move container to workspace 5
+bindsym $mod+Shift+6 move container to workspace 6
+bindsym $mod+Shift+7 move container to workspace 7
+bindsym $mod+Shift+8 move container to workspace 8
+bindsym $mod+Shift+9 move container to workspace 9
+bindsym $mod+Shift+0 move container to workspace 10
+
+bindsym $mod+Ctrl+Shift+$left move workspace to output left
+bindsym $mod+Ctrl+Shift+$down move workspace to output down
+bindsym $mod+Ctrl+Shift+$up move workspace to output up
+bindsym $mod+Ctrl+Shift+$right move workspace to output right
+
+bindsym $mod+q kill
+bindsym $alt+F4 kill
+
+bindsym $mod+f fullscreen toggle
+bindsym $mod+r mode "resize"
+mode "resize" {
+ bindsym $right resize grow width 20 px or 10 ppt
+ bindsym r resize grow width 20 px or 10 ppt
+ bindsym $left resize shrink width 10 px or 5 ppt
+ bindsym c resize shrink width 10 px or 5 ppt
+ bindsym $down resize grow height 10 px or 5 ppt
+ bindsym t resize grow height 10 px or 5 ppt
+ bindsym $up resize shrink height 10 px or 5 ppt
+ bindsym s resize shrink height 10 px or 5 ppt
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym $mod+Shift+space floating toggle
+bindsym $mod+space focus mode_toggle
+bindsym $mod+Ctrl+c move position center
+
+bindsym $mod+Shift+s move scratchpad
+bindsym $mod+s scratchpad show
+bindsym $mod+Ctrl+s sticky toggle
+
+bindsym $mod+g gaps inner current plus 5
+bindsym $mod+Shift+g gaps inner current minus 5
+bindsym $mod+Ctrl+g gaps outer current plus 5
+bindsym $mod+Ctrl+Shift+g gaps outer current minus 5
+bindsym $mod+$alt+g gaps inner all set 20; gaps outer all set -10
+
+bindsym $mod+Shift+d exec --no-startup-id j4-dmenu-desktop
+bindsym $mod+d exec --no-startup-id $rofiexec
+
+bindsym $mod+c exec firefox
+bindsym $mod+m exec $gnus
+bindsym Ctrl+Shift+d exec discord-canary
+
+bindsym Print exec --no-startup-id scrot
+bindsym Ctrl+Print exec --no-startup-id "scrot -s"
+bindsym Shift+Print exec --no-startup-id "scrot -d 3"
+
+bindsym XF86MonBrightnessUp exec xbacklight -inc 5
+bindsym $mod+$alt+Next exec xbacklight -inc 5
+bindsym XF86MonBrightnessDown exec xbacklight -dec 5
+bindsym $mod+$alt+Prev exec xbacklight -dec 5
+
+bindsym XF86AudioNext exec mpc next
+bindsym $alt+XF86AudioRaiseVolume exec mpc next
+bindsym $mod+Next exec mpc next
+bindsym XF86AudioPrev exec mpc prev
+bindsym $alt+XF86AudioLowerVolume exec mpc prev
+bindsym $mod+Prior exec mpc prev
+bindsym XF86AudioPlay exec mpc toggle
+bindsym $mod+p exec mpc toggle
+bindsym $mod+$alt+p exec mpc stop
+bindsym XF86AudioStop exec mpc stop
+bindsym $alt+XF86AudioPlay exec mpc stop
+bindsym $mod+$alt+7 exec mpc volume +5
+bindsym $mod+$alt+8 exec mpc volume -5
+bindsym $mod+Shift+n exec $term ncmpcpp -q
+bindsym $mod+Shift+v exec $term ncmpcpp -qs visualizer
+bindsym XF86AudioMute exec "amixer set Master 1+ toggle"
+bindsym Ctrl+$mod+Prior exec "amixer -q set Master 2%+ unmute"
+bindsym XF86AudioRaiseVolume exec "amixer -q set Master 2%+ unmute"
+bindsym Ctrl+$mod+Next exec "amixer -q set Master 2%- unmute"
+bindsym XF86AudioLowerVolume exec "amixer -q set Master 2%- unmute"
+
+bindsym $mod+Shift+p exec rofi-pass --type
+bindsym $mod+Ctrl+Shift+p exec rofi-pass
+bindsym $mod+Ctrl+m exec rofi-mount
+bindsym $mod+Ctrl+u exec rofi-umount
+bindsym $mod+$alt+e exec rofi-emoji
+bindsym $mod+w exec wacom-setup
+
+bindsym $mod+e exec $ec
+bindsym $mod+n exec nemo
+bindsym $mod+$alt+c exec speedcrunch
+bindsym $mod+F3 exec arandr
+
+{% if YADM_HOSTNAME == 'Marpa' -%}
+bindsym $mod+Ctrl+p xrandr --output HDMI-1 --mode 1024x768 --right-of eDP-1
+{% else %}
+bindsym $mod+Ctrl+p xrandr --output VGA1 --mode 1024x768 --right-of LVDS1
+{% endif -%}
+
+{% if YADM_HOSTNAME == 'Gampo' -%}
+exec --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1
+{% endif -%}
+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 mpd
+exec --no-startup-id mpc stop
+exec --no-startup-id mpd_discord_richpresence --no-idle --fork
+exec --no-startup-id nm-applet