From 54dc567d773cfacd371d91222a60a8bc8a843001 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Sat, 30 Nov 2019 18:44:38 +0100 Subject: [PATCH] i3 config is now generated by its associated README through literate programming --- .config/i3/README.org | 932 +++++++++++++++++++++++++++++++++++++ .config/i3/config##yadm.j2 | 485 ++++++++----------- 2 files changed, 1131 insertions(+), 286 deletions(-) create mode 100644 .config/i3/README.org 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