i3 config is now generated by its associated README through literate programming
This commit is contained in:
		
							parent
							
								
									19c0c83740
								
							
						
					
					
						commit
						54dc567d77
					
				
							
								
								
									
										932
									
								
								.config/i3/README.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										932
									
								
								.config/i3/README.org
									
									
									
									
									
										Normal file
									
								
							| @ -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: <meta name="description" content="Phundrak's i3 config" /> | ||||
| #+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's i3 config" /> | ||||
| #+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the i3 config file of Phundrak" /> | ||||
| #+HTML_HEAD_EXTRA: <script src="https://kit.fontawesome.com/4d42d0c8c5.js"></script> | ||||
| #+HTML_HEAD_EXTRA: <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script> | ||||
| #+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/mahakala-128x128.png" type="img/png" media="screen" /> | ||||
| #+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/favicon.ico" type="image/x-icon" media="screen" /> | ||||
| #+HTML_HEAD_EXTRA: <meta property="og:image" content="https://cdn.phundrak.com/img/rich_preview.png" /> | ||||
| #+HTML_HEAD_EXTRA: <meta name="twitter:card" content="summary" /> | ||||
| #+HTML_HEAD_EXTRA: <meta name="twitter:site" content="@phundrak" /> | ||||
| #+HTML_HEAD_EXTRA: <meta name="twitter:creator" content="@phundrak" /> | ||||
| #+HTML_HEAD_EXTRA: <style>.org-svg{width:auto}</style> | ||||
| #+INFOJS_OPT: view:info toc:1 home:https://phundrak.com/config toc:t | ||||
| #+HTML_HEAD_EXTRA: <link rel="stylesheet" href="https://langue.phundrak.com/css/htmlize.min.css"/> | ||||
| #+HTML_HEAD_EXTRA: <link rel="stylesheet" href="https://langue.phundrak.com/css/main.css"/> | ||||
| #+HTML_HEAD_EXTRA: <script src="https://langue.phundrak.com/js/jquery.min.js"></script> | ||||
| #+HTML_HEAD_EXTRA: <script defer src="https://langue.phundrak.com/js/main.js"></script> | ||||
| 
 | ||||
| * 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 | ||||
|    <<generate-variables()>> | ||||
|    #+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 | ||||
|   <<generate-workspaces()>> | ||||
|   #+END_SRC | ||||
| 
 | ||||
|   And although  this is not  specifically assigning a  window to a  workspace, I | ||||
|   also want to have the tenth workspace  assigned to a specific output in case I | ||||
|   have  two screens  — and  since this  is the  case when  I am  using only  one | ||||
|   computer, Marpa, I 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 | ||||
|    <<generate-shortcuts(table=terminal-shortcuts)>> | ||||
|    #+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 | ||||
|    <<generate-shortcuts(table=i3-sh)>> | ||||
|    <<generate-shortcuts(table=wal-sh)>> | ||||
|    <<generate-shortcuts(table=computer-sh)>> | ||||
|    #+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 | ||||
|     <<generate-shortcuts(table=split-win-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=window-focus-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=ws-focus-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=window-move-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=containers-move-sh)>> | ||||
|     <<generate-shortcuts(table=containers-ws-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=workspace-move-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=close-win-sh)>> | ||||
|     #+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 | ||||
|       <<generate-shortcuts(table=size-win-sh)>> | ||||
|       mode "resize" { | ||||
|           <<generate-shortcuts(table=resize-win-sh)>> | ||||
|       } | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=float-win-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=scratchpad-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=gaps-resize-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=launcher-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=internet-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=screenshot-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=brightness-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=media-sh)>> | ||||
|     <<generate-shortcuts(table=ncmpcpp-sh)>> | ||||
|     <<generate-shortcuts(table=volume-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=rofi-sh)>> | ||||
|     #+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 | ||||
|     <<generate-shortcuts(table=misc-sh)>> | ||||
|     #+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 -%} | ||||
|     <<generate-autolaunch()>> | ||||
|   #+END_SRC | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user