[Org, Emacs] Do not add spaces in front of code in src blocks
By default, org-mode will add two spaces before code lines in the org file itself. This does not change how code is edited when editing a code block through `org-edit-special' but when copy/pasting code or editing it directly from the org file, it can be troublesome. Setting `org-src-preserve-indentation' to `t' prevents org from adding these two spaces.
This commit is contained in:
		
							parent
							
								
									c12164d9bb
								
							
						
					
					
						commit
						d4f11b612d
					
				@ -33,7 +33,7 @@ and source code of my configuration file which can be extracted to
 | 
				
			|||||||
First of all, some initialization is needed, and this initialization is about
 | 
					First of all, some initialization is needed, and this initialization is about
 | 
				
			||||||
math randomness. So, let’s initialize the ~random~ method of the ~math~ library:
 | 
					math randomness. So, let’s initialize the ~random~ method of the ~math~ library:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  math.randomseed(os.time())
 | 
					math.randomseed(os.time())
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In order to be able to load libraries properly, I first need to make sure
 | 
					In order to be able to load libraries properly, I first need to make sure
 | 
				
			||||||
@ -41,7 +41,7 @@ LuaRocks is installed, so I can also make sure the packages our configuration
 | 
				
			|||||||
depends on installed through it can be found. If LuaRocks is not installed, then
 | 
					depends on installed through it can be found. If LuaRocks is not installed, then
 | 
				
			||||||
do nothing.
 | 
					do nothing.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  pcall(require, "luarocks.loader")
 | 
					pcall(require, "luarocks.loader")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, we’ll also load the following libraries
 | 
					Next, we’ll also load the following libraries
 | 
				
			||||||
@ -58,7 +58,7 @@ Next, we’ll also load the following libraries
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: imported-libraries
 | 
					#+NAME: imported-libraries
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var libs=table-imported-libraries :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :var libs=table-imported-libraries :cache yes
 | 
				
			||||||
  (mapconcat (lambda (x) (format "local %s = require(\"%s\")"
 | 
					(mapconcat (lambda (x) (format "local %s = require(\"%s\")"
 | 
				
			||||||
                               (cadr x)
 | 
					                               (cadr x)
 | 
				
			||||||
                               (car x)))
 | 
					                               (car x)))
 | 
				
			||||||
           libs
 | 
					           libs
 | 
				
			||||||
@ -81,17 +81,17 @@ Here is the actual code in the config file:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
I also want to be able to autofocus the first window when I go to another workspace, so let’s require that:
 | 
					I also want to be able to autofocus the first window when I go to another workspace, so let’s require that:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  require("awful.autofocus")
 | 
					require("awful.autofocus")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And finally, I want to be able to declare some shortcuts specific to some apps
 | 
					And finally, I want to be able to declare some shortcuts specific to some apps
 | 
				
			||||||
thanks to the hotkeys help widget.
 | 
					thanks to the hotkeys help widget.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  require("awful.hotkeys_popup.keys")
 | 
					require("awful.hotkeys_popup.keys")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
By the way, let’s initialize the ~random~ method of the ~math~ library:
 | 
					By the way, let’s initialize the ~random~ method of the ~math~ library:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  math.randomseed(os.time())
 | 
					math.randomseed(os.time())
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Error handling
 | 
					* Error handling
 | 
				
			||||||
@ -101,16 +101,16 @@ By the way, let’s initialize the ~random~ method of the ~math~ library:
 | 
				
			|||||||
This code checks if Awesome encountered an error during startup and fell back to
 | 
					This code checks if Awesome encountered an error during startup and fell back to
 | 
				
			||||||
another config. This code will only ever execute for the fallback config.
 | 
					another config. This code will only ever execute for the fallback config.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  if awesome.startup_errors then
 | 
					if awesome.startup_errors then
 | 
				
			||||||
  naughty.notify({ preset = naughty.config.presets.critical,
 | 
					  naughty.notify({ preset = naughty.config.presets.critical,
 | 
				
			||||||
                   title = "Oops, there were errors during startup!",
 | 
					                   title = "Oops, there were errors during startup!",
 | 
				
			||||||
                   text = awesome.startup_errors })
 | 
					                   text = awesome.startup_errors })
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And this code handles runtime errors after startup thanks to signals.
 | 
					And this code handles runtime errors after startup thanks to signals.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  do
 | 
					do
 | 
				
			||||||
  local in_error = false
 | 
					  local in_error = false
 | 
				
			||||||
  awesome.connect_signal("debug::error", function (err)
 | 
					  awesome.connect_signal("debug::error", function (err)
 | 
				
			||||||
                           -- Make sure we don't go into an endless error loop
 | 
					                           -- Make sure we don't go into an endless error loop
 | 
				
			||||||
@ -122,7 +122,7 @@ And this code handles runtime errors after startup thanks to signals.
 | 
				
			|||||||
                                            text = tostring(err) })
 | 
					                                            text = tostring(err) })
 | 
				
			||||||
                           in_error = false
 | 
					                           in_error = false
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Variable definitions
 | 
					* Variable definitions
 | 
				
			||||||
@ -138,7 +138,7 @@ Awesome a special look that fits the user. I am currently using a custom theme
 | 
				
			|||||||
that is not yet included in my dotfiles. I will add it later, along with the
 | 
					that is not yet included in my dotfiles. I will add it later, along with the
 | 
				
			||||||
images used for the theme.
 | 
					images used for the theme.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  beautiful.init("/home/phundrak/.config/awesome/nord/theme.lua")
 | 
					beautiful.init("/home/phundrak/.config/awesome/nord/theme.lua")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Default terminal and text editor
 | 
					** Default terminal and text editor
 | 
				
			||||||
@ -149,8 +149,8 @@ The two following variables are set so that I don’t need to go over my whole
 | 
				
			|||||||
config file in order to modify which terminal or text editor I use, not that I
 | 
					config file in order to modify which terminal or text editor I use, not that I
 | 
				
			||||||
do it often though.
 | 
					do it often though.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  terminal = "kitty"
 | 
					terminal = "kitty"
 | 
				
			||||||
  editor = os.getenv("EDITOR") or "emacsclient -c -a emacs"
 | 
					editor = os.getenv("EDITOR") or "emacsclient -c -a emacs"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Keys
 | 
					** Keys
 | 
				
			||||||
@ -163,11 +163,11 @@ Another usual value for this is ~Mod1~, which is the Alt key, but it has greater
 | 
				
			|||||||
chances of interfering with other software. I also defined some other obvious
 | 
					chances of interfering with other software. I also defined some other obvious
 | 
				
			||||||
variables in order to make my code cleaner later on.
 | 
					variables in order to make my code cleaner later on.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  modkey = "Mod4"
 | 
					modkey = "Mod4"
 | 
				
			||||||
  shift = "Shift"
 | 
					shift = "Shift"
 | 
				
			||||||
  control = "Control"
 | 
					control = "Control"
 | 
				
			||||||
  meta = "Mod1"
 | 
					meta = "Mod1"
 | 
				
			||||||
  alt = "Mod1" -- Just in case
 | 
					alt = "Mod1" -- Just in case
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Custom functions
 | 
					* Custom functions
 | 
				
			||||||
@ -185,12 +185,12 @@ variables in order to make my code cleaner later on.
 | 
				
			|||||||
This function sets a random wallpaper from the directory
 | 
					This function sets a random wallpaper from the directory
 | 
				
			||||||
=~/Pictures/Wallpapers=, see [[file:bin.org::#pape-update-bdecbadf][pape-update]] in my custom scripts.
 | 
					=~/Pictures/Wallpapers=, see [[file:bin.org::#pape-update-bdecbadf][pape-update]] in my custom scripts.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function set_random_pape()
 | 
					local function set_random_pape()
 | 
				
			||||||
  awful.spawn.with_shell("pape-update")
 | 
					  awful.spawn.with_shell("pape-update")
 | 
				
			||||||
  naughty.notify({ preset = naughty.config.presets.normal,
 | 
					  naughty.notify({ preset = naughty.config.presets.normal,
 | 
				
			||||||
                   title = "Wallpaper change",
 | 
					                   title = "Wallpaper change",
 | 
				
			||||||
                   text = "Done!"})
 | 
					                   text = "Done!"})
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Restore previous wallpaper
 | 
					*** Restore previous wallpaper
 | 
				
			||||||
@ -200,9 +200,9 @@ This function sets a random wallpaper from the directory
 | 
				
			|||||||
I also wrote the following function that will restore the previously set
 | 
					I also wrote the following function that will restore the previously set
 | 
				
			||||||
wallpaper:
 | 
					wallpaper:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function set_wallpaper(_)
 | 
					local function set_wallpaper(_)
 | 
				
			||||||
  awful.spawn.with_shell("nitrogen --restore")
 | 
					  awful.spawn.with_shell("nitrogen --restore")
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Layout manipulation
 | 
					** Layout manipulation
 | 
				
			||||||
@ -212,12 +212,12 @@ wallpaper:
 | 
				
			|||||||
The following function is used by a shortcut described below in
 | 
					The following function is used by a shortcut described below in
 | 
				
			||||||
[[#Keybindings-Clients-f9f96d60]].
 | 
					[[#Keybindings-Clients-f9f96d60]].
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function client_go_back()
 | 
					local function client_go_back()
 | 
				
			||||||
  awful.client.focus.history.previous()
 | 
					  awful.client.focus.history.previous()
 | 
				
			||||||
  if client.focus then
 | 
					  if client.focus then
 | 
				
			||||||
    client.focus:raise()
 | 
					    client.focus:raise()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Clients manipulation
 | 
					** Clients manipulation
 | 
				
			||||||
@ -225,7 +225,7 @@ The following function is used by a shortcut described below in
 | 
				
			|||||||
:CUSTOM_ID: Custom_functions-Clients_manipulation-7e958fed
 | 
					:CUSTOM_ID: Custom_functions-Clients_manipulation-7e958fed
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function restore_minimized_clients()
 | 
					local function restore_minimized_clients()
 | 
				
			||||||
  local c = awful.client.restore()
 | 
					  local c = awful.client.restore()
 | 
				
			||||||
  -- Focus restored client
 | 
					  -- Focus restored client
 | 
				
			||||||
  if c then
 | 
					  if c then
 | 
				
			||||||
@ -233,35 +233,35 @@ The following function is used by a shortcut described below in
 | 
				
			|||||||
      "request::activate", "key.unminimize", {raise = true}
 | 
					      "request::activate", "key.unminimize", {raise = true}
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
 local function toggle_fullscreen_client(c)
 | 
					local function toggle_fullscreen_client(c)
 | 
				
			||||||
  c.fullscreen = not c.fullscreen
 | 
					  c.fullscreen = not c.fullscreen
 | 
				
			||||||
  c:raise()
 | 
					  c:raise()
 | 
				
			||||||
 end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function toggle_maximized(c)
 | 
					local function toggle_maximized(c)
 | 
				
			||||||
  c.maximized = not c.maximized
 | 
					  c.maximized = not c.maximized
 | 
				
			||||||
  c:raise()
 | 
					  c:raise()
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
 local function toggle_vertical_maximized(c)
 | 
					local function toggle_vertical_maximized(c)
 | 
				
			||||||
  c.maximized_vertical = not c.maximized_vertical
 | 
					  c.maximized_vertical = not c.maximized_vertical
 | 
				
			||||||
  c:raise()
 | 
					  c:raise()
 | 
				
			||||||
 end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
 local function toggle_horizontal_maximized(c)
 | 
					local function toggle_horizontal_maximized(c)
 | 
				
			||||||
  c.maximized_horizontal = not c.maximized_horizontal
 | 
					  c.maximized_horizontal = not c.maximized_horizontal
 | 
				
			||||||
  c:raise()
 | 
					  c:raise()
 | 
				
			||||||
 end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Tag manipulation
 | 
					** Tag manipulation
 | 
				
			||||||
@ -269,45 +269,45 @@ The following function is used by a shortcut described below in
 | 
				
			|||||||
:CUSTOM_ID: Custom_functions-Tag_manipulation-5fc67669
 | 
					:CUSTOM_ID: Custom_functions-Tag_manipulation-5fc67669
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function view_tag_n(i)
 | 
					local function view_tag_n(i)
 | 
				
			||||||
  local screen = awful.screen.focused()
 | 
					  local screen = awful.screen.focused()
 | 
				
			||||||
  local tag = screen.tags[i]
 | 
					  local tag = screen.tags[i]
 | 
				
			||||||
  if tag then
 | 
					  if tag then
 | 
				
			||||||
    tag:view_only()
 | 
					    tag:view_only()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function toggle_tag_n(i)
 | 
					local function toggle_tag_n(i)
 | 
				
			||||||
  local screen = awful.screen.focused()
 | 
					  local screen = awful.screen.focused()
 | 
				
			||||||
  local tag = screen.tags[i]
 | 
					  local tag = screen.tags[i]
 | 
				
			||||||
  if tag then
 | 
					  if tag then
 | 
				
			||||||
    awful.tag.viewtoggle(tag)
 | 
					    awful.tag.viewtoggle(tag)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function move_focused_to_tag_n(i)
 | 
					local function move_focused_to_tag_n(i)
 | 
				
			||||||
  if client.focus then
 | 
					  if client.focus then
 | 
				
			||||||
    local tag = client.focus.screen.tags[i]
 | 
					    local tag = client.focus.screen.tags[i]
 | 
				
			||||||
    if tag then
 | 
					    if tag then
 | 
				
			||||||
      client.focus:move_to_tag(tag)
 | 
					      client.focus:move_to_tag(tag)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function toggle_focused_client_to_tag_n(i)
 | 
					local function toggle_focused_client_to_tag_n(i)
 | 
				
			||||||
  if client.focus then
 | 
					  if client.focus then
 | 
				
			||||||
    local tag = client.focus.screen.tags[i]
 | 
					    local tag = client.focus.screen.tags[i]
 | 
				
			||||||
    if tag then
 | 
					    if tag then
 | 
				
			||||||
      client.focus:toggle_tag(tag)
 | 
					      client.focus:toggle_tag(tag)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Awesome prompt
 | 
					** Awesome prompt
 | 
				
			||||||
@ -315,14 +315,14 @@ The following function is used by a shortcut described below in
 | 
				
			|||||||
:CUSTOM_ID: Custom_functions-Awesome_prompt-de4fde50
 | 
					:CUSTOM_ID: Custom_functions-Awesome_prompt-de4fde50
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local function invoke_lua_execute_prompt()
 | 
					local function invoke_lua_execute_prompt()
 | 
				
			||||||
  awful.prompt.run {
 | 
					  awful.prompt.run {
 | 
				
			||||||
    prompt       = "Run Lua code: ",
 | 
					    prompt       = "Run Lua code: ",
 | 
				
			||||||
    textbox      = awful.screen.focused().promptbox.widget,
 | 
					    textbox      = awful.screen.focused().promptbox.widget,
 | 
				
			||||||
    exe_callback = awful.util.eval,
 | 
					    exe_callback = awful.util.eval,
 | 
				
			||||||
    history_path = awful.util.get_cache_dir() .. "/history_eval"
 | 
					    history_path = awful.util.get_cache_dir() .. "/history_eval"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Layouts
 | 
					* Layouts
 | 
				
			||||||
@ -353,7 +353,7 @@ them, and their order in the table is their order in Awesome.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: list-layouts
 | 
					#+NAME: list-layouts
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var layouts=table-layouts :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :var layouts=table-layouts :cache yes
 | 
				
			||||||
  (mapconcat (lambda (layout)
 | 
					(mapconcat (lambda (layout)
 | 
				
			||||||
             (let ((enabled-p (string= (cadr layout) "yes"))
 | 
					             (let ((enabled-p (string= (cadr layout) "yes"))
 | 
				
			||||||
                   (layout    (car layout)))
 | 
					                   (layout    (car layout)))
 | 
				
			||||||
              (when enabled-p
 | 
					              (when enabled-p
 | 
				
			||||||
@ -380,9 +380,9 @@ awful.layout.suit.spiral.dwindle,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the code that activates these layouts:
 | 
					Here is the code that activates these layouts:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  awful.layout.layouts = {
 | 
					awful.layout.layouts = {
 | 
				
			||||||
  <<list-layouts()>>
 | 
					  <<list-layouts()>>
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Top bar
 | 
					* Top bar
 | 
				
			||||||
@ -399,7 +399,7 @@ below.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+NAME: make-menu
 | 
					#+NAME: make-menu
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var menu=table-main-menu
 | 
					#+BEGIN_SRC emacs-lisp :var menu=table-main-menu
 | 
				
			||||||
  (mapconcat (lambda (item)
 | 
					(mapconcat (lambda (item)
 | 
				
			||||||
             (format "{ \"%s\", %s }"
 | 
					             (format "{ \"%s\", %s }"
 | 
				
			||||||
                     (car item)
 | 
					                     (car item)
 | 
				
			||||||
                     (mapconcat #'identity (cdr item) ", ")))
 | 
					                     (mapconcat #'identity (cdr item) ", ")))
 | 
				
			||||||
@ -424,9 +424,9 @@ Awesome:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
And here is the actual code:
 | 
					And here is the actual code:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  awesomewm_menu = {
 | 
					awesomewm_menu = {
 | 
				
			||||||
  <<make-menu(menu=table-awesome-menu)>>
 | 
					  <<make-menu(menu=table-awesome-menu)>>
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, let’s create the main menu that will be used on ~S-w~ and at the top left
 | 
					Next, let’s create the main menu that will be used on ~S-w~ and at the top left
 | 
				
			||||||
@ -439,7 +439,7 @@ of the window:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the actual code:
 | 
					Here is the actual code:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  mainmenu = awful.menu({ items = {
 | 
					mainmenu = awful.menu({ items = {
 | 
				
			||||||
                          <<make-menu(menu=table-main-menu)>>
 | 
					                          <<make-menu(menu=table-main-menu)>>
 | 
				
			||||||
                     }})
 | 
					                     }})
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
@ -447,13 +447,13 @@ Here is the actual code:
 | 
				
			|||||||
For now it only has two entries: the Awesome menu and opening a terminal, I will
 | 
					For now it only has two entries: the Awesome menu and opening a terminal, I will
 | 
				
			||||||
add some more later probably. Let’s specify it as being our main launcher:
 | 
					add some more later probably. Let’s specify it as being our main launcher:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  launcher = awful.widget.launcher({ image = beautiful.awesome_icon,
 | 
					launcher = awful.widget.launcher({ image = beautiful.awesome_icon,
 | 
				
			||||||
                                   menu = mainmenu })
 | 
					                                   menu = mainmenu })
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let’s declare the menubar’s terminal for applications that require it.
 | 
					Finally, let’s declare the menubar’s terminal for applications that require it.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  menubar.utils.terminal = terminal
 | 
					menubar.utils.terminal = terminal
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Widgets
 | 
					** Widgets
 | 
				
			||||||
@ -462,12 +462,12 @@ Finally, let’s declare the menubar’s terminal for applications that require
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Let’s declare the keyboard map indicator and switcher for the top bar:
 | 
					Let’s declare the keyboard map indicator and switcher for the top bar:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  keyboardlayout = awful.widget.keyboardlayout()
 | 
					keyboardlayout = awful.widget.keyboardlayout()
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s also create a clock widget:
 | 
					Let’s also create a clock widget:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  textclock = wibox.widget.textclock()
 | 
					textclock = wibox.widget.textclock()
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Tag list
 | 
					** Tag list
 | 
				
			||||||
@ -478,9 +478,9 @@ In order to create the taglist (an equivalent to workspaces, but better), we
 | 
				
			|||||||
need to create first a local variable that will hold the widget. It will be
 | 
					need to create first a local variable that will hold the widget. It will be
 | 
				
			||||||
declared as you can see below:
 | 
					declared as you can see below:
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  local tasklist_buttons = gears.table.join(
 | 
					local tasklist_buttons = gears.table.join(
 | 
				
			||||||
  -- configuration goes here
 | 
					  -- configuration goes here
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
~gears.table.join()~ joins several tables together, as described [[https://awesomewm.org/doc/api/libraries/gears.table.html][here]], which
 | 
					~gears.table.join()~ joins several tables together, as described [[https://awesomewm.org/doc/api/libraries/gears.table.html][here]], which
 | 
				
			||||||
@ -493,7 +493,7 @@ tag should switch this tag as the only visible tag, no matter how many of them
 | 
				
			|||||||
were visible beforehand.
 | 
					were visible beforehand.
 | 
				
			||||||
#+NAME: tag-simple-left-click
 | 
					#+NAME: tag-simple-left-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 1, function(t) t:view_only() end)
 | 
					awful.button({ }, 1, function(t) t:view_only() end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
However, left clicks combined with the modkey will add the clicked tag to the
 | 
					However, left clicks combined with the modkey will add the clicked tag to the
 | 
				
			||||||
@ -501,7 +501,7 @@ list of visible tags, which allows the user to see windows from several tags at
 | 
				
			|||||||
once.
 | 
					once.
 | 
				
			||||||
#+NAME: tag-mod-left-click
 | 
					#+NAME: tag-mod-left-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ modkey }, 1, awful.tag.viewtoggle)
 | 
					awful.button({ modkey }, 1, awful.tag.viewtoggle)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Right clicks are dedicated to window tagging. A simple right click will untag
 | 
					Right clicks are dedicated to window tagging. A simple right click will untag
 | 
				
			||||||
@ -509,22 +509,22 @@ the currently focused window and tag it again with the clicked tag, moving it
 | 
				
			|||||||
effectively from one tag to another.
 | 
					effectively from one tag to another.
 | 
				
			||||||
#+NAME: tag-simple-right-click
 | 
					#+NAME: tag-simple-right-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 3, function(t)
 | 
					awful.button({ }, 3, function(t)
 | 
				
			||||||
    if client.focus then
 | 
					    if client.focus then
 | 
				
			||||||
      client.focus:move_to_tag(t)
 | 
					      client.focus:move_to_tag(t)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
However, a right click combined with the modkey will add the clicked tag to the
 | 
					However, a right click combined with the modkey will add the clicked tag to the
 | 
				
			||||||
currently focused window, making it visible to both tags.
 | 
					currently focused window, making it visible to both tags.
 | 
				
			||||||
#+NAME: tag-mod-right-click
 | 
					#+NAME: tag-mod-right-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ modkey }, 3, function(t)
 | 
					awful.button({ modkey }, 3, function(t)
 | 
				
			||||||
    if client.focus then
 | 
					    if client.focus then
 | 
				
			||||||
      client.focus:toggle_tag(t)
 | 
					      client.focus:toggle_tag(t)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The scroll wheel is treated as clicks just as any right or left clicks and can
 | 
					The scroll wheel is treated as clicks just as any right or left clicks and can
 | 
				
			||||||
@ -532,25 +532,25 @@ be interpreted by Awesome. They can prove useful when it comes to tags. If a
 | 
				
			|||||||
scroll up is detected over tags, then Awesome will display the previous tag.
 | 
					scroll up is detected over tags, then Awesome will display the previous tag.
 | 
				
			||||||
#+NAME: tag-simple-scroll-up
 | 
					#+NAME: tag-simple-scroll-up
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end)
 | 
					awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Otherwise, if a scroll down is detected, the next tag will be displayed.
 | 
					Otherwise, if a scroll down is detected, the next tag will be displayed.
 | 
				
			||||||
#+NAME: tag-simple-scroll-down
 | 
					#+NAME: tag-simple-scroll-down
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end)
 | 
					awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
So, here’s the actual configuration code for the taglist:
 | 
					So, here’s the actual configuration code for the taglist:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local taglist_buttons = gears.table.join(
 | 
					local taglist_buttons = gears.table.join(
 | 
				
			||||||
  <<tag-simple-left-click>>,
 | 
					  <<tag-simple-left-click>>,
 | 
				
			||||||
  <<tag-mod-left-click>>,
 | 
					  <<tag-mod-left-click>>,
 | 
				
			||||||
  <<tag-simple-right-click>>,
 | 
					  <<tag-simple-right-click>>,
 | 
				
			||||||
  <<tag-mod-right-click>>,
 | 
					  <<tag-mod-right-click>>,
 | 
				
			||||||
  <<tag-simple-scroll-up>>,
 | 
					  <<tag-simple-scroll-up>>,
 | 
				
			||||||
  <<tag-simple-scroll-down>>
 | 
					  <<tag-simple-scroll-down>>
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Tasks list
 | 
					** Tasks list
 | 
				
			||||||
@ -560,9 +560,9 @@ So, here’s the actual configuration code for the taglist:
 | 
				
			|||||||
Similarly to the tag list, the task list can display some special behavior
 | 
					Similarly to the tag list, the task list can display some special behavior
 | 
				
			||||||
depending on the clicks it receives. These clicks are set like so:
 | 
					depending on the clicks it receives. These clicks are set like so:
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  local tasklist_buttons = gears.table.join(
 | 
					local tasklist_buttons = gears.table.join(
 | 
				
			||||||
  -- List of clicks
 | 
					  -- List of clicks
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A left click on a task in the taskbar will simply focus and raise the window
 | 
					A left click on a task in the taskbar will simply focus and raise the window
 | 
				
			||||||
@ -570,7 +570,7 @@ linked to it if it is not focused. Otherwise, if the window is focused, the
 | 
				
			|||||||
window will be minimized.
 | 
					window will be minimized.
 | 
				
			||||||
#+NAME: task-simple-left-click
 | 
					#+NAME: task-simple-left-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 1, function (c)
 | 
					awful.button({ }, 1, function (c)
 | 
				
			||||||
    if c == client.focus then
 | 
					    if c == client.focus then
 | 
				
			||||||
      c.minimized = true
 | 
					      c.minimized = true
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
@ -580,7 +580,7 @@ window will be minimized.
 | 
				
			|||||||
        {raise = true}
 | 
					        {raise = true}
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If the right click is detected, then a list of all the opened clients is invoked
 | 
					If the right click is detected, then a list of all the opened clients is invoked
 | 
				
			||||||
@ -588,36 +588,36 @@ so we can switch to another (and if needed switch visible tag). The width of
 | 
				
			|||||||
this list will be 250px.
 | 
					this list will be 250px.
 | 
				
			||||||
#+NAME: task-simple-right-click
 | 
					#+NAME: task-simple-right-click
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 3, function()
 | 
					awful.button({ }, 3, function()
 | 
				
			||||||
      awful.menu.client_list({ theme = { width = 250 } })
 | 
					      awful.menu.client_list({ theme = { width = 250 } })
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If a scroll up is detected, then let’s select the previous client in the
 | 
					If a scroll up is detected, then let’s select the previous client in the
 | 
				
			||||||
tasklist.
 | 
					tasklist.
 | 
				
			||||||
#+NAME: task-simple-scroll-up
 | 
					#+NAME: task-simple-scroll-up
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 4, function ()
 | 
					awful.button({ }, 4, function ()
 | 
				
			||||||
      awful.client.focus.byidx(1)
 | 
					      awful.client.focus.byidx(1)
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If a scroll down is detected, then let’s select the next client in the tasklist.
 | 
					If a scroll down is detected, then let’s select the next client in the tasklist.
 | 
				
			||||||
#+NAME: task-simple-scroll-down
 | 
					#+NAME: task-simple-scroll-down
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 5, function ()
 | 
					awful.button({ }, 5, function ()
 | 
				
			||||||
      awful.client.focus.byidx(-1)
 | 
					      awful.client.focus.byidx(-1)
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
So, here’s the actual code for the tasklist:
 | 
					So, here’s the actual code for the tasklist:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  local tasklist_buttons = gears.table.join(
 | 
					local tasklist_buttons = gears.table.join(
 | 
				
			||||||
  <<task-simple-left-click>>,
 | 
					  <<task-simple-left-click>>,
 | 
				
			||||||
  <<task-simple-right-click>>,
 | 
					  <<task-simple-right-click>>,
 | 
				
			||||||
  <<task-simple-scroll-up>>,
 | 
					  <<task-simple-scroll-up>>,
 | 
				
			||||||
  <<task-simple-scroll-down>>
 | 
					  <<task-simple-scroll-down>>
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Theme and display
 | 
					* Theme and display
 | 
				
			||||||
@ -634,16 +634,16 @@ should be redisplayed since it won’t necessarily fit the new geometry of the
 | 
				
			|||||||
screen. And remember, I have a [[#Custom_functions-Wallpaper-related_functions-Restore_previous_wallpaper-8b5bc08c][function that does exactly that]]! Let’s connect
 | 
					screen. And remember, I have a [[#Custom_functions-Wallpaper-related_functions-Restore_previous_wallpaper-8b5bc08c][function that does exactly that]]! Let’s connect
 | 
				
			||||||
this function to the geometry change signal:
 | 
					this function to the geometry change signal:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  screen.connect_signal("property::geometry", set_wallpaper)
 | 
					screen.connect_signal("property::geometry", set_wallpaper)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If a new screen gets connected, it will need to get a new wallpaper. A lot needs
 | 
					If a new screen gets connected, it will need to get a new wallpaper. A lot needs
 | 
				
			||||||
to be done, and all the following lines of code will be inside a block like
 | 
					to be done, and all the following lines of code will be inside a block like
 | 
				
			||||||
this:
 | 
					this:
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.screen.connect_for_each_screen(function(s)
 | 
					awful.screen.connect_for_each_screen(function(s)
 | 
				
			||||||
    -- Code to be executed goes here
 | 
					    -- Code to be executed goes here
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
So, due the code block above, if you see any reference to ~s~ in the code blocks
 | 
					So, due the code block above, if you see any reference to ~s~ in the code blocks
 | 
				
			||||||
@ -652,7 +652,7 @@ below, it will refer to the screen being set up by the function.
 | 
				
			|||||||
First, let’s set its wallpaper:
 | 
					First, let’s set its wallpaper:
 | 
				
			||||||
#+NAME: screen-set-pape
 | 
					#+NAME: screen-set-pape
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  set_wallpaper()
 | 
					set_wallpaper()
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, let’s build a list of tags for the screen. *Be aware that each screen has
 | 
					Next, let’s build a list of tags for the screen. *Be aware that each screen has
 | 
				
			||||||
@ -660,7 +660,7 @@ its own tag table!* The default layout will be the first refered to in the
 | 
				
			|||||||
layouts list described above.
 | 
					layouts list described above.
 | 
				
			||||||
#+NAME: screen-taglist
 | 
					#+NAME: screen-taglist
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }, s, awful.layout.layouts[1])
 | 
					awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }, s, awful.layout.layouts[1])
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, let’s create the taglist widget. It will use the ~taglist_buttons~
 | 
					Next, let’s create the taglist widget. It will use the ~taglist_buttons~
 | 
				
			||||||
@ -668,11 +668,11 @@ Next, let’s create the taglist widget. It will use the ~taglist_buttons~
 | 
				
			|||||||
tags will be displayed in the tagbar ([[https://awesomewm.org/apidoc/widgets/awful.widget.taglist.html#List_filters][more about tag filters]]).
 | 
					tags will be displayed in the tagbar ([[https://awesomewm.org/apidoc/widgets/awful.widget.taglist.html#List_filters][more about tag filters]]).
 | 
				
			||||||
#+NAME: screen-taglist-widget
 | 
					#+NAME: screen-taglist-widget
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.taglist = awful.widget.taglist {
 | 
					s.taglist = awful.widget.taglist {
 | 
				
			||||||
  screen  = s,
 | 
					  screen  = s,
 | 
				
			||||||
  filter  = awful.widget.taglist.filter.all,
 | 
					  filter  = awful.widget.taglist.filter.all,
 | 
				
			||||||
  buttons = taglist_buttons
 | 
					  buttons = taglist_buttons
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A tasklist widget will also get created thanks with the ~tasklist_button~
 | 
					A tasklist widget will also get created thanks with the ~tasklist_button~
 | 
				
			||||||
@ -681,17 +681,17 @@ widget above, the tasklist will only display the screen’s current tags thanks
 | 
				
			|||||||
its filter.
 | 
					its filter.
 | 
				
			||||||
#+NAME: screen-tasklist-widget
 | 
					#+NAME: screen-tasklist-widget
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.tasklist = awful.widget.tasklist {
 | 
					s.tasklist = awful.widget.tasklist {
 | 
				
			||||||
  screen  = s,
 | 
					  screen  = s,
 | 
				
			||||||
  filter  = awful.widget.tasklist.filter.currenttags,
 | 
					  filter  = awful.widget.tasklist.filter.currenttags,
 | 
				
			||||||
  buttons = tasklist_buttons
 | 
					  buttons = tasklist_buttons
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A promptbox will also be created for the screen:
 | 
					A promptbox will also be created for the screen:
 | 
				
			||||||
#+NAME: screen-promptbox
 | 
					#+NAME: screen-promptbox
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.promptbox = awful.widget.prompt()
 | 
					s.promptbox = awful.widget.prompt()
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then, Let’s create an imagebox widget in which will be contained an icon
 | 
					Then, Let’s create an imagebox widget in which will be contained an icon
 | 
				
			||||||
@ -701,8 +701,8 @@ next layout will be loaded; otherwise if a right click or a scroll down is
 | 
				
			|||||||
detected, the previous layout will be loaded.
 | 
					detected, the previous layout will be loaded.
 | 
				
			||||||
#+NAME: screen-layout-indicator
 | 
					#+NAME: screen-layout-indicator
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.layoutbox = awful.widget.layoutbox(s)
 | 
					s.layoutbox = awful.widget.layoutbox(s)
 | 
				
			||||||
  s.layoutbox:buttons(gears.table.join(
 | 
					s.layoutbox:buttons(gears.table.join(
 | 
				
			||||||
                      awful.button({ }, 1, function () awful.layout.inc( 1) end),
 | 
					                      awful.button({ }, 1, function () awful.layout.inc( 1) end),
 | 
				
			||||||
                      awful.button({ }, 3, function () awful.layout.inc(-1) end),
 | 
					                      awful.button({ }, 3, function () awful.layout.inc(-1) end),
 | 
				
			||||||
                      awful.button({ }, 4, function () awful.layout.inc( 1) end),
 | 
					                      awful.button({ }, 4, function () awful.layout.inc( 1) end),
 | 
				
			||||||
@ -712,7 +712,7 @@ detected, the previous layout will be loaded.
 | 
				
			|||||||
Now it is time to create the widget, a ~wibox~ that will contain our bar.
 | 
					Now it is time to create the widget, a ~wibox~ that will contain our bar.
 | 
				
			||||||
#+NAME: screen-wibox-widget
 | 
					#+NAME: screen-wibox-widget
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.wibox = awful.wibar({ position = "top", screen = s })
 | 
					s.wibox = awful.wibar({ position = "top", screen = s })
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let’s set up our bar. Since it is a horizontal bar, its layout will be
 | 
					Finally, let’s set up our bar. Since it is a horizontal bar, its layout will be
 | 
				
			||||||
@ -721,7 +721,7 @@ widgets, while the tasklist will be at the center, and the keyboard indicator,
 | 
				
			|||||||
the system tray, the clock and the layout indicator will be on the right.
 | 
					the system tray, the clock and the layout indicator will be on the right.
 | 
				
			||||||
#+NAME: screen-wibox-setup
 | 
					#+NAME: screen-wibox-setup
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  s.wibox:setup {
 | 
					s.wibox:setup {
 | 
				
			||||||
  layout = wibox.layout.align.horizontal,
 | 
					  layout = wibox.layout.align.horizontal,
 | 
				
			||||||
  { -- Left widgets
 | 
					  { -- Left widgets
 | 
				
			||||||
    layout = wibox.layout.fixed.horizontal,
 | 
					    layout = wibox.layout.fixed.horizontal,
 | 
				
			||||||
@ -737,12 +737,12 @@ the system tray, the clock and the layout indicator will be on the right.
 | 
				
			|||||||
    textclock,
 | 
					    textclock,
 | 
				
			||||||
    s.layoutbox,
 | 
					    s.layoutbox,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In the end, our code looks like this:
 | 
					In the end, our code looks like this:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  awful.screen.connect_for_each_screen(function(s)
 | 
					awful.screen.connect_for_each_screen(function(s)
 | 
				
			||||||
      <<screen-set-pape>>
 | 
					      <<screen-set-pape>>
 | 
				
			||||||
      <<screen-taglist>>
 | 
					      <<screen-taglist>>
 | 
				
			||||||
      <<screen-taglist-widget>>
 | 
					      <<screen-taglist-widget>>
 | 
				
			||||||
@ -751,7 +751,7 @@ In the end, our code looks like this:
 | 
				
			|||||||
      <<screen-layout-indicator>>
 | 
					      <<screen-layout-indicator>>
 | 
				
			||||||
      <<screen-wibox-widget>>
 | 
					      <<screen-wibox-widget>>
 | 
				
			||||||
      <<screen-wibox-setup>>
 | 
					      <<screen-wibox-setup>>
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Mouse bindings
 | 
					* Mouse bindings
 | 
				
			||||||
@ -762,9 +762,9 @@ It is possible with Awesome to bind some shortcuts to mouse events when the
 | 
				
			|||||||
mouse is above Awesome itself (not above some client). Only one is set: the
 | 
					mouse is above Awesome itself (not above some client). Only one is set: the
 | 
				
			||||||
right click opens the Awesome menu.
 | 
					right click opens the Awesome menu.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  root.buttons(gears.table.join(
 | 
					root.buttons(gears.table.join(
 | 
				
			||||||
               awful.button({}, 3, function() mainmenu:toggle() end)
 | 
					               awful.button({}, 3, function() mainmenu:toggle() end)
 | 
				
			||||||
  ))
 | 
					))
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I will also set three mouse bindings for when the mouse is above a client:
 | 
					I will also set three mouse bindings for when the mouse is above a client:
 | 
				
			||||||
@ -777,7 +777,7 @@ I will also set three mouse bindings for when the mouse is above a client:
 | 
				
			|||||||
  focusing it and making it a floating client.
 | 
					  focusing it and making it a floating client.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  clientbuttons = gears.table.join(
 | 
					clientbuttons = gears.table.join(
 | 
				
			||||||
  awful.button({ }, 1, function (c)
 | 
					  awful.button({ }, 1, function (c)
 | 
				
			||||||
      c:emit_signal("request::activate", "mouse_click", {raise = true})
 | 
					      c:emit_signal("request::activate", "mouse_click", {raise = true})
 | 
				
			||||||
  end),
 | 
					  end),
 | 
				
			||||||
@ -794,7 +794,7 @@ I will also set three mouse bindings for when the mouse is above a client:
 | 
				
			|||||||
      c.floating = true
 | 
					      c.floating = true
 | 
				
			||||||
      awful.mouse.client.resize(c)
 | 
					      awful.mouse.client.resize(c)
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Keybindings
 | 
					* Keybindings
 | 
				
			||||||
@ -830,7 +830,7 @@ Here is a description of the tables displayed below:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: gen-sc-text
 | 
					#+NAME: gen-sc-text
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
  (lambda (x)
 | 
					(lambda (x)
 | 
				
			||||||
  (let ((key         (nth 0 x))
 | 
					  (let ((key         (nth 0 x))
 | 
				
			||||||
        (modifiers   (nth 1 x))
 | 
					        (modifiers   (nth 1 x))
 | 
				
			||||||
        (lambda-p    (pcase (nth 2 x)
 | 
					        (lambda-p    (pcase (nth 2 x)
 | 
				
			||||||
@ -863,7 +863,7 @@ Here is a description of the tables displayed below:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: gen-sc-glob
 | 
					#+NAME: gen-sc-glob
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var table=sc-client
 | 
					#+BEGIN_SRC emacs-lisp :var table=sc-client
 | 
				
			||||||
  (mapconcat
 | 
					(mapconcat
 | 
				
			||||||
 <<gen-sc-text>>
 | 
					 <<gen-sc-text>>
 | 
				
			||||||
 (seq-filter (lambda (x)
 | 
					 (seq-filter (lambda (x)
 | 
				
			||||||
               (let ((clientkey-p (nth 6 x)))
 | 
					               (let ((clientkey-p (nth 6 x)))
 | 
				
			||||||
@ -875,7 +875,7 @@ Here is a description of the tables displayed below:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: gen-sc-client
 | 
					#+NAME: gen-sc-client
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var table=sc-client :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :var table=sc-client :cache yes
 | 
				
			||||||
  (mapconcat
 | 
					(mapconcat
 | 
				
			||||||
 <<gen-sc-text>>
 | 
					 <<gen-sc-text>>
 | 
				
			||||||
 (seq-filter (lambda (keybind)
 | 
					 (seq-filter (lambda (keybind)
 | 
				
			||||||
               (string= "yes" (nth 6 keybind)))
 | 
					               (string= "yes" (nth 6 keybind)))
 | 
				
			||||||
@ -885,7 +885,7 @@ Here is a description of the tables displayed below:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: sc-tag-num-gen
 | 
					#+NAME: sc-tag-num-gen
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var input=sc-tag-num :results drawer :wrap src lua
 | 
					#+BEGIN_SRC emacs-lisp :var input=sc-tag-num :results drawer :wrap src lua
 | 
				
			||||||
  (let (result)
 | 
					(let (result)
 | 
				
			||||||
  (dotimes (i 10 result)
 | 
					  (dotimes (i 10 result)
 | 
				
			||||||
    (let* ((j (+ 1 i)))
 | 
					    (let* ((j (+ 1 i)))
 | 
				
			||||||
      (setq result
 | 
					      (setq result
 | 
				
			||||||
@ -894,7 +894,7 @@ Here is a description of the tables displayed below:
 | 
				
			|||||||
              (lambda (line)
 | 
					              (lambda (line)
 | 
				
			||||||
                (format
 | 
					                (format
 | 
				
			||||||
                 "awful.key({%s},\"#%d\",function() %s%d) end,
 | 
					                 "awful.key({%s},\"#%d\",function() %s%d) end,
 | 
				
			||||||
  \t{description=\"%s%d\",group=\"%s\"})"
 | 
					\t{description=\"%s%d\",group=\"%s\"})"
 | 
				
			||||||
                 (nth 1 line) (+ j 9) (nth 2 line) j
 | 
					                 (nth 1 line) (+ j 9) (nth 2 line) j
 | 
				
			||||||
                 (nth 3 line) j (nth 4 line)))
 | 
					                 (nth 3 line) j (nth 4 line)))
 | 
				
			||||||
              input
 | 
					              input
 | 
				
			||||||
@ -908,7 +908,7 @@ Most of these keybindings are available at root-level of Awesome and will be
 | 
				
			|||||||
declared in the ~globalkeys~ variable, which will be added then to ~root.keys~
 | 
					declared in the ~globalkeys~ variable, which will be added then to ~root.keys~
 | 
				
			||||||
(see [[https://awesomewm.org/doc/api/libraries/root.html#keys]]).
 | 
					(see [[https://awesomewm.org/doc/api/libraries/root.html#keys]]).
 | 
				
			||||||
#+BEGIN_SRC lua :cache yes
 | 
					#+BEGIN_SRC lua :cache yes
 | 
				
			||||||
  globalkeys = gears.table.join(
 | 
					globalkeys = gears.table.join(
 | 
				
			||||||
  -- Awesome
 | 
					  -- Awesome
 | 
				
			||||||
  <<gen-sc-glob(sc-awesome)>>,
 | 
					  <<gen-sc-glob(sc-awesome)>>,
 | 
				
			||||||
  -- App
 | 
					  -- App
 | 
				
			||||||
@ -930,13 +930,13 @@ declared in the ~globalkeys~ variable, which will be added then to ~root.keys~
 | 
				
			|||||||
  -- Misc
 | 
					  -- Misc
 | 
				
			||||||
  <<gen-sc-glob(sc-misc)>>,
 | 
					  <<gen-sc-glob(sc-misc)>>,
 | 
				
			||||||
  <<sc-tag-num-gen()>>
 | 
					  <<sc-tag-num-gen()>>
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
  root.keys(globalkeys)
 | 
					root.keys(globalkeys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  clientkeys = gears.table.join(
 | 
					clientkeys = gears.table.join(
 | 
				
			||||||
  -- Client
 | 
					  -- Client
 | 
				
			||||||
  <<gen-sc-client(sc-client)>>
 | 
					  <<gen-sc-client(sc-client)>>
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Applications
 | 
					** Applications
 | 
				
			||||||
@ -1152,19 +1152,19 @@ when the latter spawn, such as their placement, their properties or even execute
 | 
				
			|||||||
a script. A rule can be applied through the ~manage~ signal, and they are all
 | 
					a script. A rule can be applied through the ~manage~ signal, and they are all
 | 
				
			||||||
stored in ~awful.rules.rules~, the global rules table, as follows:
 | 
					stored in ~awful.rules.rules~, the global rules table, as follows:
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.rules.rules = {
 | 
					awful.rules.rules = {
 | 
				
			||||||
  -- Rules here
 | 
					  -- Rules here
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Block for exporting rules from below
 | 
					# Block for exporting rules from below
 | 
				
			||||||
#+BEGIN_SRC lua :exports none
 | 
					#+BEGIN_SRC lua :exports none
 | 
				
			||||||
  awful.rules.rules = {
 | 
					awful.rules.rules = {
 | 
				
			||||||
  <<rules-universal>>,
 | 
					  <<rules-universal>>,
 | 
				
			||||||
  <<rules-floating>>,
 | 
					  <<rules-floating>>,
 | 
				
			||||||
  <<rules-titlebars>>,
 | 
					  <<rules-titlebars>>,
 | 
				
			||||||
  <<rules-default-tags>>
 | 
					  <<rules-default-tags>>
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For more documentation on rules and their syntax, you can read the [[https://awesomewm.org/doc/api/libraries/awful.rules.html][official
 | 
					For more documentation on rules and their syntax, you can read the [[https://awesomewm.org/doc/api/libraries/awful.rules.html][official
 | 
				
			||||||
@ -1177,11 +1177,11 @@ documentation]].
 | 
				
			|||||||
The first rule is a universal rule which will match all clients, as you can see
 | 
					The first rule is a universal rule which will match all clients, as you can see
 | 
				
			||||||
with its syntax below:
 | 
					with its syntax below:
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  { rule = {},
 | 
					{ rule = {},
 | 
				
			||||||
  properties = {
 | 
					  properties = {
 | 
				
			||||||
    -- List of properties
 | 
					    -- List of properties
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Here is the list of properties with their value to apply to all clients, and a
 | 
					Here is the list of properties with their value to apply to all clients, and a
 | 
				
			||||||
@ -1201,7 +1201,7 @@ short explanation as to what they do.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: rules-universal-properties
 | 
					#+NAME: rules-universal-properties
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :tangle no :exports none :var properties=rules-universal-properties-table :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :tangle no :exports none :var properties=rules-universal-properties-table :cache yes
 | 
				
			||||||
  (mapconcat (lambda (x)
 | 
					(mapconcat (lambda (x)
 | 
				
			||||||
             (format "%s = %s"
 | 
					             (format "%s = %s"
 | 
				
			||||||
                     (car x)
 | 
					                     (car x)
 | 
				
			||||||
                     (cadr x)))
 | 
					                     (cadr x)))
 | 
				
			||||||
@ -1248,7 +1248,7 @@ declare a rule that will match any of the provided conditions:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: rules-floating-conditions
 | 
					#+NAME: rules-floating-conditions
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :exports none :tangle no :var conditions=rules-floating-conditions-table :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :exports none :tangle no :var conditions=rules-floating-conditions-table :cache yes
 | 
				
			||||||
  (mapconcat (lambda (x)
 | 
					(mapconcat (lambda (x)
 | 
				
			||||||
             (format "%s = { \"%s\" }" (car x) (cadr x)))
 | 
					             (format "%s = { \"%s\" }" (car x) (cadr x)))
 | 
				
			||||||
           conditions
 | 
					           conditions
 | 
				
			||||||
           ",\n")
 | 
					           ",\n")
 | 
				
			||||||
@ -1266,9 +1266,9 @@ If any of these conditions is matched, then the client will be set as floating,
 | 
				
			|||||||
as you can see below:
 | 
					as you can see below:
 | 
				
			||||||
#+NAME: rules-floating
 | 
					#+NAME: rules-floating
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  { rule_any = {
 | 
					{ rule_any = {
 | 
				
			||||||
    <<rules-floating-conditions()>>
 | 
					    <<rules-floating-conditions()>>
 | 
				
			||||||
  }, properties = { floating = true }}
 | 
					}, properties = { floating = true }}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Titlebars
 | 
					** Titlebars
 | 
				
			||||||
@ -1278,9 +1278,9 @@ as you can see below:
 | 
				
			|||||||
Any normal or dialog client will get a titlebar. This is enabled like so:
 | 
					Any normal or dialog client will get a titlebar. This is enabled like so:
 | 
				
			||||||
#+NAME: rules-titlebars
 | 
					#+NAME: rules-titlebars
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  { rule_any = {type = { "normal", "dialog" }
 | 
					{ rule_any = {type = { "normal", "dialog" }
 | 
				
			||||||
             }, properties = { titlebars_enabled = true }
 | 
					             }, properties = { titlebars_enabled = true }
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Default tag for clients
 | 
					** Default tag for clients
 | 
				
			||||||
@ -1304,7 +1304,7 @@ to which tag by default.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: rules-default-tags-generate
 | 
					#+NAME: rules-default-tags-generate
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :tangle no :exports none :cache yes :var tags=rules-default-tags-table
 | 
					#+BEGIN_SRC emacs-lisp :tangle no :exports none :cache yes :var tags=rules-default-tags-table
 | 
				
			||||||
  (mapconcat (lambda (x)
 | 
					(mapconcat (lambda (x)
 | 
				
			||||||
             (format "{rule = {%s = \"%s\"}, properties = {screen = 1, tag = \"%d\"} }"
 | 
					             (format "{rule = {%s = \"%s\"}, properties = {screen = 1, tag = \"%d\"} }"
 | 
				
			||||||
                     (nth 0 x) (nth 1 x) (nth 2 x)))
 | 
					                     (nth 0 x) (nth 1 x) (nth 2 x)))
 | 
				
			||||||
           tags
 | 
					           tags
 | 
				
			||||||
@ -1325,7 +1325,7 @@ to which tag by default.
 | 
				
			|||||||
This is what these rules look like:
 | 
					This is what these rules look like:
 | 
				
			||||||
#+NAME: rules-default-tags
 | 
					#+NAME: rules-default-tags
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  <<rules-default-tags-generate()>>
 | 
					<<rules-default-tags-generate()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Signals
 | 
					* Signals
 | 
				
			||||||
@ -1344,14 +1344,14 @@ following snippet ensures this new client is not off the screen, unless its
 | 
				
			|||||||
position was deliberately set by a program or by the user. It will also spawn
 | 
					position was deliberately set by a program or by the user. It will also spawn
 | 
				
			||||||
the new client where the mouse currently is.
 | 
					the new client where the mouse currently is.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  client.connect_signal("manage", function (c)
 | 
					client.connect_signal("manage", function (c)
 | 
				
			||||||
  awful.client.movetoscreen(c, mouse.screen)
 | 
					  awful.client.movetoscreen(c, mouse.screen)
 | 
				
			||||||
  if awesome.startup
 | 
					  if awesome.startup
 | 
				
			||||||
      and not c.size_hints.user_position
 | 
					      and not c.size_hints.user_position
 | 
				
			||||||
      and not c.size_hints.program_position then
 | 
					      and not c.size_hints.program_position then
 | 
				
			||||||
    awful.placement.no_offscreen(c)
 | 
					    awful.placement.no_offscreen(c)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Titlebar creation
 | 
					** Titlebar creation
 | 
				
			||||||
@ -1363,13 +1363,13 @@ create titlebar (generally for new clients). The following snippet handles this
 | 
				
			|||||||
titlebar creation if titlebar creation was set to ~true~ in the [[#Rules-c6142cdf][rules]]. For a
 | 
					titlebar creation if titlebar creation was set to ~true~ in the [[#Rules-c6142cdf][rules]]. For a
 | 
				
			||||||
detailed explanation of the code, see below.
 | 
					detailed explanation of the code, see below.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  client.connect_signal("request::titlebars", function(c)
 | 
					client.connect_signal("request::titlebars", function(c)
 | 
				
			||||||
                        local buttons = gears.table.join(
 | 
					                        local buttons = gears.table.join(
 | 
				
			||||||
                          <<signal-titlebar-button1>>,
 | 
					                          <<signal-titlebar-button1>>,
 | 
				
			||||||
                          <<signal-titlebar-button3>>
 | 
					                          <<signal-titlebar-button3>>
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        <<signal-titlebar-create>>
 | 
					                        <<signal-titlebar-create>>
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The function has two main parts: the creation of the titlebar buttons (mouse
 | 
					The function has two main parts: the creation of the titlebar buttons (mouse
 | 
				
			||||||
@ -1378,29 +1378,29 @@ of the button is done by creating a local variable ~buttons~ which will be a
 | 
				
			|||||||
table created by the library ~gears~, in which will be buttons created by the
 | 
					table created by the library ~gears~, in which will be buttons created by the
 | 
				
			||||||
user.
 | 
					user.
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  local buttons = gears.table.join(
 | 
					local buttons = gears.table.join(
 | 
				
			||||||
  -- Buttons declared here
 | 
					  -- Buttons declared here
 | 
				
			||||||
  )
 | 
					)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can see a left click will enable the user to raise the window, but also it
 | 
					You can see a left click will enable the user to raise the window, but also it
 | 
				
			||||||
will enable the user to move the window (if it is floating of course).
 | 
					will enable the user to move the window (if it is floating of course).
 | 
				
			||||||
#+NAME: signal-titlebar-button1
 | 
					#+NAME: signal-titlebar-button1
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 1, function()
 | 
					awful.button({ }, 1, function()
 | 
				
			||||||
    c:emit_signal("request::activate", "titlebar", {raise = true})
 | 
					    c:emit_signal("request::activate", "titlebar", {raise = true})
 | 
				
			||||||
    awful.mouse.client.move(c)
 | 
					    awful.mouse.client.move(c)
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A right click on the titlebar will also raise the window, but will instead allow
 | 
					A right click on the titlebar will also raise the window, but will instead allow
 | 
				
			||||||
the user to resize the client.
 | 
					the user to resize the client.
 | 
				
			||||||
#+NAME: signal-titlebar-button3
 | 
					#+NAME: signal-titlebar-button3
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.button({ }, 3, function()
 | 
					awful.button({ }, 3, function()
 | 
				
			||||||
  c:emit_signal("request::activate", "titlebar", {raise = true})
 | 
					  c:emit_signal("request::activate", "titlebar", {raise = true})
 | 
				
			||||||
  awful.mouse.client.resize(c)
 | 
					  awful.mouse.client.resize(c)
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next comes the actual creation of the titlebar for the client ~c~. For that, we
 | 
					Next comes the actual creation of the titlebar for the client ~c~. For that, we
 | 
				
			||||||
@ -1408,9 +1408,9 @@ call ~awful.titlebar()~, tell it where the titlebar should be relative to the
 | 
				
			|||||||
client and what its setup should be. The full call should look like so:
 | 
					client and what its setup should be. The full call should look like so:
 | 
				
			||||||
#+NAME: signal-titlebar-create
 | 
					#+NAME: signal-titlebar-create
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  awful.titlebar(c, {position="left", size = 22}) : setup {
 | 
					awful.titlebar(c, {position="left", size = 22}) : setup {
 | 
				
			||||||
  <<signal-titlebar-setup>>
 | 
					  <<signal-titlebar-setup>>
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In the setup, I need to repeat to Awesome the titlebar should be on the left of
 | 
					In the setup, I need to repeat to Awesome the titlebar should be on the left of
 | 
				
			||||||
@ -1433,21 +1433,21 @@ vertically aligned, and then I can declare my bottom elements:
 | 
				
			|||||||
  aligned
 | 
					  aligned
 | 
				
			||||||
#+NAME: signal-titlebar-setup
 | 
					#+NAME: signal-titlebar-setup
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  { -- Top
 | 
					{ -- Top
 | 
				
			||||||
  awful.titlebar.widget.closebutton(c),
 | 
					  awful.titlebar.widget.closebutton(c),
 | 
				
			||||||
  awful.titlebar.widget.minimizebutton(c),
 | 
					  awful.titlebar.widget.minimizebutton(c),
 | 
				
			||||||
  awful.titlebar.widget.maximizedbutton(c),
 | 
					  awful.titlebar.widget.maximizedbutton(c),
 | 
				
			||||||
  layout = wibox.layout.fixed.vertical()
 | 
					  layout = wibox.layout.fixed.vertical()
 | 
				
			||||||
  },
 | 
					},
 | 
				
			||||||
  {
 | 
					{
 | 
				
			||||||
  layout = wibox.layout.fixed.vertical()
 | 
					  layout = wibox.layout.fixed.vertical()
 | 
				
			||||||
  }, -- Middle
 | 
					}, -- Middle
 | 
				
			||||||
  { -- Bottom
 | 
					{ -- Bottom
 | 
				
			||||||
  awful.titlebar.widget.floatingbutton(c),
 | 
					  awful.titlebar.widget.floatingbutton(c),
 | 
				
			||||||
  layout = wibox.layout.fixed.vertical()
 | 
					  layout = wibox.layout.fixed.vertical()
 | 
				
			||||||
  },
 | 
					},
 | 
				
			||||||
  layout = wibox.layout.align.vertical,
 | 
					layout = wibox.layout.align.vertical,
 | 
				
			||||||
  position = "left"
 | 
					position = "left"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Changes of focus
 | 
					** Changes of focus
 | 
				
			||||||
@ -1459,9 +1459,9 @@ makes windows hovered by the user’s mouse focused. Just for completeness’ sa
 | 
				
			|||||||
I included it in this document, but be aware this won’t be tangled into my
 | 
					I included it in this document, but be aware this won’t be tangled into my
 | 
				
			||||||
configuration file and focus will not follow my mouse.
 | 
					configuration file and focus will not follow my mouse.
 | 
				
			||||||
#+BEGIN_SRC lua :tangle no
 | 
					#+BEGIN_SRC lua :tangle no
 | 
				
			||||||
  client.connect_signal("mouse::enter", function(c)
 | 
					client.connect_signal("mouse::enter", function(c)
 | 
				
			||||||
                        c:emit_signal("request::activate", "mouse_enter", {raise = false})
 | 
					                        c:emit_signal("request::activate", "mouse_enter", {raise = false})
 | 
				
			||||||
  end)
 | 
					end)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is also possible to change the color of the borders based on client focus.
 | 
					It is also possible to change the color of the borders based on client focus.
 | 
				
			||||||
@ -1469,8 +1469,8 @@ While my clients don’t have any border, they do have a titlebar which color
 | 
				
			|||||||
changes based on the client’s focus. This is handled by the following code
 | 
					changes based on the client’s focus. This is handled by the following code
 | 
				
			||||||
snippet:
 | 
					snippet:
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 | 
					client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 | 
				
			||||||
  client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 | 
					client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 | 
				
			||||||
#+end_SRC
 | 
					#+end_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Autostart
 | 
					* Autostart
 | 
				
			||||||
@ -1482,7 +1482,7 @@ some autolaunch. All of my autolaunched apps are launch through a custom script
 | 
				
			|||||||
which you can [[file:~/org/config/bin.org::#Autostart-a99e99e7][find here]]. The command gets called with
 | 
					which you can [[file:~/org/config/bin.org::#Autostart-a99e99e7][find here]]. The command gets called with
 | 
				
			||||||
~awful.spawn.with_shell()~, as you can see below.
 | 
					~awful.spawn.with_shell()~, as you can see below.
 | 
				
			||||||
#+BEGIN_SRC lua
 | 
					#+BEGIN_SRC lua
 | 
				
			||||||
  awful.spawn.with_shell("autostart")
 | 
					awful.spawn.with_shell("autostart")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* What to do now                                                   :noexport:
 | 
					* What to do now                                                   :noexport:
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -47,8 +47,8 @@ partition is 16GB large.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
When you boot into the live ISO, execute the following command:
 | 
					When you boot into the live ISO, execute the following command:
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  pacman -Sy reflector
 | 
					pacman -Sy reflector
 | 
				
			||||||
  reflector -c FR -c DE -c BE -l 200 -p http -p https --sort rate \
 | 
					reflector -c FR -c DE -c BE -l 200 -p http -p https --sort rate \
 | 
				
			||||||
          --save /etc/pacman.d/mirrorlist --verbose
 | 
					          --save /etc/pacman.d/mirrorlist --verbose
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -67,14 +67,14 @@ how the distro works, I just want to be able to install my distro quickly now.
 | 
				
			|||||||
I’ll need to download the script with ~wget~, but apparently it isn’t installed
 | 
					I’ll need to download the script with ~wget~, but apparently it isn’t installed
 | 
				
			||||||
by default on Arch ISOs anymore, so I’ll need to install it.
 | 
					by default on Arch ISOs anymore, so I’ll need to install it.
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  pacman -S wget
 | 
					pacman -S wget
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, let’s grab the script. You can check it on [[https://github.com/matmoul/archfi][Github]].
 | 
					Now, let’s grab the script. You can check it on [[https://github.com/matmoul/archfi][Github]].
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  wget archfi.sf.net/archfi
 | 
					wget archfi.sf.net/archfi
 | 
				
			||||||
  # Or from matmoul.github.io/archfi if SourceForge is down
 | 
					# Or from matmoul.github.io/archfi if SourceForge is down
 | 
				
			||||||
  sh archfi
 | 
					sh archfi
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then, follow the instructions and install Arch Linux. Take the opportunity to
 | 
					Then, follow the instructions and install Arch Linux. Take the opportunity to
 | 
				
			||||||
@ -90,28 +90,32 @@ your computer.
 | 
				
			|||||||
:HEADER-ARGS:fish: :tangle ~/.config/yadm/bootstrap :shebang "#!/usr/bin/fish" :exports code :mkdirp yes
 | 
					:HEADER-ARGS:fish: :tangle ~/.config/yadm/bootstrap :shebang "#!/usr/bin/fish" :exports code :mkdirp yes
 | 
				
			||||||
:CUSTOM_ID: Execute_bootstrap-e37054ef
 | 
					:CUSTOM_ID: Execute_bootstrap-e37054ef
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
The first thing I will do is add the [[https://github.com/archlinuxcn/repo][ArchLinuxCN]] repository so I can get access
 | 
					The first thing I will do is add the [[https://aur.chaotic.cx/][Chaotic AUR]] repository so I can
 | 
				
			||||||
to ~paru~.
 | 
					get access to ~paru~ as well as some AUR packages without the need of an
 | 
				
			||||||
 | 
					AUR helper (ironic considering ~paru~ is one)..
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  printf '[archlinuxcn]\nServer = https://repo.archlinuxcn.org/$arch\n' | sudo tee -a /etc/pacman.conf
 | 
					sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
 | 
				
			||||||
 | 
					sudo pacman-key --lsign-key 3056513887B78AEB
 | 
				
			||||||
 | 
					sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
 | 
				
			||||||
 | 
					printf '[chaotic-aur]\nServer = /etc/pacman.d/chaotic-mirrorlist\n' | sudo tee -a /etc/pacman.conf
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I can now install ~fish~, ~git~, and ~paru~:
 | 
					I can now install ~fish~, ~git~, and ~paru~:
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  sudo pacman -S fish git paru
 | 
					sudo pacman -S fish git paru
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And now that ~paru~ is available, we can install ~yadm~:
 | 
					And now that ~paru~ is available, we can install ~yadm~:
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  paru -S yadm
 | 
					paru -S yadm
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
~yadm~ comes with a very handy feature: its bootstrap script. It can be executed
 | 
					~yadm~ comes with a very handy feature: its bootstrap script. It can be executed
 | 
				
			||||||
automatically once the dotfiles are cloned with yadm:
 | 
					automatically once the dotfiles are cloned with yadm:
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  yadm clone https://labs.phundrak.com/phundrak/dotfiles
 | 
					yadm clone https://labs.phundrak.com/phundrak/dotfiles
 | 
				
			||||||
  # or if labs.phundrak.com is down or too slow for you
 | 
					# or if labs.phundrak.com is down or too slow for you
 | 
				
			||||||
  #yadm clone https://github.com/phundrak/dotfiles
 | 
					#yadm clone https://github.com/phundrak/dotfiles
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s take a look at what it does.
 | 
					Let’s take a look at what it does.
 | 
				
			||||||
@ -123,11 +127,11 @@ Let’s take a look at what it does.
 | 
				
			|||||||
Some private files are stored encrypted in the repository of my yadm dotfiles. I
 | 
					Some private files are stored encrypted in the repository of my yadm dotfiles. I
 | 
				
			||||||
will need them later on during the bootstrap execution.
 | 
					will need them later on during the bootstrap execution.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  if test "$USER" = 'phundrak'
 | 
					if test "$USER" = 'phundrak'
 | 
				
			||||||
    yadm decrypt
 | 
					    yadm decrypt
 | 
				
			||||||
  else
 | 
					else
 | 
				
			||||||
    whiptail --yesno "Decrypt private files?" 8 40 && yadm decrypt
 | 
					    whiptail --yesno "Decrypt private files?" 8 40 && yadm decrypt
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Get a correct keyboard layout
 | 
					** Get a correct keyboard layout
 | 
				
			||||||
@ -140,24 +144,24 @@ or the American QWERTY layout, so I make it so the Menu key switches for me my
 | 
				
			|||||||
layout between these three. This makes it so my xorg configuration of my
 | 
					layout between these three. This makes it so my xorg configuration of my
 | 
				
			||||||
keyboard looks like this:
 | 
					keyboard looks like this:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set keyboardconf \
 | 
					set keyboardconf \
 | 
				
			||||||
  'Section "InputClass"
 | 
					'Section "InputClass"
 | 
				
			||||||
        Identifier "system-keyboard"
 | 
					        Identifier "system-keyboard"
 | 
				
			||||||
        MatchIsKeyboard "on"
 | 
					        MatchIsKeyboard "on"
 | 
				
			||||||
        Option "XkbLayout" "fr"
 | 
					        Option "XkbLayout" "fr"
 | 
				
			||||||
        Option "XkbModel" "pc104"
 | 
					        Option "XkbModel" "pc104"
 | 
				
			||||||
        Option "XkbVariant" "bepo_afnor"
 | 
					        Option "XkbVariant" "bepo_afnor"
 | 
				
			||||||
        Option "XkbOptions" "caps:ctrl_modifier"
 | 
					        Option "XkbOptions" "caps:ctrl_modifier"
 | 
				
			||||||
  EndSection'
 | 
					EndSection'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
So, let’s ask the user if they want to set it as their keyboard configuration.
 | 
					So, let’s ask the user if they want to set it as their keyboard configuration.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Set keyboard layout #########################################################\n\n"
 | 
					printf "\n# Set keyboard layout #########################################################\n\n"
 | 
				
			||||||
  whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
 | 
					whiptail --yesno "Would you like to set your keyboard layout to the bépo layout?" 8 55
 | 
				
			||||||
  if test $status -eq 0
 | 
					if test $status -eq 0
 | 
				
			||||||
    echo $keyboardconf | sudo tee /etc/X11/xorg.conf.d/00-keyboard.conf
 | 
					    echo $keyboardconf | sudo tee /etc/X11/xorg.conf.d/00-keyboard.conf
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Set our locale
 | 
					** Set our locale
 | 
				
			||||||
@ -167,12 +171,12 @@ So, let’s ask the user if they want to set it as their keyboard configuration.
 | 
				
			|||||||
I use two main locales, the French and US UTF-8 locales, and I like to keep the
 | 
					I use two main locales, the French and US UTF-8 locales, and I like to keep the
 | 
				
			||||||
Japanese locale activated just in case.
 | 
					Japanese locale activated just in case.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
 | 
					set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I’ll let the user accept them one by one.
 | 
					I’ll let the user accept them one by one.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Set locale ##################################################################\n\n"
 | 
					printf "\n# Set locale ##################################################################\n\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for item in $mylocales
 | 
					  for item in $mylocales
 | 
				
			||||||
      whiptail --yesno "Set the \"$item\" locale?" 8 40
 | 
					      whiptail --yesno "Set the \"$item\" locale?" 8 40
 | 
				
			||||||
@ -184,29 +188,29 @@ I’ll let the user accept them one by one.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
This is my configuration I usually use when it comes to my locale.
 | 
					This is my configuration I usually use when it comes to my locale.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set localeconf "LANG=en_DK.UTF-8
 | 
					set localeconf "LANG=en_DK.UTF-8
 | 
				
			||||||
  LC_COLLATE=C
 | 
					LC_COLLATE=C
 | 
				
			||||||
  LC_NAME=fr_FR.UTF-8
 | 
					LC_NAME=fr_FR.UTF-8
 | 
				
			||||||
  LC_IDENTIFICATION=fr_FR.UTF-8
 | 
					LC_IDENTIFICATION=fr_FR.UTF-8
 | 
				
			||||||
  LC_TELEPHONE=fr_FR.UTF-8
 | 
					LC_TELEPHONE=fr_FR.UTF-8
 | 
				
			||||||
  LC_MONETARY=fr_FR.UTF-8
 | 
					LC_MONETARY=fr_FR.UTF-8
 | 
				
			||||||
  LC_PAPER=fr_FR.UTF-8
 | 
					LC_PAPER=fr_FR.UTF-8
 | 
				
			||||||
  LC_ADDRESS=fr_FR.UTF-8
 | 
					LC_ADDRESS=fr_FR.UTF-8
 | 
				
			||||||
  LC_MEASUREMENT=fr_FR.UTF-8"
 | 
					LC_MEASUREMENT=fr_FR.UTF-8"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s set it as our system’s locale if the user whishes to.
 | 
					Let’s set it as our system’s locale if the user whishes to.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  whiptail --yesno "Do you agree to have the following locale set?\n\n     $localeconf"  20 43
 | 
					whiptail --yesno "Do you agree to have the following locale set?\n\n     $localeconf"  20 43
 | 
				
			||||||
  if test $status -eq 0
 | 
					if test $status -eq 0
 | 
				
			||||||
    echo $localeconf | sudo tee /etc/locale.conf
 | 
					    echo $localeconf | sudo tee /etc/locale.conf
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now we can generate our locale!
 | 
					Now we can generate our locale!
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Generate locale #############################################################\n\n"
 | 
					printf "\n# Generate locale #############################################################\n\n"
 | 
				
			||||||
  sudo locale-gen
 | 
					sudo locale-gen
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Create some folders
 | 
					** Create some folders
 | 
				
			||||||
@ -216,9 +220,9 @@ Now we can generate our locale!
 | 
				
			|||||||
Let’s create some folders we might need for mounting our drives, Android devices
 | 
					Let’s create some folders we might need for mounting our drives, Android devices
 | 
				
			||||||
and CDs.
 | 
					and CDs.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Create directories for mounting #############################################\n\n"
 | 
					printf "\n# Create directories for mounting #############################################\n\n"
 | 
				
			||||||
  sudo mkdir -p /mnt/{USB,CD,Android}
 | 
					sudo mkdir -p /mnt/{USB,CD,Android}
 | 
				
			||||||
  sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
 | 
					sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Set user’s shell to fish
 | 
					** Set user’s shell to fish
 | 
				
			||||||
@ -227,11 +231,11 @@ and CDs.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
First of all, the bootstrap shell will set the user’s shell to fish.
 | 
					First of all, the bootstrap shell will set the user’s shell to fish.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Set fish as the default shell ###############################################\n\n"
 | 
					printf "\n# Set fish as the default shell ###############################################\n\n"
 | 
				
			||||||
  whiptail --yesno "Set the current user’s default shell to fish?" 8 50
 | 
					whiptail --yesno "Set the current user’s default shell to fish?" 8 50
 | 
				
			||||||
  if test $status -eq 0 -a ! "$SHELL" = '/usr/bin/fish'
 | 
					if test $status -eq 0 -a ! "$SHELL" = '/usr/bin/fish'
 | 
				
			||||||
    chsh -s /usr/bin/fish
 | 
					    chsh -s /usr/bin/fish
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Install basic packages
 | 
					** Install basic packages
 | 
				
			||||||
@ -240,49 +244,49 @@ First of all, the bootstrap shell will set the user’s shell to fish.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Let’s set in a custom varible what packages we’ll be needing.
 | 
					Let’s set in a custom varible what packages we’ll be needing.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set PACKAGES \
 | 
					set PACKAGES \
 | 
				
			||||||
  acpi acpilight adobe-source-han-sans-jp-fonts arc-gtk-theme asar ascii \
 | 
					acpi acpilight adobe-source-han-sans-jp-fonts arc-gtk-theme asar ascii \
 | 
				
			||||||
  aspell-en aspell-fr awesome awesome-terminal-fonts awesome-freedesktop-git \
 | 
					aspell-en aspell-fr awesome awesome-terminal-fonts awesome-freedesktop-git \
 | 
				
			||||||
  base-devel bashtop bat biber bitwarden-bin bluez-firmware bluez-utils bzip2 \
 | 
					base-devel bashtop bat biber bitwarden-bin bluez-firmware bluez-utils bzip2 \
 | 
				
			||||||
  chicken chromium clisp corrupter-git cppcheck cppreference \
 | 
					chicken chromium clisp corrupter-git cppcheck cppreference \
 | 
				
			||||||
  cppreference-devhelp cpupower discord-canary discount docker docker-compose \
 | 
					cppreference-devhelp cpupower discord-canary discount docker docker-compose \
 | 
				
			||||||
  dockerfile-language-server-bin doxygen emacs emacs-org-mode exa exfat-utils \
 | 
					dockerfile-language-server-bin doxygen emacs emacs-org-mode exa exfat-utils \
 | 
				
			||||||
  farbfeld fd ffmpegthumbnailer findutils firefox flake8 flat-remix-gtk freeglut \
 | 
					farbfeld fd ffmpegthumbnailer findutils firefox flake8 flat-remix-gtk freeglut \
 | 
				
			||||||
  fzf gcc-libs gdb gimp gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts \
 | 
					fzf gcc-libs gdb gimp gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts \
 | 
				
			||||||
  gnuplot go go-tools golangci-lint-bin graphviz htop hugo i3lock-color \
 | 
					gnuplot go go-tools golangci-lint-bin graphviz htop hugo i3lock-color \
 | 
				
			||||||
  inetutils isync inter-font javascript-typescript-langserver js-beautify \
 | 
					inetutils isync inter-font javascript-typescript-langserver js-beautify \
 | 
				
			||||||
  jfsutils jmtpfs kitty lain-git libxft-bgra linux-headers lldb logrotate meson \
 | 
					jfsutils jmtpfs kitty lain-git libxft-bgra linux-headers lldb logrotate meson \
 | 
				
			||||||
  minted man-db man-pages mpc mpd mpd-rich-presence-discord-git mpv mupdf-tools \
 | 
					minted man-db man-pages mpc mpd mpd-rich-presence-discord-git mpv mupdf-tools \
 | 
				
			||||||
  nano ncdu ncmpcpp nemo-fileroller nemo-preview neofetch netctl \
 | 
					nano ncdu ncmpcpp nemo-fileroller nemo-preview neofetch netctl \
 | 
				
			||||||
  network-manager-applet networkmanager networkmanager-openvpn \
 | 
					network-manager-applet networkmanager networkmanager-openvpn \
 | 
				
			||||||
  nm-connection-editor nodejs-vmd nomacs nordic-theme-git nordvpn-bin \
 | 
					nm-connection-editor nodejs-vmd nomacs nordic-theme-git nordvpn-bin \
 | 
				
			||||||
  noto-fonts-emoji npm ntfs-3g numlockx obs-studio openssh otf-fandol \
 | 
					noto-fonts-emoji npm ntfs-3g numlockx obs-studio openssh otf-fandol \
 | 
				
			||||||
  otf-ipafont p7zip pacman-contrib pandoc-bin pass pavucontrol pdfpc picom-git \
 | 
					otf-ipafont p7zip pacman-contrib pandoc-bin pass pavucontrol pdfpc picom-git \
 | 
				
			||||||
  powerline-fonts prettier pulseaudio-bluetooth python-autoflake python-epc \
 | 
					powerline-fonts prettier pulseaudio-bluetooth python-autoflake python-epc \
 | 
				
			||||||
  python-importmagic python-language-server python-nose python-pip python-poetry \
 | 
					python-importmagic python-language-server python-nose python-pip python-poetry \
 | 
				
			||||||
  python-ptvsd python-pytest qt5-imageformats qemu r raw-thumbnailer reflector \
 | 
					python-ptvsd python-pytest qt5-imageformats qemu r raw-thumbnailer reflector \
 | 
				
			||||||
  ripgrep rofi rsync rtv ruby-rb-fsevent ruby-sass rustup samba scrot sent \
 | 
					ripgrep rofi rsync rtv ruby-rb-fsevent ruby-sass rustup samba scrot sent \
 | 
				
			||||||
  shadow siji-git simplescreenrecorder sshfs sxiv texlive-bibtexextra \
 | 
					shadow siji-git simplescreenrecorder sshfs sxiv texlive-bibtexextra \
 | 
				
			||||||
  texlive-fontsextra texlive-formatsextra texlive-humanities \
 | 
					texlive-fontsextra texlive-formatsextra texlive-humanities \
 | 
				
			||||||
  texlive-langjapanese texlive-pictures texlive-pstricks texlive-publishers \
 | 
					texlive-langjapanese texlive-pictures texlive-pstricks texlive-publishers \
 | 
				
			||||||
  texlive-science tldr tmux tree ttf-arphic-uming ttf-baekmuk ttf-charis-sil \
 | 
					texlive-science tldr tmux tree ttf-arphic-uming ttf-baekmuk ttf-charis-sil \
 | 
				
			||||||
  ttf-dejavu ttf-google-fonts-opinionated-git ttf-hanazono ttf-joypixels \
 | 
					ttf-dejavu ttf-google-fonts-opinionated-git ttf-hanazono ttf-joypixels \
 | 
				
			||||||
  ttf-koruri ttf-liberation ttf-monapo ttf-sazanami ttf-tibetan-machine \
 | 
					ttf-koruri ttf-liberation ttf-monapo ttf-sazanami ttf-tibetan-machine \
 | 
				
			||||||
  typescript typescript-language-server-bin unicode-emoji unrar usbutils \
 | 
					typescript typescript-language-server-bin unicode-emoji unrar usbutils \
 | 
				
			||||||
  valgrind vscode-css-languageserver-bin vscode-html-languageserver-bin w3m wget \
 | 
					valgrind vscode-css-languageserver-bin vscode-html-languageserver-bin w3m wget \
 | 
				
			||||||
  x11-ssh-askpass xclip xdg-user-dirs-gtk xfce-polkit xidlehook xfsprogs \
 | 
					x11-ssh-askpass xclip xdg-user-dirs-gtk xfce-polkit xidlehook xfsprogs \
 | 
				
			||||||
  xorg-drivers xorg-server xorg-xinit xss-lock xvkbd xwallpaper \
 | 
					xorg-drivers xorg-server xorg-xinit xss-lock xvkbd xwallpaper \
 | 
				
			||||||
  yaml-language-server-bin zeal
 | 
					yaml-language-server-bin zeal
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are the minimum I would have in my own installation. You can edit it
 | 
					These are the minimum I would have in my own installation. You can edit it
 | 
				
			||||||
however you want. Let’s install those.
 | 
					however you want. Let’s install those.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Installing needed packages ##################################################\n\n"
 | 
					printf "\n# Installing needed packages ##################################################\n\n"
 | 
				
			||||||
  sudo pacman -Syu
 | 
					sudo pacman -Syu
 | 
				
			||||||
  for pkg in $PACKAGES
 | 
					for pkg in $PACKAGES
 | 
				
			||||||
    paru -S --needed $pkg
 | 
					    paru -S --needed $pkg
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Tangle configuration files from Org files
 | 
					** Tangle configuration files from Org files
 | 
				
			||||||
@ -308,7 +312,7 @@ need to create:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: gen-dirs-tangle
 | 
					#+NAME: gen-dirs-tangle
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var dirs=dirs-tangled-files
 | 
					#+BEGIN_SRC emacs-lisp :var dirs=dirs-tangled-files
 | 
				
			||||||
  (mapconcat (lambda (x) (format "mkdir -p %s" (car x)))
 | 
					(mapconcat (lambda (x) (format "mkdir -p %s" (car x)))
 | 
				
			||||||
           dirs
 | 
					           dirs
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
@ -331,7 +335,7 @@ mkdir -p $HOME/org/capture
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Our code to generate such directories looks like this:
 | 
					Our code to generate such directories looks like this:
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  <<gen-dirs-tangle()>>
 | 
					<<gen-dirs-tangle()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The next step is to tangle all the Org files. Here is the list of files that are
 | 
					The next step is to tangle all the Org files. Here is the list of files that are
 | 
				
			||||||
@ -350,7 +354,7 @@ to be tangled:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: generate-tangle
 | 
					#+NAME: generate-tangle
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var files=tangled-files[,0]
 | 
					#+BEGIN_SRC emacs-lisp :var files=tangled-files[,0]
 | 
				
			||||||
  (mapconcat (lambda (x) (concat
 | 
					(mapconcat (lambda (x) (concat
 | 
				
			||||||
                        (format "printf '\\n\\n==== Tangling %s\\n\\n' && \\\n" x)
 | 
					                        (format "printf '\\n\\n==== Tangling %s\\n\\n' && \\\n" x)
 | 
				
			||||||
                        (concat "emacs -q --batch --eval '(require \\'ob-tangle)' \\\n"
 | 
					                        (concat "emacs -q --batch --eval '(require \\'ob-tangle)' \\\n"
 | 
				
			||||||
                                "--eval '(setq org-confirm-babel-evaluate nil)' \\\n"
 | 
					                                "--eval '(setq org-confirm-babel-evaluate nil)' \\\n"
 | 
				
			||||||
@ -403,8 +407,8 @@ emacs -q --batch --eval '(require \'ob-tangle)' \
 | 
				
			|||||||
#+end_example
 | 
					#+end_example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  printf "\n# Tangling org files ##########################################################\n\n"
 | 
					printf "\n# Tangling org files ##########################################################\n\n"
 | 
				
			||||||
  <<generate-tangle()>>
 | 
					<<generate-tangle()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Setting up Emacs: Installing Spacemacs
 | 
					** Setting up Emacs: Installing Spacemacs
 | 
				
			||||||
@ -418,19 +422,19 @@ cloned within our =~/.config/emacs= directory, and git won’t let us clone
 | 
				
			|||||||
Spacemacs in an already existing and non-empty directory. To make sure it isn’t
 | 
					Spacemacs in an already existing and non-empty directory. To make sure it isn’t
 | 
				
			||||||
one, let’s delete any potentially existing =~/.config/emacs= directory:
 | 
					one, let’s delete any potentially existing =~/.config/emacs= directory:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Installing Spacemacs ########################################################\n\n"
 | 
					printf "\n# Installing Spacemacs ########################################################\n\n"
 | 
				
			||||||
  rm -rf $HOME/.config/emacs $HOME/.emacs* .spacemacs
 | 
					rm -rf $HOME/.config/emacs $HOME/.emacs* .spacemacs
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now we can clone Spacemacs:
 | 
					Now we can clone Spacemacs:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  git clone --branch develop https://github.com/syl20bnr/spacemacs ~/.config/emacs
 | 
					git clone --branch develop https://github.com/syl20bnr/spacemacs ~/.config/emacs
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And we can restore what might have been deleted in our =~/.emacs.d/private=
 | 
					And we can restore what might have been deleted in our =~/.emacs.d/private=
 | 
				
			||||||
directory:
 | 
					directory:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  yadm checkout -- ~/.config/emacs/private/
 | 
					yadm checkout -- ~/.config/emacs/private/
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Set up dotfiles’ git repository
 | 
					** Set up dotfiles’ git repository
 | 
				
			||||||
@ -444,26 +448,26 @@ directory:
 | 
				
			|||||||
This line in the bootstrap script will test if the current user is using my
 | 
					This line in the bootstrap script will test if the current user is using my
 | 
				
			||||||
username. If yes, it’s probably me.
 | 
					username. If yes, it’s probably me.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  if test "$USER" = 'phundrak'
 | 
					if test "$USER" = 'phundrak'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If it is me installing and using these dotfiles, I want the remotes of my
 | 
					If it is me installing and using these dotfiles, I want the remotes of my
 | 
				
			||||||
dotfiles to be set to ssh remotes using my ssh keys.
 | 
					dotfiles to be set to ssh remotes using my ssh keys.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Update yadm’s remotes #######################################################\n\n"
 | 
					printf "\n# Update yadm’s remotes #######################################################\n\n"
 | 
				
			||||||
  yadm remote set-url origin git@labs.phundrak.com:phundrak/dotfiles.git
 | 
					yadm remote set-url origin git@labs.phundrak.com:phundrak/dotfiles.git
 | 
				
			||||||
  yadm remote add github git@github.com:phundrak/dotfiles.git
 | 
					yadm remote add github git@github.com:phundrak/dotfiles.git
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I will also want to decrypt my encrypted files, such as said ssh keys.
 | 
					I will also want to decrypt my encrypted files, such as said ssh keys.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
 | 
					printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
 | 
				
			||||||
  yadm decrypt
 | 
					yadm decrypt
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let’s close this ~if~ statement.
 | 
					Finally, let’s close this ~if~ statement.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Update our submodules
 | 
					*** Update our submodules
 | 
				
			||||||
@ -473,8 +477,8 @@ Finally, let’s close this ~if~ statement.
 | 
				
			|||||||
Now we can download the various dependencies of our dotfiles. To do so, let’s
 | 
					Now we can download the various dependencies of our dotfiles. To do so, let’s
 | 
				
			||||||
run the following command:
 | 
					run the following command:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Getting yadm susbmodules ####################################################\n\n"
 | 
					printf "\n# Getting yadm susbmodules ####################################################\n\n"
 | 
				
			||||||
  yadm submodule update --init --recursive
 | 
					yadm submodule update --init --recursive
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Enable some services
 | 
					** Enable some services
 | 
				
			||||||
@ -491,14 +495,14 @@ them.
 | 
				
			|||||||
This service enables time syncing with the NTP protocol, so I can be sure my
 | 
					This service enables time syncing with the NTP protocol, so I can be sure my
 | 
				
			||||||
computer’s time is correct. The service first needs to be enabled:
 | 
					computer’s time is correct. The service first needs to be enabled:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Enabling timesync ###########################################################\n\n"
 | 
					printf "\n# Enabling timesync ###########################################################\n\n"
 | 
				
			||||||
  sudo systemctl enable --now systemd-timesyncd
 | 
					sudo systemctl enable --now systemd-timesyncd
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, let systemd know I want to use the NTP protocol to keep my computer’s time
 | 
					Now, let systemd know I want to use the NTP protocol to keep my computer’s time
 | 
				
			||||||
synced.
 | 
					synced.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  sudo timedatectl set-ntp true
 | 
					sudo timedatectl set-ntp true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Docker
 | 
					*** Docker
 | 
				
			||||||
@ -507,17 +511,17 @@ synced.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
First, let’s activate Docker on startup.
 | 
					First, let’s activate Docker on startup.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Enabling and starting Docker ################################################\n\n"
 | 
					printf "\n# Enabling and starting Docker ################################################\n\n"
 | 
				
			||||||
  sudo systemctl enable --now docker
 | 
					sudo systemctl enable --now docker
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, if we wish it, we can be added to the =docker= group so we won’t have to
 | 
					Now, if we wish it, we can be added to the =docker= group so we won’t have to
 | 
				
			||||||
type =sudo= each time we call Docker or Docker Compose.
 | 
					type =sudo= each time we call Docker or Docker Compose.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  read --prompt "echo 'Do you wish to be added to the `docker` group? (Y/n): ' " -l adddockergroup
 | 
					read --prompt "echo 'Do you wish to be added to the `docker` group? (Y/n): ' " -l adddockergroup
 | 
				
			||||||
  if test $adddockergroup = 'y' || test $adddockergroup = "Y" || test $adddockergroup = ''
 | 
					if test $adddockergroup = 'y' || test $adddockergroup = "Y" || test $adddockergroup = ''
 | 
				
			||||||
    sudo usermod -aG docker $USER
 | 
					    sudo usermod -aG docker $USER
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Emacs
 | 
					*** Emacs
 | 
				
			||||||
@ -529,8 +533,8 @@ in. However, the service won’t be started immediately, I personally prefer to
 | 
				
			|||||||
start a standalone instance in which installing and compiling the Emacs packages
 | 
					start a standalone instance in which installing and compiling the Emacs packages
 | 
				
			||||||
will happen, and then once that is done I will start the service.
 | 
					will happen, and then once that is done I will start the service.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Enabling Emacs as user service ##############################################\n\n"
 | 
					printf "\n# Enabling Emacs as user service ##############################################\n\n"
 | 
				
			||||||
  systemctl --user enable emacs
 | 
					systemctl --user enable emacs
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Mpd
 | 
					*** Mpd
 | 
				
			||||||
@ -540,9 +544,9 @@ will happen, and then once that is done I will start the service.
 | 
				
			|||||||
Mpd will also use as a user service in order to get rid of some lines of code in
 | 
					Mpd will also use as a user service in order to get rid of some lines of code in
 | 
				
			||||||
my configuration.
 | 
					my configuration.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Enabling Mpd as a user service ##############################################\n\n"
 | 
					printf "\n# Enabling Mpd as a user service ##############################################\n\n"
 | 
				
			||||||
  mkdir -p ~/.config/mpd/playlists
 | 
					mkdir -p ~/.config/mpd/playlists
 | 
				
			||||||
  systemctl --user enable --now mpd
 | 
					systemctl --user enable --now mpd
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** SSH server
 | 
					*** SSH server
 | 
				
			||||||
@ -552,11 +556,11 @@ my configuration.
 | 
				
			|||||||
Maybe we want to activate an SSH server on our machine. If so, we can enable it.
 | 
					Maybe we want to activate an SSH server on our machine. If so, we can enable it.
 | 
				
			||||||
Let’s ask the question.
 | 
					Let’s ask the question.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  whiptail --yesno 'Do you want to activate the ssh server?' 8 50
 | 
					whiptail --yesno 'Do you want to activate the ssh server?' 8 50
 | 
				
			||||||
  if test $status -eq 0
 | 
					if test $status -eq 0
 | 
				
			||||||
    printf "\n# Enabling ssh server #########################################################\n\n"
 | 
					    printf "\n# Enabling ssh server #########################################################\n\n"
 | 
				
			||||||
    sudo systemctl enable --now sshd
 | 
					    sudo systemctl enable --now sshd
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Acpilight
 | 
					*** Acpilight
 | 
				
			||||||
@ -568,7 +572,7 @@ actually no service to enable here, but we must ensure the user is part of the
 | 
				
			|||||||
~video~ group so we can modify the brightness of our screen without using
 | 
					~video~ group so we can modify the brightness of our screen without using
 | 
				
			||||||
~sudo~.
 | 
					~sudo~.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  sudo usermod -aG video $USER
 | 
					sudo usermod -aG video $USER
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** NordVPN
 | 
					*** NordVPN
 | 
				
			||||||
@ -579,7 +583,7 @@ Thanks to the AUR package ~nordvpn-bin~, I no longer have to manually maintain
 | 
				
			|||||||
my VPN connections with OpenVPN. However, it requires a service that we should
 | 
					my VPN connections with OpenVPN. However, it requires a service that we should
 | 
				
			||||||
activate:
 | 
					activate:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  sudo systemctl enable --now nordvpnd
 | 
					sudo systemctl enable --now nordvpnd
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s also set its default protocol to UDP. This will allow me to use any port
 | 
					Let’s also set its default protocol to UDP. This will allow me to use any port
 | 
				
			||||||
@ -587,7 +591,7 @@ while connected to any WiFi as long as the 443 port is available. Because yes, I
 | 
				
			|||||||
do connect to a WiFi that blocks some important ports, such as the IMAP and SMTP
 | 
					do connect to a WiFi that blocks some important ports, such as the IMAP and SMTP
 | 
				
			||||||
ports. Thanks University of Paris 8 for being SO paranoid.
 | 
					ports. Thanks University of Paris 8 for being SO paranoid.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  nordvpn s protocol tcp
 | 
					nordvpn s protocol tcp
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Symlink some system config files
 | 
					** Symlink some system config files
 | 
				
			||||||
@ -596,16 +600,16 @@ ports. Thanks University of Paris 8 for being SO paranoid.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
We have some files in [[file:ect/][etc/]] that are to be symlinked to =/etc=.
 | 
					We have some files in [[file:ect/][etc/]] that are to be symlinked to =/etc=.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  for f in (find ~/.etc -type f)
 | 
					for f in (find ~/.etc -type f)
 | 
				
			||||||
    set dest (echo $f | sed -n 's|^.*etc\(.*\)$|/etc\1|p')
 | 
					    set dest (echo $f | sed -n 's|^.*etc\(.*\)$|/etc\1|p')
 | 
				
			||||||
    sudo ln -s $f $dest
 | 
					    sudo ln -s $f $dest
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s also symlink the ~plock~ script ([[file:bin.org::#Lock-635fcb38][source here]]) to ~/usr/bin~ so ~xss-lock~
 | 
					Let’s also symlink the ~plock~ script ([[file:bin.org::#Lock-635fcb38][source here]]) to ~/usr/bin~ so ~xss-lock~
 | 
				
			||||||
can find it.
 | 
					can find it.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  sudo ln -s (which plock) /usr/bin/plock
 | 
					sudo ln -s (which plock) /usr/bin/plock
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Install packages from git
 | 
					** Install packages from git
 | 
				
			||||||
@ -614,7 +618,7 @@ can find it.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Now, let’s install some packages from git directly.
 | 
					Now, let’s install some packages from git directly.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  mkdir -p ~/fromGIT
 | 
					mkdir -p ~/fromGIT
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Reveal.JS
 | 
					*** Reveal.JS
 | 
				
			||||||
@ -624,9 +628,9 @@ Now, let’s install some packages from git directly.
 | 
				
			|||||||
I sometimes use Reveal.JS to make presentations, and I set its location in my
 | 
					I sometimes use Reveal.JS to make presentations, and I set its location in my
 | 
				
			||||||
[[file:.spacemacs][dotspacemacs]] file to be in =~/fromGIT=, so let’s clone it there.
 | 
					[[file:.spacemacs][dotspacemacs]] file to be in =~/fromGIT=, so let’s clone it there.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Install Reveal.JS ###########################################################\n\n"
 | 
					printf "\n# Install Reveal.JS ###########################################################\n\n"
 | 
				
			||||||
  cd ~/fromGIT
 | 
					cd ~/fromGIT
 | 
				
			||||||
  git clone https://github.com/hakimel/reveal.js.git
 | 
					git clone https://github.com/hakimel/reveal.js.git
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Install Rust
 | 
					** Install Rust
 | 
				
			||||||
@ -641,14 +645,14 @@ When using Rust, I bounce between two toolchains, the ~stable~ toolchain and the
 | 
				
			|||||||
~nightly~ toolchain, although I try to stick with Rust Stable. To install them,
 | 
					~nightly~ toolchain, although I try to stick with Rust Stable. To install them,
 | 
				
			||||||
I will use ~rustup~ which has already been installed previously.
 | 
					I will use ~rustup~ which has already been installed previously.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
 | 
					printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
 | 
				
			||||||
  rustup default stable
 | 
					rustup default stable
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will both download the stable toolchain and set it as the default one. Now
 | 
					This will both download the stable toolchain and set it as the default one. Now
 | 
				
			||||||
to install the nightly toolchain, let’s run this:
 | 
					to install the nightly toolchain, let’s run this:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  rustup toolchain install nightly
 | 
					rustup toolchain install nightly
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Install some utilities
 | 
					*** Install some utilities
 | 
				
			||||||
@ -658,8 +662,8 @@ to install the nightly toolchain, let’s run this:
 | 
				
			|||||||
We’ll need some utilities when developing Rust from Emacs, namely ~rustfmt~ and
 | 
					We’ll need some utilities when developing Rust from Emacs, namely ~rustfmt~ and
 | 
				
			||||||
~racer~. Let’s install them with ~cargo~.
 | 
					~racer~. Let’s install them with ~cargo~.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Add rust utilities ##########################################################\n\n"
 | 
					printf "\n# Add rust utilities ##########################################################\n\n"
 | 
				
			||||||
  cargo install rustfmt racer
 | 
					cargo install rustfmt racer
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We will also need some components for development purposes.
 | 
					We will also need some components for development purposes.
 | 
				
			||||||
@ -672,7 +676,7 @@ We will also need some components for development purposes.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: rust-components-gen
 | 
					#+NAME: rust-components-gen
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var components=rust-components-table[,0]
 | 
					#+BEGIN_SRC emacs-lisp :var components=rust-components-table[,0]
 | 
				
			||||||
  (mapconcat (lambda (x) (format "rustup component add %s" x))
 | 
					(mapconcat (lambda (x) (format "rustup component add %s" x))
 | 
				
			||||||
           components
 | 
					           components
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
@ -684,7 +688,7 @@ We will also need some components for development purposes.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the code to do so:
 | 
					Here is the code to do so:
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  <<rust-components-gen()>>
 | 
					<<rust-components-gen()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Install some python packages
 | 
					** Install some python packages
 | 
				
			||||||
@ -703,7 +707,7 @@ working.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: python-packages-gen
 | 
					#+NAME: python-packages-gen
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var packages=python-packages-table[,0]
 | 
					#+BEGIN_SRC emacs-lisp :var packages=python-packages-table[,0]
 | 
				
			||||||
  (format "pip install --user %s"
 | 
					(format "pip install --user %s"
 | 
				
			||||||
        (string-join packages " "))
 | 
					        (string-join packages " "))
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -712,8 +716,8 @@ working.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Let’s install them locally for our user.
 | 
					Let’s install them locally for our user.
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  printf "\n# Installing Python packages ##################################################\n\n"
 | 
					printf "\n# Installing Python packages ##################################################\n\n"
 | 
				
			||||||
  <<python-packages-gen()>>
 | 
					<<python-packages-gen()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Set up Chicken (Scheme interpreter/compiler)
 | 
					** Set up Chicken (Scheme interpreter/compiler)
 | 
				
			||||||
@ -723,14 +727,14 @@ Let’s install them locally for our user.
 | 
				
			|||||||
Chicken needs to be set up before being used. First, we need to install its
 | 
					Chicken needs to be set up before being used. First, we need to install its
 | 
				
			||||||
documentation.
 | 
					documentation.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Setting up Chicken ##########################################################\n\n"
 | 
					printf "\n# Setting up Chicken ##########################################################\n\n"
 | 
				
			||||||
  chicken-install -s apropos chicken-doc
 | 
					chicken-install -s apropos chicken-doc
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then, we’ll complete the documentation like so:
 | 
					Then, we’ll complete the documentation like so:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  cd (chicken-csi -b -e "(import (chicken platform))" -p "(chicken-home)")
 | 
					cd (chicken-csi -b -e "(import (chicken platform))" -p "(chicken-home)")
 | 
				
			||||||
  curl https://3e8.org/pub/chicken-doc/chicken-doc-repo.tgz | sudo tar zx
 | 
					curl https://3e8.org/pub/chicken-doc/chicken-doc-repo.tgz | sudo tar zx
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Set up our fish shell
 | 
					** Set up our fish shell
 | 
				
			||||||
@ -746,8 +750,8 @@ order to improve the user experience.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
We will be using ~fisher~ as our extensions manager for Fish. Let’s install it.
 | 
					We will be using ~fisher~ as our extensions manager for Fish. Let’s install it.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  printf "\n# Installing fisher ###########################################################\n\n"
 | 
					printf "\n# Installing fisher ###########################################################\n\n"
 | 
				
			||||||
  curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
 | 
					curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Install our extensions
 | 
					*** Install our extensions
 | 
				
			||||||
@ -770,7 +774,7 @@ I generally use the following extensions in my Fish shell.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: fish-extensions-gen
 | 
					#+NAME: fish-extensions-gen
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var extensions=fish-extensions-table[,0]
 | 
					#+BEGIN_SRC emacs-lisp :var extensions=fish-extensions-table[,0]
 | 
				
			||||||
  (mapconcat (lambda (x) (format "fisher add %s" x))
 | 
					(mapconcat (lambda (x) (format "fisher add %s" x))
 | 
				
			||||||
           extensions
 | 
					           extensions
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
@ -786,6 +790,6 @@ I generally use the following extensions in my Fish shell.
 | 
				
			|||||||
: fisher add oh-my-fish/theme-bobthefish
 | 
					: fisher add oh-my-fish/theme-bobthefish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  printf "\n# Installing Fisher Extensions ################################################\n\n"
 | 
					printf "\n# Installing Fisher Extensions ################################################\n\n"
 | 
				
			||||||
  <<fish-extensions-gen()>>
 | 
					<<fish-extensions-gen()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -18,9 +18,9 @@ abbreviations.
 | 
				
			|||||||
Just in case, we might need sometimes to declare the fish function =fish_title=
 | 
					Just in case, we might need sometimes to declare the fish function =fish_title=
 | 
				
			||||||
as =true=, so let’s do so.
 | 
					as =true=, so let’s do so.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  function fish_title
 | 
					function fish_title
 | 
				
			||||||
    true
 | 
					    true
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Fish from within Emacs
 | 
					* Fish from within Emacs
 | 
				
			||||||
@ -30,9 +30,9 @@ as =true=, so let’s do so.
 | 
				
			|||||||
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
 | 
					I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
 | 
				
			||||||
variable =TERM= needs to have the value =eterm-color=.
 | 
					variable =TERM= needs to have the value =eterm-color=.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  if test -n "$EMACS"
 | 
					if test -n "$EMACS"
 | 
				
			||||||
    set -x TERM eterm-color
 | 
					    set -x TERM eterm-color
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Tramp remote access
 | 
					* Tramp remote access
 | 
				
			||||||
@ -44,14 +44,14 @@ precise shell appearance: a simple =$= followed by a space after which to put
 | 
				
			|||||||
the commands it needs to execute, and nothing else. Due to this, let’s
 | 
					the commands it needs to execute, and nothing else. Due to this, let’s
 | 
				
			||||||
deactivate and redefine some of the functions defining the appearance of fish.
 | 
					deactivate and redefine some of the functions defining the appearance of fish.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  if test "$TERM" = "dumb"
 | 
					if test "$TERM" = "dumb"
 | 
				
			||||||
    function fish_prompt
 | 
					    function fish_prompt
 | 
				
			||||||
        echo "\$ "
 | 
					        echo "\$ "
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    function fish_right_prompt; end
 | 
					    function fish_right_prompt; end
 | 
				
			||||||
    function fish_greeting; end
 | 
					    function fish_greeting; end
 | 
				
			||||||
    function fish_title; end
 | 
					    function fish_title; end
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Regular fish shell appearance
 | 
					* Regular fish shell appearance
 | 
				
			||||||
@ -63,11 +63,11 @@ when I’m the one using it: the ~fish_greeting~ function. I use it to give me a
 | 
				
			|||||||
overview of my computer’s status, including its hostname, uptime, disks usage,
 | 
					overview of my computer’s status, including its hostname, uptime, disks usage,
 | 
				
			||||||
ram usage, swap usage, and networking.
 | 
					ram usage, swap usage, and networking.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set RED '\033[0;31m'
 | 
					set RED '\033[0;31m'
 | 
				
			||||||
  set GREEN '\033[0;32m'
 | 
					set GREEN '\033[0;32m'
 | 
				
			||||||
  set NC '\033[0m'
 | 
					set NC '\033[0m'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function display_slider # used total
 | 
					function display_slider # used total
 | 
				
			||||||
    set -l slider_length 38
 | 
					    set -l slider_length 38
 | 
				
			||||||
    set -l used $argv[1]
 | 
					    set -l used $argv[1]
 | 
				
			||||||
    set -l total $argv[2]
 | 
					    set -l total $argv[2]
 | 
				
			||||||
@ -80,9 +80,9 @@ ram usage, swap usage, and networking.
 | 
				
			|||||||
    echo -en (string repeat -n $unused_slider '=')
 | 
					    echo -en (string repeat -n $unused_slider '=')
 | 
				
			||||||
    echo -en $NC
 | 
					    echo -en $NC
 | 
				
			||||||
    echo -en "]"
 | 
					    echo -en "]"
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function fish_greeting
 | 
					function fish_greeting
 | 
				
			||||||
    set -l ruler_length 79
 | 
					    set -l ruler_length 79
 | 
				
			||||||
    set -l ruler (string repeat -n $ruler_length "=")
 | 
					    set -l ruler (string repeat -n $ruler_length "=")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -127,24 +127,24 @@ ram usage, swap usage, and networking.
 | 
				
			|||||||
    printf "Ram.....:        %s %5dM / %5dM (%2d%%)\n" (display_slider $ram_used $ram_total) $ram_used $ram_total $ram_p
 | 
					    printf "Ram.....:        %s %5dM / %5dM (%2d%%)\n" (display_slider $ram_used $ram_total) $ram_used $ram_total $ram_p
 | 
				
			||||||
    printf "Swap....:        %s %5dM / %5dM (%2d%%)\n" (display_slider $swap_used $swap_total) $swap_used $swap_total $swap_p
 | 
					    printf "Swap....:        %s %5dM / %5dM (%2d%%)\n" (display_slider $swap_used $swap_total) $swap_used $swap_total $swap_p
 | 
				
			||||||
    echo $ruler
 | 
					    echo $ruler
 | 
				
			||||||
  end
 | 
					end
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The theme I use for fish is [[https://github.com/oh-my-fish/theme-bobthefish][bobthefish]], which by default puts a really long
 | 
					The theme I use for fish is [[https://github.com/oh-my-fish/theme-bobthefish][bobthefish]], which by default puts a really long
 | 
				
			||||||
timestamp to the right of the prompt. I want something shorter, so here is the
 | 
					timestamp to the right of the prompt. I want something shorter, so here is the
 | 
				
			||||||
variable to set, using the format specified in ~date(1)~.
 | 
					variable to set, using the format specified in ~date(1)~.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -g theme_date_format "+%g-%m-%d %H:%M:%S"
 | 
					set -g theme_date_format "+%g-%m-%d %H:%M:%S"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I also wish to have a kinda different newline prompt, so let’s set it:
 | 
					I also wish to have a kinda different newline prompt, so let’s set it:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -g theme_newline_prompt 'λ '
 | 
					set -g theme_newline_prompt 'λ '
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let’s set our prompt’s theme to the Nord theme.
 | 
					Finally, let’s set our prompt’s theme to the Nord theme.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -g theme_color_scheme nord
 | 
					set -g theme_color_scheme nord
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Global variables
 | 
					* Global variables
 | 
				
			||||||
@ -154,24 +154,24 @@ Finally, let’s set our prompt’s theme to the Nord theme.
 | 
				
			|||||||
In order to keep some other code clean, I set the ~$BROWSER~ variable so I don’t
 | 
					In order to keep some other code clean, I set the ~$BROWSER~ variable so I don’t
 | 
				
			||||||
have to call my web browser directly but rather with this variable.
 | 
					have to call my web browser directly but rather with this variable.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx BROWSER firefox
 | 
					set -gx BROWSER firefox
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sometimes, software will rely on =SUDO_ASKPASS= to get a GUI from which it can
 | 
					Sometimes, software will rely on =SUDO_ASKPASS= to get a GUI from which it can
 | 
				
			||||||
get the sudo password. So, let’s declare it.
 | 
					get the sudo password. So, let’s declare it.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx SUDO_ASKPASS ~/.local/bin/askpass
 | 
					set -gx SUDO_ASKPASS ~/.local/bin/askpass
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In general, I prefer using ~bat~ to ~less~, although the former relies on the
 | 
					In general, I prefer using ~bat~ to ~less~, although the former relies on the
 | 
				
			||||||
latter, but ~bat~ provides nice wrapping around ~less~, including syntax
 | 
					latter, but ~bat~ provides nice wrapping around ~less~, including syntax
 | 
				
			||||||
highlighting. Let’s set the manpager to bat then:
 | 
					highlighting. Let’s set the manpager to bat then:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -x MANPAGER "sh -c 'col -bx | bat -l man -p'"
 | 
					set -x MANPAGER "sh -c 'col -bx | bat -l man -p'"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src fish
 | 
					#+begin_src fish
 | 
				
			||||||
  set -x XMODIFIERS
 | 
					set -x XMODIFIERS
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Development
 | 
					** Development
 | 
				
			||||||
@ -182,8 +182,8 @@ Now, let’s declare our editor of choice, EmacsClient; not Emacs itself since i
 | 
				
			|||||||
will most often be just quick edits, nothing too heavy, if it is called from the
 | 
					will most often be just quick edits, nothing too heavy, if it is called from the
 | 
				
			||||||
~EDITOR~ variable (from Git, for example), or from the ~VISUAL~ variable.
 | 
					~EDITOR~ variable (from Git, for example), or from the ~VISUAL~ variable.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx EDITOR emacsclient -c
 | 
					set -gx EDITOR emacsclient -c
 | 
				
			||||||
  set -gx VISUAL emacsclient -c
 | 
					set -gx VISUAL emacsclient -c
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We also need to set the path to the Dart SDK.
 | 
					We also need to set the path to the Dart SDK.
 | 
				
			||||||
@ -198,21 +198,21 @@ set -gx ANDROID_HOME $HOME/Android/Sdk
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Still related to Dart and Flutter development,
 | 
					Still related to Dart and Flutter development,
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx CHROME_EXECUTABLE /usr/bin/chromium
 | 
					set -gx CHROME_EXECUTABLE /usr/bin/chromium
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, we have two variables from Deno, the Node.js destroyer. Its base directory
 | 
					Next, we have two variables from Deno, the Node.js destroyer. Its base directory
 | 
				
			||||||
will be set in my XDG config directory, and its binaries will be located in my
 | 
					will be set in my XDG config directory, and its binaries will be located in my
 | 
				
			||||||
local binaries directory (see below).
 | 
					local binaries directory (see below).
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx DENO_DIR $HOME/.config/deno
 | 
					set -gx DENO_DIR $HOME/.config/deno
 | 
				
			||||||
  set -gx DENO_INSTALL_ROOT $HOME/.local/bin/deno
 | 
					set -gx DENO_INSTALL_ROOT $HOME/.local/bin/deno
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
 | 
					Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
 | 
				
			||||||
let’s do so.
 | 
					let’s do so.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
 | 
					set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** ~$PATH~
 | 
					** ~$PATH~
 | 
				
			||||||
@ -237,7 +237,7 @@ my own executables, and some more.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: generate-extra-paths
 | 
					#+NAME: generate-extra-paths
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var paths=extra-paths[,0] :exports none :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :var paths=extra-paths[,0] :exports none :cache yes
 | 
				
			||||||
  (mapconcat #'identity
 | 
					(mapconcat #'identity
 | 
				
			||||||
           paths " \\\n")
 | 
					           paths " \\\n")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -251,8 +251,8 @@ my own executables, and some more.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
So, let’s set our user paths:
 | 
					So, let’s set our user paths:
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  set -g fish_user_paths \
 | 
					set -g fish_user_paths \
 | 
				
			||||||
  <<generate-extra-paths()>>
 | 
					<<generate-extra-paths()>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Abbreviations
 | 
					* Abbreviations
 | 
				
			||||||
@ -261,7 +261,7 @@ So, let’s set our user paths:
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+NAME: generate-abbr
 | 
					#+NAME: generate-abbr
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var table=[] :exports none :tangle no
 | 
					#+BEGIN_SRC emacs-lisp :var table=[] :exports none :tangle no
 | 
				
			||||||
  (replace-regexp-in-string "\\\\vert[{}]*"
 | 
					(replace-regexp-in-string "\\\\vert[{}]*"
 | 
				
			||||||
                          "|"
 | 
					                          "|"
 | 
				
			||||||
                          (mapconcat (lambda (x) (format "abbr %s '%s'" (car x) (cadr x)))
 | 
					                          (mapconcat (lambda (x) (format "abbr %s '%s'" (car x) (cadr x)))
 | 
				
			||||||
                                     table
 | 
					                                     table
 | 
				
			||||||
@ -306,7 +306,7 @@ running right now, and =pscpu10= limits that to the top 10 threads. Similarly,
 | 
				
			|||||||
| psmem10      | ps auxf \vert sort -nr -k 4 \vert head -10         |
 | 
					| psmem10      | ps auxf \vert sort -nr -k 4 \vert head -10         |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_SRC fish
 | 
					#+begin_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=mgmt-abbr)>>
 | 
					<<generate-abbr(table=mgmt-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** System management (packages and services)
 | 
					** System management (packages and services)
 | 
				
			||||||
@ -332,7 +332,7 @@ can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru
 | 
				
			|||||||
| purge        | paru -Sc         |
 | 
					| purge        | paru -Sc         |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=pm-abbr)>>
 | 
					<<generate-abbr(table=pm-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Service management
 | 
					*** Service management
 | 
				
			||||||
@ -349,7 +349,7 @@ system services, I can instead type a simple capital =S=.
 | 
				
			|||||||
| suser        | systemctl --user |
 | 
					| suser        | systemctl --user |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=service-abbr)>>
 | 
					<<generate-abbr(table=service-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Development
 | 
					** Development
 | 
				
			||||||
@ -373,7 +373,7 @@ configuration for debug or release profiles.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=abbr-cmake)>>
 | 
					<<generate-abbr(table=abbr-cmake)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Docker
 | 
					*** Docker
 | 
				
			||||||
@ -398,7 +398,7 @@ full command, so I use these instead.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=abbr-docker)>>
 | 
					<<generate-abbr(table=abbr-docker)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Text editors
 | 
					*** Text editors
 | 
				
			||||||
@ -419,7 +419,7 @@ In case we want to launch Emacs in GUI mode anyways, ~egui~ is available too.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish :noweb yes
 | 
					#+BEGIN_SRC fish :noweb yes
 | 
				
			||||||
  <<generate-abbr(table=abbr-text-ed)>>
 | 
					<<generate-abbr(table=abbr-text-ed)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Compilation
 | 
					*** Compilation
 | 
				
			||||||
@ -438,7 +438,7 @@ with the ~-Wall~ flag activated.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=abbr-comp)>>
 | 
					<<generate-abbr(table=abbr-comp)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Git
 | 
					*** Git
 | 
				
			||||||
@ -455,7 +455,7 @@ covered.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=abbr-git)>>
 | 
					<<generate-abbr(table=abbr-git)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** LaTeX
 | 
					** LaTeX
 | 
				
			||||||
@ -475,7 +475,7 @@ abbreviation. Same goes for ~texhash~ which must be run as sudo.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=latex-abbr)>>
 | 
					<<generate-abbr(table=latex-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Some security measures
 | 
					** Some security measures
 | 
				
			||||||
@ -507,7 +507,7 @@ accidentally removing the root folder. I added the same option to =chgrp=,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=sec-abbr)>>
 | 
					<<generate-abbr(table=sec-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Typos
 | 
					** Typos
 | 
				
			||||||
@ -530,7 +530,7 @@ So, let's just replace the former by the latter. I'm also very bad at typing
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here is the corresponding fish configuration:
 | 
					Here is the corresponding fish configuration:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=typo-abbr)>>
 | 
					<<generate-abbr(table=typo-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Misc
 | 
					** Misc
 | 
				
			||||||
@ -548,33 +548,33 @@ Here you will find various commands related to media in general. the first one
 | 
				
			|||||||
is a command to play some chillhop from the [[https://www.youtube.com/user/Chillhopdotcom][Chillhop YouTube channel]]'s
 | 
					is a command to play some chillhop from the [[https://www.youtube.com/user/Chillhopdotcom][Chillhop YouTube channel]]'s
 | 
				
			||||||
livestream.
 | 
					livestream.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/user/Chillhopdotcom/live" &'
 | 
					abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/user/Chillhopdotcom/live" &'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When it comes to mpv, I do not want to force it to open a graphical window if
 | 
					When it comes to mpv, I do not want to force it to open a graphical window if
 | 
				
			||||||
for example I want to listen to an audio file. I also do not want any border on
 | 
					for example I want to listen to an audio file. I also do not want any border on
 | 
				
			||||||
that window. So, I declared this abbreviation.
 | 
					that window. So, I declared this abbreviation.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr mpv 'mpv --no-border --force-window=no'
 | 
					abbr mpv 'mpv --no-border --force-window=no'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When I want to download a song from YouTube, I'll just use the command ~flac
 | 
					When I want to download a song from YouTube, I'll just use the command ~flac
 | 
				
			||||||
videoIdentifier~ to get it through ~youtube-dl~.
 | 
					videoIdentifier~ to get it through ~youtube-dl~.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(uploader)s/%(title)s.%(ext)s"'
 | 
					abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(uploader)s/%(title)s.%(ext)s"'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some sane default options for ~sxiv~, a simple X image Viewer. This includes
 | 
					Some sane default options for ~sxiv~, a simple X image Viewer. This includes
 | 
				
			||||||
playing GIFs and not displaying the filename below. Sxiv will also open in
 | 
					playing GIFs and not displaying the filename below. Sxiv will also open in
 | 
				
			||||||
fullscreen and will fit the displayed image to the frame.
 | 
					fullscreen and will fit the displayed image to the frame.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr sxiv 'sxiv -abfs f'
 | 
					abbr sxiv 'sxiv -abfs f'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let's declare the following abbreviation that will launch an mpv
 | 
					Finally, let's declare the following abbreviation that will launch an mpv
 | 
				
			||||||
instance displaying my webcam:
 | 
					instance displaying my webcam:
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0'
 | 
					abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Sudo
 | 
					*** Sudo
 | 
				
			||||||
@ -585,7 +585,7 @@ First, I make it so that ~sudo~ comes with the ~-A~ switch in order to call my
 | 
				
			|||||||
custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0d7a8c0][askpass]]). I also made it so
 | 
					custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0d7a8c0][askpass]]). I also made it so
 | 
				
			||||||
~please~ is an equivalent to ~sudo -A~ as a joke.
 | 
					~please~ is an equivalent to ~sudo -A~ as a joke.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr please 'sudo -A'
 | 
					abbr please 'sudo -A'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** History
 | 
					*** History
 | 
				
			||||||
@ -595,7 +595,7 @@ custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0
 | 
				
			|||||||
I find it more intuitive and faster to just write ~hist~ instead of ~history~,
 | 
					I find it more intuitive and faster to just write ~hist~ instead of ~history~,
 | 
				
			||||||
so let's declare that.
 | 
					so let's declare that.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr hist history
 | 
					abbr hist history
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Compression
 | 
					*** Compression
 | 
				
			||||||
@ -614,7 +614,7 @@ management]]).
 | 
				
			|||||||
| untar        | tar -xvzf |
 | 
					| untar        | tar -xvzf |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=tar-abbr)>>
 | 
					<<generate-abbr(table=tar-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** exa
 | 
					*** exa
 | 
				
			||||||
@ -628,7 +628,7 @@ management]]).
 | 
				
			|||||||
| lsl          | exa -halg@ --group-directories-first --git |
 | 
					| lsl          | exa -halg@ --group-directories-first --git |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=exa-abbr)>>
 | 
					<<generate-abbr(table=exa-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Network Management
 | 
					*** Network Management
 | 
				
			||||||
@ -638,7 +638,7 @@ management]]).
 | 
				
			|||||||
First, we have just =nmcli= with sane default options, that is a pretty output
 | 
					First, we have just =nmcli= with sane default options, that is a pretty output
 | 
				
			||||||
with colors.
 | 
					with colors.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr nmcli 'nmcli -p -c auto'
 | 
					abbr nmcli 'nmcli -p -c auto'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** NordVPN
 | 
					*** NordVPN
 | 
				
			||||||
@ -662,7 +662,7 @@ the US.
 | 
				
			|||||||
| ncu          | nordvpn c United_States |
 | 
					| ncu          | nordvpn c United_States |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  <<generate-abbr(table=nordvpn-abbr)>>
 | 
					<<generate-abbr(table=nordvpn-abbr)>>
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Wget
 | 
					*** Wget
 | 
				
			||||||
@ -671,7 +671,7 @@ the US.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
By default, continue a download that was interupted.
 | 
					By default, continue a download that was interupted.
 | 
				
			||||||
#+BEGIN_SRC fish
 | 
					#+BEGIN_SRC fish
 | 
				
			||||||
  abbr wget 'wget -c'
 | 
					abbr wget 'wget -c'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Last thing before we’re done
 | 
					* Last thing before we’re done
 | 
				
			||||||
 | 
				
			|||||||
@ -126,23 +126,23 @@ This file is tangled at ~$HOME/.gtkrc-2.0~. This is an equivalent for the GTK3
 | 
				
			|||||||
configuration file you will see below, and it shares most of its settings.
 | 
					configuration file you will see below, and it shares most of its settings.
 | 
				
			||||||
First, let’s select the Nordic theme for GTK2. Let’s also set the icon theme.
 | 
					First, let’s select the Nordic theme for GTK2. Let’s also set the icon theme.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  # -*- mode: unix-config -*-
 | 
					# -*- mode: unix-config -*-
 | 
				
			||||||
  gtk-theme-name="Nordic"
 | 
					gtk-theme-name="Nordic"
 | 
				
			||||||
  gtk-icon-theme-name="Flat-Remix-Dark"
 | 
					gtk-icon-theme-name="Flat-Remix-Dark"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-xft-antialias=1
 | 
					gtk-xft-antialias=1
 | 
				
			||||||
  gtk-xft-hinting=1
 | 
					gtk-xft-hinting=1
 | 
				
			||||||
  gtk-xft-hintstyle="hintslight"
 | 
					gtk-xft-hintstyle="hintslight"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This changes the shortcuts in menu, let’s also make the menus snappier.
 | 
					This changes the shortcuts in menu, let’s also make the menus snappier.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-can-change-accels=1
 | 
					gtk-can-change-accels=1
 | 
				
			||||||
  gtk-menu-bar-popup-delay=0
 | 
					gtk-menu-bar-popup-delay=0
 | 
				
			||||||
  gtk-menu-popdown-delay=0
 | 
					gtk-menu-popdown-delay=0
 | 
				
			||||||
  gtk-menu-popup-delay=0
 | 
					gtk-menu-popup-delay=0
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
***** Filechooser
 | 
					***** Filechooser
 | 
				
			||||||
@ -151,60 +151,60 @@ This changes the shortcuts in menu, let’s also make the menus snappier.
 | 
				
			|||||||
:CUSTOM_ID: Features-Graphical_tweaks-GTK_Settings-GTK2-Filechooser-389f040d
 | 
					:CUSTOM_ID: Features-Graphical_tweaks-GTK_Settings-GTK2-Filechooser-389f040d
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  [Filechooser Settings]
 | 
					[Filechooser Settings]
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The first option alows me to open the file chooser in the current working
 | 
					The first option alows me to open the file chooser in the current working
 | 
				
			||||||
directory:
 | 
					directory:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  StartupMode=cwd
 | 
					StartupMode=cwd
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, setting the location mode to ~path-bar~ will show the path as buttons that
 | 
					Next, setting the location mode to ~path-bar~ will show the path as buttons that
 | 
				
			||||||
can be clicked rather than the full path.
 | 
					can be clicked rather than the full path.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  LocationMode=path-bar
 | 
					LocationMode=path-bar
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With this configuration, by default we won’t see hidden files.
 | 
					With this configuration, by default we won’t see hidden files.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  ShowHidden=true
 | 
					ShowHidden=true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And we'll also see the size of the visible files.
 | 
					And we'll also see the size of the visible files.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  ShowSizeColumn=true
 | 
					ShowSizeColumn=true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, let’s choose the geometry of our file picker. These two first lines set
 | 
					Now, let’s choose the geometry of our file picker. These two first lines set
 | 
				
			||||||
where the file picker appears:
 | 
					where the file picker appears:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  GeometryX=566
 | 
					GeometryX=566
 | 
				
			||||||
  GeometryY=202
 | 
					GeometryY=202
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And these two describe the size of the window:
 | 
					And these two describe the size of the window:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  GeometryWidth=800
 | 
					GeometryWidth=800
 | 
				
			||||||
  GeometryHeight=400
 | 
					GeometryHeight=400
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With these two lines, we set how our files are sorted: by name, and in the
 | 
					With these two lines, we set how our files are sorted: by name, and in the
 | 
				
			||||||
ascending order.
 | 
					ascending order.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  SortColumn=name
 | 
					SortColumn=name
 | 
				
			||||||
  SortOrder=ascending
 | 
					SortOrder=ascending
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Our default view mode is a list of files:
 | 
					Our default view mode is a list of files:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  ViewMode=list-view
 | 
					ViewMode=list-view
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And finally, setting our icon view scale to ~-1~ sets the icon view to the max
 | 
					And finally, setting our icon view scale to ~-1~ sets the icon view to the max
 | 
				
			||||||
size.
 | 
					size.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  IconViewScale=-1
 | 
					IconViewScale=-1
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** GTK3
 | 
					**** GTK3
 | 
				
			||||||
@ -215,44 +215,44 @@ size.
 | 
				
			|||||||
The following file helps me choosing the aspect of various GTK+ 3 software,
 | 
					The following file helps me choosing the aspect of various GTK+ 3 software,
 | 
				
			||||||
including their theme and icons. First, let’s declare the header:
 | 
					including their theme and icons. First, let’s declare the header:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  [Settings]
 | 
					[Settings]
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, let’s hint to GTK that I prefer dark themes. This can have an influence
 | 
					Now, let’s hint to GTK that I prefer dark themes. This can have an influence
 | 
				
			||||||
also on some websites that can detect this preference and therefore set their
 | 
					also on some websites that can detect this preference and therefore set their
 | 
				
			||||||
own theme to dark by themselves.
 | 
					own theme to dark by themselves.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-application-prefer-dark-theme = true
 | 
					gtk-application-prefer-dark-theme = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, the icon theme is the Flat Remix Dark icon theme:
 | 
					Next, the icon theme is the Flat Remix Dark icon theme:
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-icon-theme-name = Flat-Remix-Dark
 | 
					gtk-icon-theme-name = Flat-Remix-Dark
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, the general theme for GTK3 is Nordic.
 | 
					Now, the general theme for GTK3 is Nordic.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-theme-name = Nordic
 | 
					gtk-theme-name = Nordic
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-can-change-accels=1
 | 
					gtk-can-change-accels=1
 | 
				
			||||||
  gtk-menu-bar-popup-delay=0
 | 
					gtk-menu-bar-popup-delay=0
 | 
				
			||||||
  gtk-menu-popdown-delay=0
 | 
					gtk-menu-popdown-delay=0
 | 
				
			||||||
  gtk-menu-popup-delay=0
 | 
					gtk-menu-popup-delay=0
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-xft-antialias=1
 | 
					gtk-xft-antialias=1
 | 
				
			||||||
  gtk-xft-hinting=1
 | 
					gtk-xft-hinting=1
 | 
				
			||||||
  gtk-xft-hintstyle=hintslight
 | 
					gtk-xft-hintstyle=hintslight
 | 
				
			||||||
  # gtk-xft-rgba=rgb
 | 
					# gtk-xft-rgba=rgb
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Since window decorations are handled by my WMs, I will leave this variable
 | 
					Since window decorations are handled by my WMs, I will leave this variable
 | 
				
			||||||
empty.
 | 
					empty.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  gtk-decoration-layout=
 | 
					gtk-decoration-layout=
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Picom (Compton)
 | 
					*** Picom (Compton)
 | 
				
			||||||
@ -271,45 +271,45 @@ You can find my Picom configuration [[file:picom.org][here]].
 | 
				
			|||||||
The main body in my Xresources declaration is the declaration of my
 | 
					The main body in my Xresources declaration is the declaration of my
 | 
				
			||||||
color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]].
 | 
					color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]].
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  #define nord0 #2E3440
 | 
					#define nord0 #2E3440
 | 
				
			||||||
  #define nord1 #3B4252
 | 
					#define nord1 #3B4252
 | 
				
			||||||
  #define nord2 #434C5E
 | 
					#define nord2 #434C5E
 | 
				
			||||||
  #define nord3 #4C566A
 | 
					#define nord3 #4C566A
 | 
				
			||||||
  #define nord4 #D8DEE9
 | 
					#define nord4 #D8DEE9
 | 
				
			||||||
  #define nord5 #E5E9F0
 | 
					#define nord5 #E5E9F0
 | 
				
			||||||
  #define nord6 #ECEFF4
 | 
					#define nord6 #ECEFF4
 | 
				
			||||||
  #define nord7 #8FBCBB
 | 
					#define nord7 #8FBCBB
 | 
				
			||||||
  #define nord8 #88C0D0
 | 
					#define nord8 #88C0D0
 | 
				
			||||||
  #define nord9 #81A1C1
 | 
					#define nord9 #81A1C1
 | 
				
			||||||
  #define nord10 #5E81AC
 | 
					#define nord10 #5E81AC
 | 
				
			||||||
  #define nord11 #BF616A
 | 
					#define nord11 #BF616A
 | 
				
			||||||
  #define nord12 #D08770
 | 
					#define nord12 #D08770
 | 
				
			||||||
  #define nord13 #EBCB8B
 | 
					#define nord13 #EBCB8B
 | 
				
			||||||
  #define nord14 #A3BE8C
 | 
					#define nord14 #A3BE8C
 | 
				
			||||||
  #define nord15 #B48EAD
 | 
					#define nord15 #B48EAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ,*.foreground:   nord4
 | 
					,*.foreground:   nord4
 | 
				
			||||||
  ,*.background:   nord0
 | 
					,*.background:   nord0
 | 
				
			||||||
  ,*.cursorColor:  nord4
 | 
					,*.cursorColor:  nord4
 | 
				
			||||||
  ,*fading: 35
 | 
					,*fading: 35
 | 
				
			||||||
  ,*fadeColor: nord3
 | 
					,*fadeColor: nord3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ,*.color0: nord1
 | 
					,*.color0: nord1
 | 
				
			||||||
  ,*.color1: nord11
 | 
					,*.color1: nord11
 | 
				
			||||||
  ,*.color2: nord14
 | 
					,*.color2: nord14
 | 
				
			||||||
  ,*.color3: nord13
 | 
					,*.color3: nord13
 | 
				
			||||||
  ,*.color4: nord9
 | 
					,*.color4: nord9
 | 
				
			||||||
  ,*.color5: nord15
 | 
					,*.color5: nord15
 | 
				
			||||||
  ,*.color6: nord8
 | 
					,*.color6: nord8
 | 
				
			||||||
  ,*.color7: nord5
 | 
					,*.color7: nord5
 | 
				
			||||||
  ,*.color8: nord3
 | 
					,*.color8: nord3
 | 
				
			||||||
  ,*.color9: nord11
 | 
					,*.color9: nord11
 | 
				
			||||||
  ,*.color10: nord14
 | 
					,*.color10: nord14
 | 
				
			||||||
  ,*.color11: nord13
 | 
					,*.color11: nord13
 | 
				
			||||||
  ,*.color12: nord9
 | 
					,*.color12: nord9
 | 
				
			||||||
  ,*.color13: nord15
 | 
					,*.color13: nord15
 | 
				
			||||||
  ,*.color14: nord7
 | 
					,*.color14: nord7
 | 
				
			||||||
  ,*.color15: nord6
 | 
					,*.color15: nord6
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Text and source code editing
 | 
					** Text and source code editing
 | 
				
			||||||
@ -389,10 +389,10 @@ You can find my tmux configuration in [[file:tmux.org][tmux.org]]. It depends on
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
This file gets inserted automatically at the end of my emails.
 | 
					This file gets inserted automatically at the end of my emails.
 | 
				
			||||||
#+BEGIN_SRC text
 | 
					#+BEGIN_SRC text
 | 
				
			||||||
  Lucien “Phundrak” Cartier-Tilet
 | 
					Lucien “Phundrak” Cartier-Tilet
 | 
				
			||||||
  https://phundrak.com (Français)
 | 
					https://phundrak.com (Français)
 | 
				
			||||||
  https://phundrak.com/en (English)
 | 
					https://phundrak.com/en (English)
 | 
				
			||||||
  Sent from GNU/Emacs
 | 
					Sent from GNU/Emacs
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Global gitignore
 | 
					*** Global gitignore
 | 
				
			||||||
@ -405,14 +405,14 @@ of always adding them, let git now that some elements are to be ignored by
 | 
				
			|||||||
default, hence the [[file:.gitignore_global][~/.gitignore_global]] file. First, we don’t want nano’s backup
 | 
					default, hence the [[file:.gitignore_global][~/.gitignore_global]] file. First, we don’t want nano’s backup
 | 
				
			||||||
files.
 | 
					files.
 | 
				
			||||||
#+BEGIN_SRC text
 | 
					#+BEGIN_SRC text
 | 
				
			||||||
  ~*
 | 
					~*
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And object files and output binaries generated by =gcc= and the likes aren’t
 | 
					And object files and output binaries generated by =gcc= and the likes aren’t
 | 
				
			||||||
welcome either.
 | 
					welcome either.
 | 
				
			||||||
#+BEGIN_SRC text
 | 
					#+BEGIN_SRC text
 | 
				
			||||||
  ,*.out
 | 
					,*.out
 | 
				
			||||||
  ,*.o
 | 
					,*.o
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Paru
 | 
					*** Paru
 | 
				
			||||||
@ -428,19 +428,19 @@ is running, but if it ever happens it will be already concerning enough they
 | 
				
			|||||||
managed to. I also make use of [[file:bin.org::#Emacs-stuff-Dired-2eeca9da][my custom script dired]] so I can use Emacs’ Dired
 | 
					managed to. I also make use of [[file:bin.org::#Emacs-stuff-Dired-2eeca9da][my custom script dired]] so I can use Emacs’ Dired
 | 
				
			||||||
as the file manager for ~paru~.
 | 
					as the file manager for ~paru~.
 | 
				
			||||||
#+BEGIN_SRC conf :tangle ~/.config/paru/paru.conf
 | 
					#+BEGIN_SRC conf :tangle ~/.config/paru/paru.conf
 | 
				
			||||||
  [options]
 | 
					[options]
 | 
				
			||||||
  BottomUp
 | 
					BottomUp
 | 
				
			||||||
  Devel
 | 
					Devel
 | 
				
			||||||
  DevelSuffixes = -git -cvs -svn -bzr -darcs -always
 | 
					DevelSuffixes = -git -cvs -svn -bzr -darcs -always
 | 
				
			||||||
  NewsOnUpgrade
 | 
					NewsOnUpgrade
 | 
				
			||||||
  PgpFetch
 | 
					PgpFetch
 | 
				
			||||||
  Provides
 | 
					Provides
 | 
				
			||||||
  RemoveMake
 | 
					RemoveMake
 | 
				
			||||||
  SudoLoop
 | 
					SudoLoop
 | 
				
			||||||
  UpgradeMenu
 | 
					UpgradeMenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [bin]
 | 
					[bin]
 | 
				
			||||||
  FileManager = dired
 | 
					FileManager = dired
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Installation
 | 
					* Installation
 | 
				
			||||||
 | 
				
			|||||||
@ -26,9 +26,9 @@ The ~print_info~ function is the function called by Neofetch in order to print
 | 
				
			|||||||
the system information it could fetch. In this function, we’ll choose what to
 | 
					the system information it could fetch. In this function, we’ll choose what to
 | 
				
			||||||
display, and how. This function looks like this:
 | 
					display, and how. This function looks like this:
 | 
				
			||||||
#+BEGIN_SRC sh :tangle no
 | 
					#+BEGIN_SRC sh :tangle no
 | 
				
			||||||
  print_info() {
 | 
					print_info() {
 | 
				
			||||||
    # Print information here…
 | 
					    # Print information here…
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Generally, what we will display will be shown through the ~info~ function,
 | 
					Generally, what we will display will be shown through the ~info~ function,
 | 
				
			||||||
@ -58,7 +58,7 @@ interesting information; ~info "Memory" memory~ will look like
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+NAME: info-elements-gen
 | 
					#+NAME: info-elements-gen
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp :var table=info-elements-table :cache yes
 | 
					#+BEGIN_SRC emacs-lisp :var table=info-elements-table :cache yes
 | 
				
			||||||
  (mapconcat (lambda (x)
 | 
					(mapconcat (lambda (x)
 | 
				
			||||||
             (let ((prefix      (car x))
 | 
					             (let ((prefix      (car x))
 | 
				
			||||||
                   (information (cadr x)))
 | 
					                   (information (cadr x)))
 | 
				
			||||||
              (format "info %s%s"
 | 
					              (format "info %s%s"
 | 
				
			||||||
@ -90,9 +90,9 @@ info "Memory" memory
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Hence, the function looks like so:
 | 
					Hence, the function looks like so:
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  print_info() {
 | 
					print_info() {
 | 
				
			||||||
    <<info-elements-gen()>>
 | 
					    <<info-elements-gen()>>
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Each of these modules can be tuned with the variables presented below.
 | 
					Each of these modules can be tuned with the variables presented below.
 | 
				
			||||||
@ -130,7 +130,7 @@ This variable can shorten the output of the ~distro~ function.
 | 
				
			|||||||
  - on :: ~Arch Linux~
 | 
					  - on :: ~Arch Linux~
 | 
				
			||||||
  - off :: ~Arch~
 | 
					  - off :: ~Arch~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  distro_shorthand="off"
 | 
					distro_shorthand="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to display when the distro has been installed on the computer.
 | 
					It is possible to display when the distro has been installed on the computer.
 | 
				
			||||||
@ -164,7 +164,7 @@ terminal emulator I use.
 | 
				
			|||||||
  - ~viu~
 | 
					  - ~viu~
 | 
				
			||||||
- flag :: ~--backend~
 | 
					- flag :: ~--backend~
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  image_backend="kitty"
 | 
					image_backend="kitty"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, since I indicated I wanted an image engine, I’ll indicate neofetch which
 | 
					Now, since I indicated I wanted an image engine, I’ll indicate neofetch which
 | 
				
			||||||
@ -182,7 +182,7 @@ image mode, your wallpaper will be used.
 | 
				
			|||||||
  - ~command output (neofetch --ascii "$(fortune | cowsay -W 30)")~
 | 
					  - ~command output (neofetch --ascii "$(fortune | cowsay -W 30)")~
 | 
				
			||||||
- Flag :: ~--source~
 | 
					- Flag :: ~--source~
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  image_source="$HOME/org/config/img/leon.png"
 | 
					image_source="$HOME/org/config/img/leon.png"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default image size will probably not be correct since it is half the
 | 
					The default image size will probably not be correct since it is half the
 | 
				
			||||||
@ -195,7 +195,7 @@ terminal width and I have an ultrawide monitor, so I’ll need to set it manuall
 | 
				
			|||||||
  - ~none~
 | 
					  - ~none~
 | 
				
			||||||
- Flag :: ~--image-size~ or ~--size~
 | 
					- Flag :: ~--image-size~ or ~--size~
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  image_size="224px"
 | 
					image_size="224px"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Kernel
 | 
					**** Kernel
 | 
				
			||||||
@ -213,7 +213,7 @@ The variable below can shorten the output ofh the ~kernel~ function.
 | 
				
			|||||||
  - on :: ~4.8.9-1-ARCH~
 | 
					  - on :: ~4.8.9-1-ARCH~
 | 
				
			||||||
  - off :: ~Linux 4.8.9-1-ARCH~
 | 
					  - off :: ~Linux 4.8.9-1-ARCH~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  kernel_shorthand="off"
 | 
					kernel_shorthand="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** OS Architecture
 | 
					**** OS Architecture
 | 
				
			||||||
@ -230,7 +230,7 @@ This variable can show or hide the OS architecture in the ~distro~ output.
 | 
				
			|||||||
  - on :: ~Arch Linux x86_64~
 | 
					  - on :: ~Arch Linux x86_64~
 | 
				
			||||||
  - off :: ~Arch Linux~
 | 
					  - off :: ~Arch Linux~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  os_arch="off"
 | 
					os_arch="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Packages
 | 
					**** Packages
 | 
				
			||||||
@ -246,7 +246,7 @@ It is possible to show or hide Package Manager names.
 | 
				
			|||||||
  - tiny :: ~'908 (pacman, flatpak, snap)'~
 | 
					  - tiny :: ~'908 (pacman, flatpak, snap)'~
 | 
				
			||||||
  - off :: ~'908'~
 | 
					  - off :: ~'908'~
 | 
				
			||||||
#+BEGIN_SRC sh
 | 
					#+BEGIN_SRC sh
 | 
				
			||||||
  package_managers="on"
 | 
					package_managers="on"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Shell
 | 
					**** Shell
 | 
				
			||||||
@ -284,7 +284,7 @@ This allows to show the shell’s version in the output of ~shell~.
 | 
				
			|||||||
  - on :: ~bash 4.4.5~
 | 
					  - on :: ~bash 4.4.5~
 | 
				
			||||||
  - off :: ~bash~
 | 
					  - off :: ~bash~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  shell_version="off"
 | 
					shell_version="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Uptime
 | 
					*** Uptime
 | 
				
			||||||
@ -304,7 +304,7 @@ it a bit, while ~tiny~ shortens it greatly.
 | 
				
			|||||||
  - off :: ~2 days, 10 hours, 3 minutes~
 | 
					  - off :: ~2 days, 10 hours, 3 minutes~
 | 
				
			||||||
  - tiny :: ~2d 10h 3m~
 | 
					  - tiny :: ~2d 10h 3m~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  uptime_shorthand="on"
 | 
					uptime_shorthand="on"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** IP address
 | 
					*** IP address
 | 
				
			||||||
@ -317,20 +317,20 @@ It is possible to display the machine’s public IP address with the function
 | 
				
			|||||||
- Value :: ~"url"~
 | 
					- Value :: ~"url"~
 | 
				
			||||||
- Flag :: ~--ip_host~
 | 
					- Flag :: ~--ip_host~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  public_ip_host="http://ident.me"
 | 
					public_ip_host="http://ident.me"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Default value :: ~""~
 | 
					# - Default value :: ~""~
 | 
				
			||||||
- Values ::
 | 
					# - Values ::
 | 
				
			||||||
  - ~""~
 | 
					#   - ~""~
 | 
				
			||||||
  - ~""~
 | 
					#   - ~""~
 | 
				
			||||||
- Flag :: ~""~
 | 
					# - Flag :: ~""~
 | 
				
			||||||
- Supports ::
 | 
					# - Supports ::
 | 
				
			||||||
- Examples ::
 | 
					# - Examples ::
 | 
				
			||||||
  - on :: ~~
 | 
					#   - on :: ~~
 | 
				
			||||||
  - off :: ~~
 | 
					#   - off :: ~~
 | 
				
			||||||
#+begin_src sh
 | 
					# #+begin_src sh
 | 
				
			||||||
#+end_src
 | 
					# #+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Theming
 | 
					*** Theming
 | 
				
			||||||
:PROPERTIES:
 | 
					:PROPERTIES:
 | 
				
			||||||
@ -354,7 +354,7 @@ With this value, it is possible to shorten the output of the computer’s themin
 | 
				
			|||||||
  - on :: ~Numix, Adwaita~
 | 
					  - on :: ~Numix, Adwaita~
 | 
				
			||||||
  - off :: ~Numix [GTK2], Adwaita [GTK3]~
 | 
					  - off :: ~Numix [GTK2], Adwaita [GTK3]~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  gtk_shorthand="on"
 | 
					gtk_shorthand="on"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Enable or disable theming display for GTK2
 | 
					**** Enable or disable theming display for GTK2
 | 
				
			||||||
@ -372,7 +372,7 @@ this variable.
 | 
				
			|||||||
  - on ::  ~Numix [GTK2], Adwaita [GTK3]~
 | 
					  - on ::  ~Numix [GTK2], Adwaita [GTK3]~
 | 
				
			||||||
  - off :: ~Adwaita [GTK3]~
 | 
					  - off :: ~Adwaita [GTK3]~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  gtk2="off"
 | 
					gtk2="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Enable or disable theming display for GTK3
 | 
					**** Enable or disable theming display for GTK3
 | 
				
			||||||
@ -389,7 +389,7 @@ The same variable as above is also available for GTK3.
 | 
				
			|||||||
  - on ::  ~Numix [GTK2], Adwaita [GTK3]~
 | 
					  - on ::  ~Numix [GTK2], Adwaita [GTK3]~
 | 
				
			||||||
  - off :: ~Numix [GTK2]~
 | 
					  - off :: ~Numix [GTK2]~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  gtk3="off"
 | 
					gtk3="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Hardware
 | 
					** Hardware
 | 
				
			||||||
@ -415,7 +415,7 @@ With this variables, it is possible to show or hide the brand of a CPU in the
 | 
				
			|||||||
  - on :: ~Intel i7-6500U~
 | 
					  - on :: ~Intel i7-6500U~
 | 
				
			||||||
  - off :: ~i7-6500U~
 | 
					  - off :: ~i7-6500U~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  cpu_brand="off"
 | 
					cpu_brand="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** CPU speed
 | 
					**** CPU speed
 | 
				
			||||||
@ -432,7 +432,7 @@ With this variable, it is possible to show or hide the speed of the CPU.
 | 
				
			|||||||
  - on :: ~Intel i7-6500U (4) @ 3.1GHz~
 | 
					  - on :: ~Intel i7-6500U (4) @ 3.1GHz~
 | 
				
			||||||
  - off :: ~Intel i7-6500U (4)~
 | 
					  - off :: ~Intel i7-6500U (4)~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  cpu_speed="off"
 | 
					cpu_speed="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** CPU speed type
 | 
					**** CPU speed type
 | 
				
			||||||
@ -451,7 +451,7 @@ a value.
 | 
				
			|||||||
- Flag :: ~--speed_type~
 | 
					- Flag :: ~--speed_type~
 | 
				
			||||||
- Supports :: Linux with ~cpufreq~
 | 
					- Supports :: Linux with ~cpufreq~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  speed_type="bios_limit"
 | 
					speed_type="bios_limit"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** CPU speed shorthand
 | 
					**** CPU speed shorthand
 | 
				
			||||||
@ -469,7 +469,7 @@ supported in systems with CPU speed below 1GHz.
 | 
				
			|||||||
  - on :: ~i7-6500U (4) @ 3.1GHz~
 | 
					  - on :: ~i7-6500U (4) @ 3.1GHz~
 | 
				
			||||||
  - off :: ~i7-6500U (4) @ 3.100GHz~
 | 
					  - off :: ~i7-6500U (4) @ 3.100GHz~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  speed_shorthand="on"
 | 
					speed_shorthand="on"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** CPU cores
 | 
					**** CPU cores
 | 
				
			||||||
@ -490,7 +490,7 @@ available in the CPU.
 | 
				
			|||||||
  - physical :: ~Intel i7-6500U (2) @ 3.1GHz~ (All physical cores)
 | 
					  - physical :: ~Intel i7-6500U (2) @ 3.1GHz~ (All physical cores)
 | 
				
			||||||
  - off :: ~Intel i7-6500U @ 3.1GHz~
 | 
					  - off :: ~Intel i7-6500U @ 3.1GHz~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  cpu_cores="off"
 | 
					cpu_cores="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** CPU temperature
 | 
					**** CPU temperature
 | 
				
			||||||
@ -513,7 +513,7 @@ only supports newer Intel processors.
 | 
				
			|||||||
  - F :: ~Intel i7-6500U (4) @ 3.1GHz [82.0°F]~
 | 
					  - F :: ~Intel i7-6500U (4) @ 3.1GHz [82.0°F]~
 | 
				
			||||||
  - off :: ~Intel i7-6500U (4) @ 3.1GHz~
 | 
					  - off :: ~Intel i7-6500U (4) @ 3.1GHz~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  cpu_temp="off"
 | 
					cpu_temp="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** GPU
 | 
					*** GPU
 | 
				
			||||||
@ -539,7 +539,7 @@ of ~gpu~.
 | 
				
			|||||||
  - on :: ~AMD HD 7950~
 | 
					  - on :: ~AMD HD 7950~
 | 
				
			||||||
  - off :: ~HD 7950~
 | 
					  - off :: ~HD 7950~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  gpu_brand="off"
 | 
					gpu_brand="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** Which GPU to display
 | 
					**** Which GPU to display
 | 
				
			||||||
@ -557,14 +557,14 @@ This allows the user to choose which GPU appears in the output of the function
 | 
				
			|||||||
- Supports :: Linux
 | 
					- Supports :: Linux
 | 
				
			||||||
- Examples ::
 | 
					- Examples ::
 | 
				
			||||||
  - all ::
 | 
					  - all ::
 | 
				
			||||||
    #+BEGIN_SRC text
 | 
					#+BEGIN_SRC text
 | 
				
			||||||
    GPU1: AMD HD 7950
 | 
					GPU1: AMD HD 7950
 | 
				
			||||||
    GPU2: Intel Integrated Graphics
 | 
					GPU2: Intel Integrated Graphics
 | 
				
			||||||
    #+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
  - dedicated :: ~GPU1: AMD HD 7950~
 | 
					  - dedicated :: ~GPU1: AMD HD 7950~
 | 
				
			||||||
  - integrated :: ~GPU1: Intel Integrated Graphics~
 | 
					  - integrated :: ~GPU1: Intel Integrated Graphics~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  gpu_type="all"
 | 
					gpu_type="all"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*** Resolution
 | 
					*** Resolution
 | 
				
			||||||
@ -583,5 +583,5 @@ individually. It is possible to display the refresh rate or to hide it.
 | 
				
			|||||||
  - on :: ~1920x1080 @ 60Hz~
 | 
					  - on :: ~1920x1080 @ 60Hz~
 | 
				
			||||||
  - off :: ~1920x1080~
 | 
					  - off :: ~1920x1080~
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh
 | 
				
			||||||
  refresh_rate="off"
 | 
					refresh_rate="off"
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
				
			|||||||
@ -22,13 +22,13 @@ The following enables client-side shadows on windows. Note desktop windows
 | 
				
			|||||||
(windows with ~_NET_WM_WINDOW_TYPE_DESKTOP~) never get shadow, unless explicitly
 | 
					(windows with ~_NET_WM_WINDOW_TYPE_DESKTOP~) never get shadow, unless explicitly
 | 
				
			||||||
requested using the wintypes option.
 | 
					requested using the wintypes option.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow = true;
 | 
					shadow = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The blur radius radius for shadows is measured in pixels, and it defaults to
 | 
					The blur radius radius for shadows is measured in pixels, and it defaults to
 | 
				
			||||||
12px.
 | 
					12px.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow-radius = 17;
 | 
					shadow-radius = 17;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Picom can also apply some level of opacity on shadows.
 | 
					Picom can also apply some level of opacity on shadows.
 | 
				
			||||||
@ -36,14 +36,14 @@ Picom can also apply some level of opacity on shadows.
 | 
				
			|||||||
| Min value     | ~0.0~  |
 | 
					| Min value     | ~0.0~  |
 | 
				
			||||||
| Max value     | ~1.0~  |
 | 
					| Max value     | ~1.0~  |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow-opacity = 0.6
 | 
					shadow-opacity = 0.6
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The left and top offsets for shadows are expressed in pixels.
 | 
					The left and top offsets for shadows are expressed in pixels.
 | 
				
			||||||
| Default value | ~-15~ |
 | 
					| Default value | ~-15~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow-offset-x = -12;
 | 
					shadow-offset-x = -12;
 | 
				
			||||||
  shadow-offset-y = -12;
 | 
					shadow-offset-y = -12;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to set the color of the shadow with the string contained in
 | 
					It is possible to set the color of the shadow with the string contained in
 | 
				
			||||||
@ -51,39 +51,39 @@ It is possible to set the color of the shadow with the string contained in
 | 
				
			|||||||
config, but this value will override any value in ~shadow-red~, ~shadow-green~,
 | 
					config, but this value will override any value in ~shadow-red~, ~shadow-green~,
 | 
				
			||||||
or ~shadow-blue~.
 | 
					or ~shadow-blue~.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow-color = "#000000"
 | 
					shadow-color = "#000000"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to specify a list  of conditions of windows that should have no
 | 
					It is possible to specify a list  of conditions of windows that should have no
 | 
				
			||||||
shadow.
 | 
					shadow.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  shadow-exclude = [
 | 
					shadow-exclude = [
 | 
				
			||||||
  "name = 'Notification'",
 | 
					  "name = 'Notification'",
 | 
				
			||||||
  "class_g = 'Conky'",
 | 
					  "class_g = 'Conky'",
 | 
				
			||||||
  "class_g ?= 'Notify-osd'",
 | 
					  "class_g ?= 'Notify-osd'",
 | 
				
			||||||
  "class_g = 'Cairo-clock'",
 | 
					  "class_g = 'Cairo-clock'",
 | 
				
			||||||
  "_GTK_FRAME_EXTENTS@:c"
 | 
					  "_GTK_FRAME_EXTENTS@:c"
 | 
				
			||||||
  ];
 | 
					];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is also possible to specify an X geometry that describes the region in which
 | 
					It is also possible to specify an X geometry that describes the region in which
 | 
				
			||||||
shadows should not be painted in, such as a dock window region. For example,
 | 
					shadows should not be painted in, such as a dock window region. For example,
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  # shadow-exclude-reg = "x10+0+0"
 | 
					# shadow-exclude-reg = "x10+0+0"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
would make the 10 pixels at the bottom of the screen not have any shadow painted
 | 
					would make the 10 pixels at the bottom of the screen not have any shadow painted
 | 
				
			||||||
on.
 | 
					on.
 | 
				
			||||||
| Default value | ~""~ |
 | 
					| Default value | ~""~ |
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  shadow-exclude-reg = ""
 | 
					shadow-exclude-reg = ""
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, it is also possible to crop the shadow of a window fully on a
 | 
					Finally, it is also possible to crop the shadow of a window fully on a
 | 
				
			||||||
particular Xinerama screen to the screen.
 | 
					particular Xinerama screen to the screen.
 | 
				
			||||||
- Default value :: ~false~
 | 
					- Default value :: ~false~
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  xinerama-shadow-crop = false
 | 
					xinerama-shadow-crop = false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Deprecated options
 | 
					** Deprecated options
 | 
				
			||||||
@ -98,7 +98,7 @@ This option is deprecated, and users should use the ~wintypes~ option in their
 | 
				
			|||||||
config file instead.
 | 
					config file instead.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  no-dock-shadow = false;
 | 
					no-dock-shadow = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This option allows Picom not to draw on drag-and-drop windows. This option is
 | 
					This option allows Picom not to draw on drag-and-drop windows. This option is
 | 
				
			||||||
@ -106,7 +106,7 @@ deprecated, and users should use the ~wintypes~ option in their config file
 | 
				
			|||||||
instead.
 | 
					instead.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  no-dnd-shadow = false;
 | 
					no-dnd-shadow = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
~shadow-ignore-shaped~ is also deprecated. It used to indicate Picom not to
 | 
					~shadow-ignore-shaped~ is also deprecated. It used to indicate Picom not to
 | 
				
			||||||
@ -114,15 +114,15 @@ paint shadows on shaped windows. Note shaped windows here means windows setting
 | 
				
			|||||||
their shape through X Shape extension. Those using ARGB background are beyond
 | 
					their shape through X Shape extension. Those using ARGB background are beyond
 | 
				
			||||||
Picom’s control. Since it is deprecated, you could instead use
 | 
					Picom’s control. Since it is deprecated, you could instead use
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  shadow-exclude = 'bounding_shaped'
 | 
					shadow-exclude = 'bounding_shaped'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
or
 | 
					or
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  shadow-exclude = 'bounding_shaped && !rounded_corners'
 | 
					shadow-exclude = 'bounding_shaped && !rounded_corners'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
| Default value | ~""~ |
 | 
					| Default value | ~""~ |
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  shadow-ignore-shaped = ""
 | 
					shadow-ignore-shaped = ""
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Rounded corners
 | 
					* Rounded corners
 | 
				
			||||||
@ -131,15 +131,15 @@ or
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Here we can see the declaration of the corners’ radius:
 | 
					Here we can see the declaration of the corners’ radius:
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  corner-radius = 9.0;
 | 
					corner-radius = 9.0;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is also possible to exclude some windows from getting their corners rounded.
 | 
					It is also possible to exclude some windows from getting their corners rounded.
 | 
				
			||||||
I personally excluded any window generated by AwesomeWM.
 | 
					I personally excluded any window generated by AwesomeWM.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  rounded-corners-exclude = [
 | 
					rounded-corners-exclude = [
 | 
				
			||||||
  "_NET_WM_WINDOW_TYPE@[0]:a = '_NET_WM_WINDOW_TYPE_DOCK'"
 | 
					  "_NET_WM_WINDOW_TYPE@[0]:a = '_NET_WM_WINDOW_TYPE_DOCK'"
 | 
				
			||||||
  ];
 | 
					];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Fading
 | 
					* Fading
 | 
				
			||||||
@ -152,7 +152,7 @@ feature on or off. However, its behavior can be changed with
 | 
				
			|||||||
~no-fading-openclose~.
 | 
					~no-fading-openclose~.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  fading = true
 | 
					fading = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These values controls the opacity change between steps while fading in and out.
 | 
					These values controls the opacity change between steps while fading in and out.
 | 
				
			||||||
@ -160,35 +160,35 @@ These values controls the opacity change between steps while fading in and out.
 | 
				
			|||||||
| Min value     | ~0.01~                             |
 | 
					| Min value     | ~0.01~                             |
 | 
				
			||||||
| Max value     | ~1.0~                              |
 | 
					| Max value     | ~1.0~                              |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  fade-in-step = 0.09;
 | 
					fade-in-step = 0.09;
 | 
				
			||||||
  fade-out-step = 0.08;
 | 
					fade-out-step = 0.08;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This value represents the time between steps in fade steps, in milliseconds.
 | 
					This value represents the time between steps in fade steps, in milliseconds.
 | 
				
			||||||
| Default value | ~10~ |
 | 
					| Default value | ~10~ |
 | 
				
			||||||
| Min value     | ~1~  |
 | 
					| Min value     | ~1~  |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  fade-delta = 20;
 | 
					fade-delta = 20;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to exclude some windows that should not be faded with a specified
 | 
					It is possible to exclude some windows that should not be faded with a specified
 | 
				
			||||||
list of conditions.
 | 
					list of conditions.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  fade-exclude = [ "class_g = 'mpv'" ];
 | 
					fade-exclude = [ "class_g = 'mpv'" ];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This option allows Picom not to create any fade on windows opening or closing.
 | 
					This option allows Picom not to create any fade on windows opening or closing.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  no-fading-openclose = true;
 | 
					no-fading-openclose = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, this option is a workaround for Openbox, Fluxbox and others by not
 | 
					Finally, this option is a workaround for Openbox, Fluxbox and others by not
 | 
				
			||||||
fading destroyed ARGB windows with WM frame.
 | 
					fading destroyed ARGB windows with WM frame.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  no-fading-destroyed-argb = false
 | 
					no-fading-destroyed-argb = false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Transparency and opacity
 | 
					* Transparency and opacity
 | 
				
			||||||
@ -202,7 +202,7 @@ describes the opacity of inactive windows.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  inactive-opacity = 0.6;
 | 
					inactive-opacity = 0.6;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On the other hand, it is possible to declare a default opacity for active
 | 
					On the other hand, it is possible to declare a default opacity for active
 | 
				
			||||||
@ -211,7 +211,7 @@ windows.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  active-opacity = 1;
 | 
					active-opacity = 1;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This however describes the opacity of window titlebars and borders.
 | 
					This however describes the opacity of window titlebars and borders.
 | 
				
			||||||
@ -219,7 +219,7 @@ This however describes the opacity of window titlebars and borders.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  frame-opacity = 1.0;
 | 
					frame-opacity = 1.0;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
~menu-opacity~ describes the opacity for dropdown menus and popup menus.
 | 
					~menu-opacity~ describes the opacity for dropdown menus and popup menus.
 | 
				
			||||||
@ -227,14 +227,14 @@ This however describes the opacity of window titlebars and borders.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # menu-opacity = 0.9;
 | 
					# menu-opacity = 0.9;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
~inactive-opacity-override~ allows the user to let inactive opacity set by ~-i~
 | 
					~inactive-opacity-override~ allows the user to let inactive opacity set by ~-i~
 | 
				
			||||||
override the ~_NET_WM_OPACITY_ values of windows.
 | 
					override the ~_NET_WM_OPACITY_ values of windows.
 | 
				
			||||||
| Default value | ~true~ |
 | 
					| Default value | ~true~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  inactive-opacity-override = true;
 | 
					inactive-opacity-override = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
While it is possible to alter opacity on inactive windows, it is also possible
 | 
					While it is possible to alter opacity on inactive windows, it is also possible
 | 
				
			||||||
@ -243,7 +243,7 @@ to dim them.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # inactive-dim = 1.0
 | 
					# inactive-dim = 1.0
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is also possible to use a fixed inactive dim value, instead of adjusting
 | 
					It is also possible to use a fixed inactive dim value, instead of adjusting
 | 
				
			||||||
@ -252,18 +252,18 @@ according to window opacity.
 | 
				
			|||||||
| Min value     | ~0.1~ |
 | 
					| Min value     | ~0.1~ |
 | 
				
			||||||
| Max value     | ~1.0~ |
 | 
					| Max value     | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # inactive-dim-fixed = 1.0
 | 
					# inactive-dim-fixed = 1.0
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is also possible to specify a list of conditions of windows that should
 | 
					It is also possible to specify a list of conditions of windows that should
 | 
				
			||||||
always be considered focused.
 | 
					always be considered focused.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  focus-exclude = [
 | 
					focus-exclude = [
 | 
				
			||||||
  "class_g = 'mpv'",
 | 
					  "class_g = 'mpv'",
 | 
				
			||||||
  "class_g = 'qemu'",
 | 
					  "class_g = 'qemu'",
 | 
				
			||||||
  "class_g = 'Qemu-system-x86_64'"
 | 
					  "class_g = 'Qemu-system-x86_64'"
 | 
				
			||||||
  ];
 | 
					];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The user can also specify a list of opacity rules, in the format
 | 
					The user can also specify a list of opacity rules, in the format
 | 
				
			||||||
@ -272,7 +272,7 @@ over this. Note we don't make any guarantee about possible conflicts with other
 | 
				
			|||||||
programs that set ~_NET_WM_WINDOW_OPACITY~ on frame or client windows.
 | 
					programs that set ~_NET_WM_WINDOW_OPACITY~ on frame or client windows.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  opacity-rule = [];
 | 
					opacity-rule = [];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Background blurring
 | 
					* Background blurring
 | 
				
			||||||
@ -282,13 +282,13 @@ programs that set ~_NET_WM_WINDOW_OPACITY~ on frame or client windows.
 | 
				
			|||||||
The following are the parameters for background blurring, see the \*BLUR\*
 | 
					The following are the parameters for background blurring, see the \*BLUR\*
 | 
				
			||||||
section for more information.
 | 
					section for more information.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  blur: {
 | 
					blur: {
 | 
				
			||||||
  method = "dual_kawase";
 | 
					  method = "dual_kawase";
 | 
				
			||||||
  strength = 7;
 | 
					  strength = 7;
 | 
				
			||||||
  background = false;
 | 
					  background = false;
 | 
				
			||||||
  background-frame = false;
 | 
					  background-frame = false;
 | 
				
			||||||
  background-fixed = true;
 | 
					  background-fixed = true;
 | 
				
			||||||
  }
 | 
					}
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This value enables or disables the blur for the background of semi-transparent
 | 
					This value enables or disables the blur for the background of semi-transparent
 | 
				
			||||||
@ -296,39 +296,39 @@ or ARGB windows. It has bad performances though, with driver-dependent behavior.
 | 
				
			|||||||
The name of the switch may change without prior notifications.
 | 
					The name of the switch may change without prior notifications.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  blur-background = true;
 | 
					blur-background = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Blur background of windows when the window frame is not opaque. If true, this
 | 
					Blur background of windows when the window frame is not opaque. If true, this
 | 
				
			||||||
implies the value ~true~ for ~blur-background~.
 | 
					implies the value ~true~ for ~blur-background~.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  blur-background-frame = true;
 | 
					blur-background-frame = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following determines whether to use fixed blur strength rather than
 | 
					The following determines whether to use fixed blur strength rather than
 | 
				
			||||||
adjusting according to window opacity.
 | 
					adjusting according to window opacity.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  blur-background-fixed = false;
 | 
					blur-background-fixed = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Specify the blur convolution kernel, with the format
 | 
					Specify the blur convolution kernel, with the format
 | 
				
			||||||
~"5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"~.
 | 
					~"5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"~.
 | 
				
			||||||
| Default value | ~""~ |
 | 
					| Default value | ~""~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # blur-kern = "3x3box";
 | 
					# blur-kern = "3x3box";
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to write exclude conditions for background blur.
 | 
					It is possible to write exclude conditions for background blur.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  blur-background-exclude = [
 | 
					blur-background-exclude = [
 | 
				
			||||||
  "window_type = 'desktop'",
 | 
					  "window_type = 'desktop'",
 | 
				
			||||||
  "class_g = 'Polybar'",
 | 
					  "class_g = 'Polybar'",
 | 
				
			||||||
  "class_g = 'discord-overlay'",
 | 
					  "class_g = 'discord-overlay'",
 | 
				
			||||||
  "_GTK_FRAME_EXTENTS@:c"
 | 
					  "_GTK_FRAME_EXTENTS@:c"
 | 
				
			||||||
  ];
 | 
					];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* General settings
 | 
					* General settings
 | 
				
			||||||
@ -339,74 +339,74 @@ Daemonize process. Fork to background after initialization. Causes issues with
 | 
				
			|||||||
certain (badly-written) drivers.
 | 
					certain (badly-written) drivers.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  daemon = true;
 | 
					daemon = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Picom has three backends it can use: ~xrender~, ~glx~, and ~xr_glx_hybrid~. GLX
 | 
					Picom has three backends it can use: ~xrender~, ~glx~, and ~xr_glx_hybrid~. GLX
 | 
				
			||||||
backend is typically much faster but depends on a sane driver.
 | 
					backend is typically much faster but depends on a sane driver.
 | 
				
			||||||
| Default value | ~xrender~ |
 | 
					| Default value | ~xrender~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  backend = "glx";
 | 
					backend = "glx";
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This enables or disables VSync.
 | 
					This enables or disables VSync.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  vsync = true;
 | 
					vsync = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Enable remote control via D-Bus. See the *D-BUS API* section below for more
 | 
					Enable remote control via D-Bus. See the *D-BUS API* section below for more
 | 
				
			||||||
details.
 | 
					details.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  dbus = false;
 | 
					dbus = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Try to detect WM windows (a non-override-redirect window with no child that has
 | 
					Try to detect WM windows (a non-override-redirect window with no child that has
 | 
				
			||||||
~WM_STATE~) and markz them as active.
 | 
					~WM_STATE~) and markz them as active.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  mark-wmwin-focused = true;
 | 
					mark-wmwin-focused = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mark override-redirect windows that doesn't have a child window with ~WM_STATE~
 | 
					Mark override-redirect windows that doesn't have a child window with ~WM_STATE~
 | 
				
			||||||
focused.
 | 
					focused.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  mark-ovredir-focused = true;
 | 
					mark-ovredir-focused = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Try to detect windows with rounded corners and don't consider them shaped
 | 
					Try to detect windows with rounded corners and don't consider them shaped
 | 
				
			||||||
windows. The accuracy is not very high, unfortunately.
 | 
					windows. The accuracy is not very high, unfortunately.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  detect-rounded-corners = true;
 | 
					detect-rounded-corners = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Detect ~_NET_WM_OPACITY~ on client windows, useful for window managers not
 | 
					Detect ~_NET_WM_OPACITY~ on client windows, useful for window managers not
 | 
				
			||||||
passing ~_NET_WM_OPACITY~ of client windows to frame windows.
 | 
					passing ~_NET_WM_OPACITY~ of client windows to frame windows.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  detect-client-opacity = true;
 | 
					detect-client-opacity = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Specify refresh rate of the screen. If not specified or 0, picom will try
 | 
					Specify refresh rate of the screen. If not specified or 0, picom will try
 | 
				
			||||||
detecting this with X RandR extension.
 | 
					detecting this with X RandR extension.
 | 
				
			||||||
| Default value | ~60~ |
 | 
					| Default value | ~60~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  refresh-rate = 120;
 | 
					refresh-rate = 120;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Limit picom to repaint at most once every 1 / ~refresh_rate~ second to boost
 | 
					Limit picom to repaint at most once every 1 / ~refresh_rate~ second to boost
 | 
				
			||||||
performance. This should not be used with
 | 
					performance. This should not be used with
 | 
				
			||||||
#+BEGIN_SRC text :tangle no
 | 
					#+BEGIN_SRC text :tangle no
 | 
				
			||||||
  vsync drm/opengl/opengl-oml
 | 
					vsync drm/opengl/opengl-oml
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
as they essentially does sw-opti's job already, unless you wish to specify a
 | 
					as they essentially does sw-opti's job already, unless you wish to specify a
 | 
				
			||||||
lower refresh rate than the actual value.
 | 
					lower refresh rate than the actual value.
 | 
				
			||||||
| Default value | ~""~ |
 | 
					| Default value | ~""~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # sw-opti =;
 | 
					# sw-opti =;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use EWMH ~_NET_ACTIVE_WINDOW~ to determine currently focused window, rather than
 | 
					Use EWMH ~_NET_ACTIVE_WINDOW~ to determine currently focused window, rather than
 | 
				
			||||||
@ -414,7 +414,7 @@ listening to ~FocusIn~/~FocusOut~ event. Might have more accuracy, provided that
 | 
				
			|||||||
the WM supports it.
 | 
					the WM supports it.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # use-ewmh-active-win = false;
 | 
					# use-ewmh-active-win = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Unredirect all windows if a full-screen opaque window is detected, to maximize
 | 
					Unredirect all windows if a full-screen opaque window is detected, to maximize
 | 
				
			||||||
@ -423,27 +423,27 @@ redirecting/unredirecting windows. paint-on-overlay may make the flickering less
 | 
				
			|||||||
obvious.
 | 
					obvious.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  unredir-if-possible = false;
 | 
					unredir-if-possible = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Delay before unredirecting the window, in milliseconds.
 | 
					Delay before unredirecting the window, in milliseconds.
 | 
				
			||||||
| Default value | ~0~ |
 | 
					| Default value | ~0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  unredir-if-possible-delay = 0;
 | 
					unredir-if-possible-delay = 0;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Conditions of windows that shouldn't be considered full-screen for unredirecting
 | 
					Conditions of windows that shouldn't be considered full-screen for unredirecting
 | 
				
			||||||
screen.
 | 
					screen.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  unredir-if-possible-exclude = [];
 | 
					unredir-if-possible-exclude = [];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use ~WM_TRANSIENT_FOR~ to group windows, and consider windows in the same group
 | 
					Use ~WM_TRANSIENT_FOR~ to group windows, and consider windows in the same group
 | 
				
			||||||
focused at the same time.
 | 
					focused at the same time.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  detect-transient = true;
 | 
					detect-transient = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use ~WM_CLIENT_LEADER~ to group windows, and consider windows in the same group
 | 
					Use ~WM_CLIENT_LEADER~ to group windows, and consider windows in the same group
 | 
				
			||||||
@ -451,7 +451,7 @@ focused at the same time. ~WM_TRANSIENT_FOR~ has higher priority if
 | 
				
			|||||||
detect-transient is enabled, too.
 | 
					detect-transient is enabled, too.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  detect-client-leader = true;
 | 
					detect-client-leader = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Resize damaged region by a specific number of pixels. A positive value enlarges
 | 
					Resize damaged region by a specific number of pixels. A positive value enlarges
 | 
				
			||||||
@ -465,14 +465,14 @@ you use ~--resize-damage 2~, and so on). May or may not work with
 | 
				
			|||||||
~--glx-no-stencil~. Shrinking doesn't function correctly.
 | 
					~--glx-no-stencil~. Shrinking doesn't function correctly.
 | 
				
			||||||
| Default value | ~1~ |
 | 
					| Default value | ~1~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  resize-damage = 1;
 | 
					resize-damage = 1;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Specify a list of conditions of windows that should be painted with inverted
 | 
					Specify a list of conditions of windows that should be painted with inverted
 | 
				
			||||||
color. Resource-hogging, and is not well tested.
 | 
					color. Resource-hogging, and is not well tested.
 | 
				
			||||||
| Default value | ~[]~ |
 | 
					| Default value | ~[]~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  invert-color-include = [];
 | 
					invert-color-include = [];
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Disable the use of damage information. This cause the whole screen to be redrawn
 | 
					Disable the use of damage information. This cause the whole screen to be redrawn
 | 
				
			||||||
@ -481,7 +481,7 @@ degrades the performance, but might fix some artifacts. The opposing option is
 | 
				
			|||||||
use-damage
 | 
					use-damage
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  use-damage = false;
 | 
					use-damage = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use X Sync fence to sync clients' draw calls, to make sure all draw calls are
 | 
					Use X Sync fence to sync clients' draw calls, to make sure all draw calls are
 | 
				
			||||||
@ -489,21 +489,21 @@ finished before picom starts drawing. Needed on nvidia-drivers with GLX backend
 | 
				
			|||||||
for some users.
 | 
					for some users.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  xrender-sync-fence = false;
 | 
					xrender-sync-fence = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Force all windows to be painted with blending. Useful if you have a
 | 
					Force all windows to be painted with blending. Useful if you have a
 | 
				
			||||||
glx-fshader-win that could turn opaque pixels transparent.
 | 
					glx-fshader-win that could turn opaque pixels transparent.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  force-win-blend = false;
 | 
					force-win-blend = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is
 | 
					Do not use EWMH to detect fullscreen windows. Reverts to checking if a window is
 | 
				
			||||||
fullscreen based only on its size and coordinates.
 | 
					fullscreen based only on its size and coordinates.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  no-ewmh-fullscreen = false;
 | 
					no-ewmh-fullscreen = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Dimming bright windows so their brightness doesn't exceed this set value.
 | 
					Dimming bright windows so their brightness doesn't exceed this set value.
 | 
				
			||||||
@ -512,14 +512,14 @@ this could comes with a performance hit. Setting this to 1.0 disables this
 | 
				
			|||||||
behaviour. Requires ~--use-damage~ to be disabled.
 | 
					behaviour. Requires ~--use-damage~ to be disabled.
 | 
				
			||||||
| Default value | ~1.0~ |
 | 
					| Default value | ~1.0~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  max-brightness = 1.0;
 | 
					max-brightness = 1.0;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Make transparent windows clip other windows like non-transparent windows do,
 | 
					Make transparent windows clip other windows like non-transparent windows do,
 | 
				
			||||||
instead of blending on top of them.
 | 
					instead of blending on top of them.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  transparent-clipping = false;
 | 
					transparent-clipping = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the log level. Possible values are:
 | 
					Set the log level. Possible values are:
 | 
				
			||||||
@ -533,7 +533,7 @@ level, it's better to log into a file using ~--log-file~, since it can generate
 | 
				
			|||||||
a huge stream of logs.
 | 
					a huge stream of logs.
 | 
				
			||||||
| Default value | ~"debug"~ |
 | 
					| Default value | ~"debug"~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  log-level = "warn";
 | 
					log-level = "warn";
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the log file. If ~--log-file~ is never specified, logs will be written to
 | 
					Set the log file. If ~--log-file~ is never specified, logs will be written to
 | 
				
			||||||
@ -542,19 +542,19 @@ early logs might still be written to the stderr. When setting this option from
 | 
				
			|||||||
the config file, it is recommended to use an absolute path.
 | 
					the config file, it is recommended to use an absolute path.
 | 
				
			||||||
| Default value | ~''~ |
 | 
					| Default value | ~''~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # log-file = '/path/to/your/log/file';
 | 
					# log-file = '/path/to/your/log/file';
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Show all X errors (for debugging)
 | 
					Show all X errors (for debugging)
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # show-all-xerrors = false;
 | 
					# show-all-xerrors = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Write process ID to a file.
 | 
					Write process ID to a file.
 | 
				
			||||||
| Default value | ~''~ |
 | 
					| Default value | ~''~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  # write-pid-path = '/path/to/your/log/file';
 | 
					# write-pid-path = '/path/to/your/log/file';
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in
 | 
					Window type settings. ~WINDOW_TYPE~ is one of the 15 window types defined in
 | 
				
			||||||
@ -588,14 +588,14 @@ Following per window-type options are available:
 | 
				
			|||||||
  unredir-if-possible set, and doesn't want certain window to cause unnecessary
 | 
					  unredir-if-possible set, and doesn't want certain window to cause unnecessary
 | 
				
			||||||
  screen redirection, you can set this to `true`.
 | 
					  screen redirection, you can set this to `true`.
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  wintypes:
 | 
					wintypes:
 | 
				
			||||||
  {
 | 
					{
 | 
				
			||||||
  tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
 | 
					  tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
 | 
				
			||||||
  dock = { shadow = false; }
 | 
					  dock = { shadow = false; }
 | 
				
			||||||
  dnd = { shadow = false; }
 | 
					  dnd = { shadow = false; }
 | 
				
			||||||
  popup_menu = { opacity = 0.8; }
 | 
					  popup_menu = { opacity = 0.8; }
 | 
				
			||||||
  dropdown_menu = { opacity = 0.8; }
 | 
					  dropdown_menu = { opacity = 0.8; }
 | 
				
			||||||
  };
 | 
					};
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** GLX backend-specific options
 | 
					** GLX backend-specific options
 | 
				
			||||||
@ -608,7 +608,7 @@ practically happened) and may not work with blur-background. Tests show a 15%
 | 
				
			|||||||
performance boost. Recommended.
 | 
					performance boost. Recommended.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  glx-no-stencil = true;
 | 
					glx-no-stencil = true;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Avoid rebinding pixmap on window damage. Probably could improve performance on
 | 
					Avoid rebinding pixmap on window damage. Probably could improve performance on
 | 
				
			||||||
@ -616,7 +616,7 @@ rapid window content changes, but is known to break things on some drivers
 | 
				
			|||||||
(LLVMpipe, xf86-video-intel, etc.). Recommended if it works.
 | 
					(LLVMpipe, xf86-video-intel, etc.). Recommended if it works.
 | 
				
			||||||
| Default value | ~false~ |
 | 
					| Default value | ~false~ |
 | 
				
			||||||
#+BEGIN_SRC conf
 | 
					#+BEGIN_SRC conf
 | 
				
			||||||
  glx-no-rebind-pixmap = false;
 | 
					glx-no-rebind-pixmap = false;
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use specified GLSL fragment shader for rendering window contents. See
 | 
					Use specified GLSL fragment shader for rendering window contents. See
 | 
				
			||||||
@ -624,5 +624,5 @@ Use specified GLSL fragment shader for rendering window contents. See
 | 
				
			|||||||
~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples.
 | 
					~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples.
 | 
				
			||||||
| Default value | ~''~ |
 | 
					| Default value | ~''~ |
 | 
				
			||||||
#+BEGIN_SRC conf :tangle no
 | 
					#+BEGIN_SRC conf :tangle no
 | 
				
			||||||
  glx-fshader-win = '';
 | 
					glx-fshader-win = '';
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
				
			|||||||
@ -20,23 +20,23 @@ you can find how my Rust code is always formatted.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
First, we are using the 2018 edition of Rust.
 | 
					First, we are using the 2018 edition of Rust.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  edition = "2018"
 | 
					edition = "2018"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Put single-expression functions on a single line.
 | 
					Put single-expression functions on a single line.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  fn_single_line = true
 | 
					fn_single_line = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Format string literals where necessary.
 | 
					Format string literals where necessary.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  format_strings = true
 | 
					format_strings = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Maximum width of each line
 | 
					Maximum width of each line
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  max_width = 80
 | 
					max_width = 80
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Merge multiple imports into a single nested import.
 | 
					Merge multiple imports into a single nested import.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  merge_imports = true
 | 
					merge_imports = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Structs and Enums
 | 
					* Structs and Enums
 | 
				
			||||||
@ -50,15 +50,15 @@ purpose of alignment.
 | 
				
			|||||||
Note that this is not how much whitespace is inserted, but instead the longest
 | 
					Note that this is not how much whitespace is inserted, but instead the longest
 | 
				
			||||||
variant name that doesn't get ignored when aligning.
 | 
					variant name that doesn't get ignored when aligning.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  enum_discrim_align_threshold = 20
 | 
					enum_discrim_align_threshold = 20
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
The maximum diff of width between struct fields to be aligned with each other.
 | 
					The maximum diff of width between struct fields to be aligned with each other.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  struct_field_align_threshold = 20
 | 
					struct_field_align_threshold = 20
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
 | 
					Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  reorder_impl_items = true
 | 
					reorder_impl_items = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Comments
 | 
					* Comments
 | 
				
			||||||
@ -67,19 +67,19 @@ Reorder impl items. ~type~ and ~const~ are put first, then macros and methods.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Convert ~/* */~ comments to ~//~ comments where possible.
 | 
					Convert ~/* */~ comments to ~//~ comments where possible.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  normalize_comments = true
 | 
					normalize_comments = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Break comments to fit on the line.
 | 
					Break comments to fit on the line.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  wrap_comments = true
 | 
					wrap_comments = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Report ~FIXME~ items in comments.
 | 
					Report ~FIXME~ items in comments.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  report_fixme = "Always"
 | 
					report_fixme = "Always"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Report ~TODO~ items in comments.
 | 
					Report ~TODO~ items in comments.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  todo = "Always"
 | 
					todo = "Always"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Documentation
 | 
					* Documentation
 | 
				
			||||||
@ -88,11 +88,11 @@ Report ~TODO~ items in comments.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Format code snippet included in doc comments.
 | 
					Format code snippet included in doc comments.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  format_code_in_doc_comments = true
 | 
					format_code_in_doc_comments = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
 | 
					Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  normalize_doc_attributes = true
 | 
					normalize_doc_attributes = true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Whitespace
 | 
					* Whitespace
 | 
				
			||||||
@ -101,13 +101,13 @@ Convert ~#![doc]~ and ~#[doc]~ attributes to ~//!~ and ~///~ doc comments.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
Use tab characters for indentation, spaces for alignment.
 | 
					Use tab characters for indentation, spaces for alignment.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  hard_tabs = false
 | 
					hard_tabs = false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Number of spaces per tab.
 | 
					Number of spaces per tab.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  tab_spaces = 4
 | 
					tab_spaces = 4
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
I want newlines to always be Unix style.
 | 
					I want newlines to always be Unix style.
 | 
				
			||||||
#+BEGIN_SRC toml
 | 
					#+BEGIN_SRC toml
 | 
				
			||||||
  newline_style = "Unix"
 | 
					newline_style = "Unix"
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -92,8 +92,8 @@ different locations, but I chose an Emacs-like configuration: put
 | 
				
			|||||||
everything in ~~/.stumpwm.d/~. We begin by indicating quicklisp how to
 | 
					everything in ~~/.stumpwm.d/~. We begin by indicating quicklisp how to
 | 
				
			||||||
properly initialize:
 | 
					properly initialize:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  #-quicklisp
 | 
					#-quicklisp
 | 
				
			||||||
  (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
 | 
					(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
 | 
				
			||||||
                                       (user-homedir-pathname))))
 | 
					                                       (user-homedir-pathname))))
 | 
				
			||||||
  (when (probe-file quicklisp-init)
 | 
					  (when (probe-file quicklisp-init)
 | 
				
			||||||
    (load quicklisp-init)))
 | 
					    (load quicklisp-init)))
 | 
				
			||||||
@ -104,15 +104,15 @@ Then, our first StumpWM-related code is declaring we are using the
 | 
				
			|||||||
us to avoid using the prefix ~stumpwm:~ each time we are using a
 | 
					us to avoid using the prefix ~stumpwm:~ each time we are using a
 | 
				
			||||||
function or a variable from this package.
 | 
					function or a variable from this package.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (in-package :stumpwm)
 | 
					(in-package :stumpwm)
 | 
				
			||||||
  (setf *default-package* :stumpwm)
 | 
					(setf *default-package* :stumpwm)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Since I install StumpWM with my package manager (I use the AUR’s
 | 
					Since I install StumpWM with my package manager (I use the AUR’s
 | 
				
			||||||
~stumpwm-git~ package), StumpWM’s modules are installed to
 | 
					~stumpwm-git~ package), StumpWM’s modules are installed to
 | 
				
			||||||
~/usr/share/stupmwm/contrib/utils/~, let’s indicate that to StumpWM.
 | 
					~/usr/share/stupmwm/contrib/utils/~, let’s indicate that to StumpWM.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (set-module-dir "/usr/share/stupmwm/contrib/")
 | 
					(set-module-dir "/usr/share/stupmwm/contrib/")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A startup message can be used when initializing StumpWM. For now,
 | 
					A startup message can be used when initializing StumpWM. For now,
 | 
				
			||||||
@ -125,8 +125,8 @@ The first thing I want to do after that is to set some decent cursor
 | 
				
			|||||||
pointer as well as get a bunch of stuff started. To see what’s in the
 | 
					pointer as well as get a bunch of stuff started. To see what’s in the
 | 
				
			||||||
~autostart~ script, [[file:bin.org::#Autostart-a99e99e7][see here]].
 | 
					~autostart~ script, [[file:bin.org::#Autostart-a99e99e7][see here]].
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (run-shell-command "xsetroot -cursor_name left_ptr")
 | 
					(run-shell-command "xsetroot -cursor_name left_ptr")
 | 
				
			||||||
  (run-shell-command "autostart")
 | 
					(run-shell-command "autostart")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now, we’ll load a couple of my custom files that will be described below:
 | 
					Now, we’ll load a couple of my custom files that will be described below:
 | 
				
			||||||
@ -142,7 +142,7 @@ Now, we’ll load a couple of my custom files that will be described below:
 | 
				
			|||||||
#+name: gen-load-files
 | 
					#+name: gen-load-files
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var files=first-loaded-files
 | 
					#+begin_src emacs-lisp :var files=first-loaded-files
 | 
				
			||||||
  (mapconcat (lambda (file)
 | 
					(mapconcat (lambda (file)
 | 
				
			||||||
             (format "(load \"~/.stumpwm.d/%s\")" (car file)))
 | 
					             (format "(load \"~/.stumpwm.d/%s\")" (car file)))
 | 
				
			||||||
           files
 | 
					           files
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
@ -161,7 +161,7 @@ This is equivalent to the Common Lisp code:
 | 
				
			|||||||
Once the modeline file is loaded, let’s indicate StumpWM to activate
 | 
					Once the modeline file is loaded, let’s indicate StumpWM to activate
 | 
				
			||||||
it:
 | 
					it:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (when *initializing*
 | 
					(when *initializing*
 | 
				
			||||||
  (mode-line))
 | 
					  (mode-line))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -170,7 +170,7 @@ on click. I /HATE/ it when focus follows my mouse like some damn dog
 | 
				
			|||||||
after its ball. Also, the meta key will be used to move floating
 | 
					after its ball. Also, the meta key will be used to move floating
 | 
				
			||||||
windows.
 | 
					windows.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *mouse-focus-policy*    :click
 | 
					(setf *mouse-focus-policy*    :click
 | 
				
			||||||
      ,*float-window-modifier* :META)
 | 
					      ,*float-window-modifier* :META)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -190,7 +190,7 @@ including a short description of what they are for:
 | 
				
			|||||||
#+name: gen-load-modules
 | 
					#+name: gen-load-modules
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var modules=loaded-modules
 | 
					#+begin_src emacs-lisp :var modules=loaded-modules
 | 
				
			||||||
  (mapconcat (lambda (module)
 | 
					(mapconcat (lambda (module)
 | 
				
			||||||
             (format "(load-module \"%s\")" (car module)))
 | 
					             (format "(load-module \"%s\")" (car module)))
 | 
				
			||||||
           modules
 | 
					           modules
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
@ -208,7 +208,7 @@ including a short description of what they are for:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Finally, we can notify the user everything is ready.
 | 
					Finally, we can notify the user everything is ready.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *startup-message* "StumpWM is ready!")
 | 
					(setf *startup-message* "StumpWM is ready!")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And it’s done! We can now move on to the creation of the other CLisp files.
 | 
					And it’s done! We can now move on to the creation of the other CLisp files.
 | 
				
			||||||
@ -223,7 +223,7 @@ me invoking too many Firefox instances. Either Firefox is not already
 | 
				
			|||||||
running and an instance is launched, or one already is and we are
 | 
					running and an instance is launched, or one already is and we are
 | 
				
			||||||
brought to it. This is done like so:
 | 
					brought to it. This is done like so:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defcommand firefox () ()
 | 
					(defcommand firefox () ()
 | 
				
			||||||
            "Run or raise Firefox."
 | 
					            "Run or raise Firefox."
 | 
				
			||||||
            (run-or-raise "firefox" '(:class "Firefox") t nil))
 | 
					            (run-or-raise "firefox" '(:class "Firefox") t nil))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
@ -231,7 +231,7 @@ brought to it. This is done like so:
 | 
				
			|||||||
Next, this command will not only close the current window, but it will
 | 
					Next, this command will not only close the current window, but it will
 | 
				
			||||||
also close the current frame.
 | 
					also close the current frame.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defcommand delete-window-and-frame () ()
 | 
					(defcommand delete-window-and-frame () ()
 | 
				
			||||||
            "Delete the current frame with its window."
 | 
					            "Delete the current frame with its window."
 | 
				
			||||||
            (delete-window)
 | 
					            (delete-window)
 | 
				
			||||||
            (remove-split))
 | 
					            (remove-split))
 | 
				
			||||||
@ -240,12 +240,12 @@ also close the current frame.
 | 
				
			|||||||
The two following commands will create a new frame to the right and
 | 
					The two following commands will create a new frame to the right and
 | 
				
			||||||
below the current frame respectively, then focus it.
 | 
					below the current frame respectively, then focus it.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defcommand hsplit-and-focus () ()
 | 
					(defcommand hsplit-and-focus () ()
 | 
				
			||||||
            "Create a new frame on the right and focus it."
 | 
					            "Create a new frame on the right and focus it."
 | 
				
			||||||
            (hsplit)
 | 
					            (hsplit)
 | 
				
			||||||
            (move-focus :right))
 | 
					            (move-focus :right))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (defcommand vsplit-and-focus () ()
 | 
					(defcommand vsplit-and-focus () ()
 | 
				
			||||||
            "Create a new frame below and move focus to it."
 | 
					            "Create a new frame below and move focus to it."
 | 
				
			||||||
            (vsplit)
 | 
					            (vsplit)
 | 
				
			||||||
            (move-focus :down))
 | 
					            (move-focus :down))
 | 
				
			||||||
@ -254,7 +254,7 @@ below the current frame respectively, then focus it.
 | 
				
			|||||||
Now, let’s create a command for invoking the terminal, optionally with
 | 
					Now, let’s create a command for invoking the terminal, optionally with
 | 
				
			||||||
a program.
 | 
					a program.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defcommand term (&optional program) ()
 | 
					(defcommand term (&optional program) ()
 | 
				
			||||||
            "Invoke a terminal, possibly with a @arg{program}."
 | 
					            "Invoke a terminal, possibly with a @arg{program}."
 | 
				
			||||||
            (run-shell-command (if program
 | 
					            (run-shell-command (if program
 | 
				
			||||||
                                   (format nil "kitty ~A" program)
 | 
					                                   (format nil "kitty ~A" program)
 | 
				
			||||||
@ -297,7 +297,7 @@ code looks like so:
 | 
				
			|||||||
#+name: gen-colors
 | 
					#+name: gen-colors
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var colors=nord-colors
 | 
					#+begin_src emacs-lisp :var colors=nord-colors
 | 
				
			||||||
  (mapconcat (lambda (color)
 | 
					(mapconcat (lambda (color)
 | 
				
			||||||
             (format "(defvar phundrak-%s \"%s\")" (car color) (cadr color)))
 | 
					             (format "(defvar phundrak-%s \"%s\")" (car color) (cadr color)))
 | 
				
			||||||
           colors
 | 
					           colors
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
@ -332,45 +332,45 @@ And with that we’re done!
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
The modeline is pretty easy. First, let’s load the ~colors.lisp~ file we just created:
 | 
					The modeline is pretty easy. First, let’s load the ~colors.lisp~ file we just created:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (load "~/.stumpwm.d/colors.lisp")
 | 
					(load "~/.stumpwm.d/colors.lisp")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, we can set some colors for the modeline. Let’s set the
 | 
					Next, we can set some colors for the modeline. Let’s set the
 | 
				
			||||||
background of the modeline to Nord1 and the foreground to Nord5, I
 | 
					background of the modeline to Nord1 and the foreground to Nord5, I
 | 
				
			||||||
think this is a pretty good combination.
 | 
					think this is a pretty good combination.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *mode-line-background-color* phundrak-nord1
 | 
					(setf *mode-line-background-color* phundrak-nord1
 | 
				
			||||||
      ,*mode-line-foreground-color* phundrak-nord5)
 | 
					      ,*mode-line-foreground-color* phundrak-nord5)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We /could/ also use some borders in the modeline. But we won’t. Let’s
 | 
					We /could/ also use some borders in the modeline. But we won’t. Let’s
 | 
				
			||||||
still set its color to Nord1, just in case.
 | 
					still set its color to Nord1, just in case.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *mode-line-border-color* phundrak-nord1
 | 
					(setf *mode-line-border-color* phundrak-nord1
 | 
				
			||||||
      ,*mode-line-border-width* 0)
 | 
					      ,*mode-line-border-width* 0)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The timeout of the modeline indicates how often it refreshes in
 | 
					The timeout of the modeline indicates how often it refreshes in
 | 
				
			||||||
seconds. I think one second is good.
 | 
					seconds. I think one second is good.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *mode-line-timeout* 1)
 | 
					(setf *mode-line-timeout* 1)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next we get to the content of the modeline. This format follows the
 | 
					Next we get to the content of the modeline. This format follows the
 | 
				
			||||||
format indicated in the manpage of ~date~.
 | 
					format indicated in the manpage of ~date~.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *time-modeline-string* "%F %H:%M")
 | 
					(setf *time-modeline-string* "%F %H:%M")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s also indicate how the groupname is displayed.
 | 
					Let’s also indicate how the groupname is displayed.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *group-format* "%t")
 | 
					(setf *group-format* "%t")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The window format should display first its window number, then its
 | 
					The window format should display first its window number, then its
 | 
				
			||||||
titled, limited to 30 characters.
 | 
					titled, limited to 30 characters.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *window-format* "%n: %30t")
 | 
					(setf *window-format* "%n: %30t")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Here are some modules that we will load for the modeline:
 | 
					Here are some modules that we will load for the modeline:
 | 
				
			||||||
@ -384,7 +384,7 @@ Here are some modules that we will load for the modeline:
 | 
				
			|||||||
#+name: gen-load-modeline-modules
 | 
					#+name: gen-load-modeline-modules
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var modules=modeline-modules
 | 
					#+begin_src emacs-lisp :var modules=modeline-modules
 | 
				
			||||||
  (mapconcat (lambda (module)
 | 
					(mapconcat (lambda (module)
 | 
				
			||||||
             (format "(load-module \"%s\")" (car module)))
 | 
					             (format "(load-module \"%s\")" (car module)))
 | 
				
			||||||
           modules
 | 
					           modules
 | 
				
			||||||
           "\n")
 | 
					           "\n")
 | 
				
			||||||
@ -405,7 +405,7 @@ highlighted, and ~%u~ will display urgent windows if there are any. ~%d~
 | 
				
			|||||||
on the other hand will display the date in the format set above, while
 | 
					on the other hand will display the date in the format set above, while
 | 
				
			||||||
~%B~ will display the battery level of the laptop.
 | 
					~%B~ will display the battery level of the laptop.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *screen-mode-line-format* (list "%g %v %u ^> %C | %M | %B | %d"))
 | 
					(setf *screen-mode-line-format* (list "%g %v %u ^> %C | %M | %B | %d"))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This variable as you can see is a list of elements, although here I am
 | 
					This variable as you can see is a list of elements, although here I am
 | 
				
			||||||
@ -455,7 +455,7 @@ is the list of groups I will be using:
 | 
				
			|||||||
#+name: gen-groups
 | 
					#+name: gen-groups
 | 
				
			||||||
#+headers: :exports none
 | 
					#+headers: :exports none
 | 
				
			||||||
#+begin_src emacs-lisp :var groups=list-groups
 | 
					#+begin_src emacs-lisp :var groups=list-groups
 | 
				
			||||||
  (let ((make-group (lambda (group &optional first-p)
 | 
					(let ((make-group (lambda (group &optional first-p)
 | 
				
			||||||
                    (let ((group-name (car group))
 | 
					                    (let ((group-name (car group))
 | 
				
			||||||
                          (group-type (nth 3 group)))
 | 
					                          (group-type (nth 3 group)))
 | 
				
			||||||
                      (format "(%s \"%s\")"
 | 
					                      (format "(%s \"%s\")"
 | 
				
			||||||
@ -485,7 +485,7 @@ is the list of groups I will be using:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Groups are specified this way:
 | 
					Groups are specified this way:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (when *initializing*
 | 
					(when *initializing*
 | 
				
			||||||
  <<gen-groups()>>)
 | 
					  <<gen-groups()>>)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -496,7 +496,7 @@ also be dynamic tiling groups or floating groups.
 | 
				
			|||||||
Next, let’s make sure no previous window placement rule is in place,
 | 
					Next, let’s make sure no previous window placement rule is in place,
 | 
				
			||||||
this will avoid unexpected and hard-to-debug behavior.
 | 
					this will avoid unexpected and hard-to-debug behavior.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (clear-window-placement-rules)
 | 
					(clear-window-placement-rules)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As you can see in the table [[list-groups]] above, I also indicated my
 | 
					As you can see in the table [[list-groups]] above, I also indicated my
 | 
				
			||||||
@ -505,8 +505,8 @@ class, so it will be pretty straightforward to the corresponding code.
 | 
				
			|||||||
#+name: gen-rules
 | 
					#+name: gen-rules
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var rules=list-groups
 | 
					#+begin_src emacs-lisp :var rules=list-groups
 | 
				
			||||||
  (require 'seq)
 | 
					(require 'seq)
 | 
				
			||||||
  (let ((output "")
 | 
					(let ((output "")
 | 
				
			||||||
      (rules (seq-filter (lambda (rule) rule)
 | 
					      (rules (seq-filter (lambda (rule) rule)
 | 
				
			||||||
                         (mapcar (lambda (line)
 | 
					                         (mapcar (lambda (line)
 | 
				
			||||||
                                   (let ((classes (caddr line)))
 | 
					                                   (let ((classes (caddr line)))
 | 
				
			||||||
@ -550,7 +550,7 @@ three terminal windows to open by default:
 | 
				
			|||||||
- and two terminals
 | 
					- and two terminals
 | 
				
			||||||
This can be done like so:
 | 
					This can be done like so:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defun my-term-init (current-group _last-group)
 | 
					(defun my-term-init (current-group _last-group)
 | 
				
			||||||
  "Create terminals in the first group when none are already there."
 | 
					  "Create terminals in the first group when none are already there."
 | 
				
			||||||
  (let ((term-group (select-group (current-screen) "2"))
 | 
					  (let ((term-group (select-group (current-screen) "2"))
 | 
				
			||||||
        (windows    (group-windows current-group)))
 | 
					        (windows    (group-windows current-group)))
 | 
				
			||||||
@ -565,13 +565,13 @@ This can be done like so:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Let’s add a hook for that now:
 | 
					Let’s add a hook for that now:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (add-hook *focus-group-hook* 'my-term-init)
 | 
					(add-hook *focus-group-hook* 'my-term-init)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
By the way, dynamic groups should have a split ratio of half of the
 | 
					By the way, dynamic groups should have a split ratio of half of the
 | 
				
			||||||
available space.
 | 
					available space.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *dynamic-group-master-split-ratio* 1/2)
 | 
					(setf *dynamic-group-master-split-ratio* 1/2)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Theme
 | 
					* Theme
 | 
				
			||||||
@ -581,7 +581,7 @@ available space.
 | 
				
			|||||||
:END:
 | 
					:END:
 | 
				
			||||||
As in the modeline file, the first thing we’ll do is to load our colors.
 | 
					As in the modeline file, the first thing we’ll do is to load our colors.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (load "~/.stumpwm.d/colors.lisp")
 | 
					(load "~/.stumpwm.d/colors.lisp")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We can now go onto more serious business.
 | 
					We can now go onto more serious business.
 | 
				
			||||||
@ -599,9 +599,9 @@ There’s a quickfix available while we wait for ~clx-truetype~ to be once
 | 
				
			|||||||
again available: clone it in quicklisp’s local projects. You will
 | 
					again available: clone it in quicklisp’s local projects. You will
 | 
				
			||||||
obviously need to have quicklisp installed (for that, follow the
 | 
					obviously need to have quicklisp installed (for that, follow the
 | 
				
			||||||
[[https://www.quicklisp.org/beta/#installation][official instructions]]), then execute the following shell commands:
 | 
					[[https://www.quicklisp.org/beta/#installation][official instructions]]), then execute the following shell commands:
 | 
				
			||||||
#+begin_src sh
 | 
					#+begin_src sh :dir ~/quicklisp/local-projects
 | 
				
			||||||
  cd ~/quicklisp/local-projects/
 | 
					cd ~/quicklisp/local-projects/
 | 
				
			||||||
  git clone https://github.com/lihebi/clx-truetype.git
 | 
					git clone https://github.com/lihebi/clx-truetype.git
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will make ~clx-truetype~ available to quicklisp, and you can run
 | 
					This will make ~clx-truetype~ available to quicklisp, and you can run
 | 
				
			||||||
@ -611,8 +611,8 @@ issue (running it again is necessary to install its dependencies).
 | 
				
			|||||||
Now that this is out of the way, let’s add two lines so we can use TTF
 | 
					Now that this is out of the way, let’s add two lines so we can use TTF
 | 
				
			||||||
fonts:
 | 
					fonts:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (ql:quickload :clx-truetype)
 | 
					(ql:quickload :clx-truetype)
 | 
				
			||||||
  (load-module "ttf-fonts")
 | 
					(load-module "ttf-fonts")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
The documentation says we should be able to also use OTF fonts, but so
 | 
					The documentation says we should be able to also use OTF fonts, but so
 | 
				
			||||||
far I’ve had no luck loading one. Loading more than one font to use
 | 
					far I’ve had no luck loading one. Loading more than one font to use
 | 
				
			||||||
@ -636,7 +636,7 @@ work).
 | 
				
			|||||||
#+name: gen-fonts
 | 
					#+name: gen-fonts
 | 
				
			||||||
#+headers: :wrap src lisp
 | 
					#+headers: :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp :var fonts=list-fonts
 | 
					#+begin_src emacs-lisp :var fonts=list-fonts
 | 
				
			||||||
  (format "(set-font `(%s))"
 | 
					(format "(set-font `(%s))"
 | 
				
			||||||
        (mapconcat (lambda (font)
 | 
					        (mapconcat (lambda (font)
 | 
				
			||||||
                    (let ((family    (nth 0 font))
 | 
					                    (let ((family    (nth 0 font))
 | 
				
			||||||
                          (subfamily (nth 1 font))
 | 
					                          (subfamily (nth 1 font))
 | 
				
			||||||
@ -671,17 +671,17 @@ We can now set a couple of colors for StumpWM. Not that we will see
 | 
				
			|||||||
them often since I don’t like borders on my windows, but in case I
 | 
					them often since I don’t like borders on my windows, but in case I
 | 
				
			||||||
want to get them back, they’ll be nice to have.
 | 
					want to get them back, they’ll be nice to have.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (set-border-color        phundrak-nord1)
 | 
					(set-border-color        phundrak-nord1)
 | 
				
			||||||
  (set-focus-color         phundrak-nord1)
 | 
					(set-focus-color         phundrak-nord1)
 | 
				
			||||||
  (set-unfocus-color       phundrak-nord3)
 | 
					(set-unfocus-color       phundrak-nord3)
 | 
				
			||||||
  (set-float-focus-color   phundrak-nord1)
 | 
					(set-float-focus-color   phundrak-nord1)
 | 
				
			||||||
  (set-float-unfocus-color phundrak-nord3)
 | 
					(set-float-unfocus-color phundrak-nord3)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s also set the colors of the message and input windows:
 | 
					Let’s also set the colors of the message and input windows:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (set-fg-color phundrak-nord4)
 | 
					(set-fg-color phundrak-nord4)
 | 
				
			||||||
  (set-bg-color phundrak-nord1)
 | 
					(set-bg-color phundrak-nord1)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As I said, I don’t like borders, so I’ll remove them. I’ll still keep
 | 
					As I said, I don’t like borders, so I’ll remove them. I’ll still keep
 | 
				
			||||||
@ -689,7 +689,7 @@ the window’s title bar available when it’s floating, and this is also
 | 
				
			|||||||
where I can set the format of its title: its number as well as its
 | 
					where I can set the format of its title: its number as well as its
 | 
				
			||||||
name, limited to thirty characters.
 | 
					name, limited to thirty characters.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *normal-border-width*       0
 | 
					(setf *normal-border-width*       0
 | 
				
			||||||
      ,*float-window-border*       0
 | 
					      ,*float-window-border*       0
 | 
				
			||||||
      ,*float-window-title-height* 15
 | 
					      ,*float-window-title-height* 15
 | 
				
			||||||
      ,*window-border-style*       :none
 | 
					      ,*window-border-style*       :none
 | 
				
			||||||
@ -704,7 +704,7 @@ The Input windows as well as the message windows should both be at the
 | 
				
			|||||||
top of my screen. And I believe a padding of five pixels for the
 | 
					top of my screen. And I believe a padding of five pixels for the
 | 
				
			||||||
message windows is good.
 | 
					message windows is good.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf *input-window-gravity*     :top
 | 
					(setf *input-window-gravity*     :top
 | 
				
			||||||
      ,*message-window-padding*   10
 | 
					      ,*message-window-padding*   10
 | 
				
			||||||
      ,*message-window-y-padding* 10
 | 
					      ,*message-window-y-padding* 10
 | 
				
			||||||
      ,*message-window-gravity*   :top)
 | 
					      ,*message-window-gravity*   :top)
 | 
				
			||||||
@ -719,20 +719,20 @@ plain ~i3~. In Awesome, I still have gaps. And in StumpWM, I shall still
 | 
				
			|||||||
use gaps. In order to use them, let’s load a module dedicated to gaps
 | 
					use gaps. In order to use them, let’s load a module dedicated to gaps
 | 
				
			||||||
in StumpWM:
 | 
					in StumpWM:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (load-module "swm-gaps")
 | 
					(load-module "swm-gaps")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now that this is done, I can now set some variables bound to this
 | 
					Now that this is done, I can now set some variables bound to this
 | 
				
			||||||
package.
 | 
					package.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (setf swm-gaps:*head-gaps-size*  0
 | 
					(setf swm-gaps:*head-gaps-size*  0
 | 
				
			||||||
      swm-gaps:*inner-gaps-size* 5
 | 
					      swm-gaps:*inner-gaps-size* 5
 | 
				
			||||||
      swm-gaps:*outer-gaps-size* 15)
 | 
					      swm-gaps:*outer-gaps-size* 15)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally, let’s enable our gaps:
 | 
					Finally, let’s enable our gaps:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (when *initializing*
 | 
					(when *initializing*
 | 
				
			||||||
  (swm-gaps:toggle-gaps))
 | 
					  (swm-gaps:toggle-gaps))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -745,7 +745,7 @@ Buckle up, this chapter is going to be *long*, because me loves LOTS of keybinds
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
First, let’s declare again we are using the default package ~stumpwm~:
 | 
					First, let’s declare again we are using the default package ~stumpwm~:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (in-package :stumpwm)
 | 
					(in-package :stumpwm)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will avoid us always repeating ~stumpwm:define-key~ or ~stumpwm:kbd~
 | 
					This will avoid us always repeating ~stumpwm:define-key~ or ~stumpwm:kbd~
 | 
				
			||||||
@ -785,12 +785,12 @@ it with ~set-prefix-key~. I personally like to have my space key as a
 | 
				
			|||||||
leader key, but in order to not have it conflict with Emacs, I also
 | 
					leader key, but in order to not have it conflict with Emacs, I also
 | 
				
			||||||
need to press the super key too.
 | 
					need to press the super key too.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (set-prefix-key (kbd "s-SPC"))
 | 
					(set-prefix-key (kbd "s-SPC"))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Also, let’s enable ~which-key~:
 | 
					Also, let’s enable ~which-key~:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (which-key-mode)
 | 
					(which-key-mode)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Lastly, before we get more into details, keep in mind that I use the
 | 
					Lastly, before we get more into details, keep in mind that I use the
 | 
				
			||||||
@ -843,7 +843,7 @@ First, let’s create my ~rofi~ scripts keymap.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here’s the equivalent in Common Lisp.
 | 
					Here’s the equivalent in Common Lisp.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-rofi-keymap*
 | 
					(defvar *my-rofi-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=rofi-scripts)>>
 | 
					    <<keybinds-gen(map="m", keybinds=rofi-scripts)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
@ -861,7 +861,7 @@ Let’s also create a keymap for screenshots.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Here’s the equivalent in Common Lisp.
 | 
					Here’s the equivalent in Common Lisp.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-screenshot-keymap*
 | 
					(defvar *my-screenshot-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=screenshot-keymap)>>
 | 
					    <<keybinds-gen(map="m", keybinds=screenshot-keymap)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
@ -883,7 +883,7 @@ the above keymaps.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
This translates to:
 | 
					This translates to:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-applications-keymap*
 | 
					(defvar *my-applications-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=application-keymap)>>
 | 
					    <<keybinds-gen(map="m", keybinds=application-keymap)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
@ -891,14 +891,14 @@ This translates to:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The application keymap can now be bound to the root map like so:
 | 
					The application keymap can now be bound to the root map like so:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *root-map* (kbd "a") '*my-applications-keymap*)
 | 
					(define-key *root-map* (kbd "a") '*my-applications-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I will also bind to the top map ~s-RET~ in order to open a new terminal
 | 
					I will also bind to the top map ~s-RET~ in order to open a new terminal
 | 
				
			||||||
window. The screenshot keymap is also bound to the ScreenPrint key.
 | 
					window. The screenshot keymap is also bound to the ScreenPrint key.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *top-map* (kbd "s-RET") "term")
 | 
					(define-key *top-map* (kbd "s-RET") "term")
 | 
				
			||||||
  (define-key *top-map* (kbd "Print") '*my-screenshot-keymap*)
 | 
					(define-key *top-map* (kbd "Print") '*my-screenshot-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** End of Session, Powering Off, and the Likes
 | 
					** End of Session, Powering Off, and the Likes
 | 
				
			||||||
@ -922,7 +922,7 @@ whishes to do.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
This translates to:
 | 
					This translates to:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-end-session-keymap*
 | 
					(defvar *my-end-session-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=end-session-keymap)>>
 | 
					    <<keybinds-gen(map="m", keybinds=end-session-keymap)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
@ -930,7 +930,7 @@ This translates to:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Which is bound in the root map to ~q~:
 | 
					Which is bound in the root map to ~q~:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *root-map* (kbd "q") '*my-end-session-keymap*)
 | 
					(define-key *root-map* (kbd "q") '*my-end-session-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Groups
 | 
					** Groups
 | 
				
			||||||
@ -945,13 +945,10 @@ this:
 | 
				
			|||||||
#+name: group-keybind-gen
 | 
					#+name: group-keybind-gen
 | 
				
			||||||
#+header: :noweb no :results verbatim :exports none :var convert="no"
 | 
					#+header: :noweb no :results verbatim :exports none :var convert="no"
 | 
				
			||||||
#+begin_src emacs-lisp :var groups=list-groups mod="s" action="gselect" map="*top-map*" convert="yes"
 | 
					#+begin_src emacs-lisp :var groups=list-groups mod="s" action="gselect" map="*top-map*" convert="yes"
 | 
				
			||||||
  (mapconcat (lambda (group)
 | 
					(mapconcat (lambda (group)
 | 
				
			||||||
             (let ((group-nbr (nth 1 group)))
 | 
					             (let ((group-nbr (nth 1 group)))
 | 
				
			||||||
               (format "%S" `(define-key
 | 
					               (format "%S" `(define-key
 | 
				
			||||||
                               ,(make-symbol map)
 | 
					                               ,(make-symbol map)
 | 
				
			||||||
                                 ;; (kbd ,(if (string= convert "yes")
 | 
					 | 
				
			||||||
                                 ;;           (format "%s-<<num-to-char(num=%s)>>" mod group-nbr)
 | 
					 | 
				
			||||||
                                 ;;         (number-to-string group-nbr)))
 | 
					 | 
				
			||||||
                               (kbd ,(format "%s-%s"
 | 
					                               (kbd ,(format "%s-%s"
 | 
				
			||||||
                                             mod
 | 
					                                             mod
 | 
				
			||||||
                                             (if (string= "yes" convert)
 | 
					                                             (if (string= "yes" convert)
 | 
				
			||||||
@ -974,7 +971,7 @@ this:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+header: :cache yes :noweb yes :wrap src lisp
 | 
					#+header: :cache yes :noweb yes :wrap src lisp
 | 
				
			||||||
#+begin_src emacs-lisp
 | 
					#+begin_src emacs-lisp
 | 
				
			||||||
  <<group-keybind-gen(mod="s", action="gselect", convert="yes")>>
 | 
					<<group-keybind-gen(mod="s", action="gselect", convert="yes")>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+RESULTS[627ef5c7e456944dd624c322529699e11f2a041b]:
 | 
					#+RESULTS[627ef5c7e456944dd624c322529699e11f2a041b]:
 | 
				
			||||||
@ -995,7 +992,7 @@ of the group/. As mentioned before, due to my keyboard layout Shift +
 | 
				
			|||||||
/number/ is actually just /number/ for me (e.g. Shift + ~"~ results in ~1~),
 | 
					/number/ is actually just /number/ for me (e.g. Shift + ~"~ results in ~1~),
 | 
				
			||||||
so there’s no need to convert the group number to another character.
 | 
					so there’s no need to convert the group number to another character.
 | 
				
			||||||
#+begin_src emacs-lisp :wrap src lisp
 | 
					#+begin_src emacs-lisp :wrap src lisp
 | 
				
			||||||
  <<group-keybind-gen(mod="s", action="gmove-and-follow", convert="no")>>
 | 
					<<group-keybind-gen(mod="s", action="gmove-and-follow", convert="no")>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+RESULTS[6577510905e5cce124ff563a6d68a7f64fc8683c]:
 | 
					#+RESULTS[6577510905e5cce124ff563a6d68a7f64fc8683c]:
 | 
				
			||||||
@ -1012,7 +1009,7 @@ so there’s no need to convert the group number to another character.
 | 
				
			|||||||
If I want to send a window to another group without following it, I’ll
 | 
					If I want to send a window to another group without following it, I’ll
 | 
				
			||||||
use ~s-S-C-<group number>~, which gives us the following:
 | 
					use ~s-S-C-<group number>~, which gives us the following:
 | 
				
			||||||
#+begin_src emacs-lisp :wrap src lisp
 | 
					#+begin_src emacs-lisp :wrap src lisp
 | 
				
			||||||
  <<group-keybind-gen(mod="s-C", action="gmove-and-follow", convert="no")>>
 | 
					<<group-keybind-gen(mod="s-C", action="gmove-and-follow", convert="no")>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+RESULTS[55852a5a035c23f078ba0a97120151c059fa955f]:
 | 
					#+RESULTS[55852a5a035c23f078ba0a97120151c059fa955f]:
 | 
				
			||||||
@ -1029,7 +1026,7 @@ use ~s-S-C-<group number>~, which gives us the following:
 | 
				
			|||||||
And if I want to bring the windows of another group into the current
 | 
					And if I want to bring the windows of another group into the current
 | 
				
			||||||
group, I’ll use ~s-C-<group number>~:
 | 
					group, I’ll use ~s-C-<group number>~:
 | 
				
			||||||
#+begin_src emacs-lisp :wrap src lisp :exports results
 | 
					#+begin_src emacs-lisp :wrap src lisp :exports results
 | 
				
			||||||
  <<group-keybind-gen(mod="s-C", action="gmove-and-follow", convert="yes")>>
 | 
					<<group-keybind-gen(mod="s-C", action="gmove-and-follow", convert="yes")>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+RESULTS[b536bb0359e6e9e10e98635c82bed3d348d75ac5]:
 | 
					#+RESULTS[b536bb0359e6e9e10e98635c82bed3d348d75ac5]:
 | 
				
			||||||
@ -1048,19 +1045,19 @@ StumpWM also has already a nice keymap for managing groups called
 | 
				
			|||||||
already bound, but since I plan on erasing ~*root-map*~ in the near
 | 
					already bound, but since I plan on erasing ~*root-map*~ in the near
 | 
				
			||||||
future before binding stuff to it, I prefer to bind it already)
 | 
					future before binding stuff to it, I prefer to bind it already)
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *root-map* (kbd "g") '*groups-map*)
 | 
					(define-key *root-map* (kbd "g") '*groups-map*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
And a binding to ~vgroups~ is done on ~*groups-map*~ in order to regroup
 | 
					And a binding to ~vgroups~ is done on ~*groups-map*~ in order to regroup
 | 
				
			||||||
similar keybinds.
 | 
					similar keybinds.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *groups-map* (kbd "G") "vgroups")
 | 
					(define-key *groups-map* (kbd "G") "vgroups")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I grew accustomed to ~s-ESC~ bringing me to the previous group when
 | 
					I grew accustomed to ~s-ESC~ bringing me to the previous group when
 | 
				
			||||||
using AwesomeWM, so let’s define that:
 | 
					using AwesomeWM, so let’s define that:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *top-map* (kbd "s-ESC") "gother")
 | 
					(define-key *top-map* (kbd "s-ESC") "gother")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Frames and Windows management
 | 
					** Frames and Windows management
 | 
				
			||||||
@ -1125,12 +1122,12 @@ ourselves in ~*my-frames-management-keymap*~, pressing ~F~ will bring us
 | 
				
			|||||||
in ~*my-frames-float-keymap*~.
 | 
					in ~*my-frames-float-keymap*~.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-frames-float-keymap*
 | 
					(defvar *my-frames-float-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=frames-float)>>
 | 
					    <<keybinds-gen(map="m", keybinds=frames-float)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (defvar *my-frames-management-keymap*
 | 
					(defvar *my-frames-management-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=frames-and-window-management)>>
 | 
					    <<keybinds-gen(map="m", keybinds=frames-and-window-management)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
@ -1138,7 +1135,7 @@ in ~*my-frames-float-keymap*~.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Let’s bind ~*my-frames-management-keymap*~ in ~*root-keymap*~:
 | 
					Let’s bind ~*my-frames-management-keymap*~ in ~*root-keymap*~:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *root-map* (kbd "w") '*my-frames-management-keymap*)
 | 
					(define-key *root-map* (kbd "w") '*my-frames-management-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
That way, if we want for instance to split our current frame
 | 
					That way, if we want for instance to split our current frame
 | 
				
			||||||
@ -1163,7 +1160,7 @@ I also bound a couple of these functions to the top keymap for easier access:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
This translates to:
 | 
					This translates to:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  <<keybinds-gen(map="*top-map*", keybinds=top-window-map)>>
 | 
					<<keybinds-gen(map="*top-map*", keybinds=top-window-map)>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Being a [[https://bepo.fr/wiki/Accueil][bépo layout]] user, the ~hjkl~ keys don’t exactly fit me, as you
 | 
					Being a [[https://bepo.fr/wiki/Accueil][bépo layout]] user, the ~hjkl~ keys don’t exactly fit me, as you
 | 
				
			||||||
@ -1171,7 +1168,7 @@ might have noticed with my use of ~ctsr~ which is its equivalent. Due to
 | 
				
			|||||||
this, the interactive keymap for ~iresize~ is not ideal for me, let me
 | 
					this, the interactive keymap for ~iresize~ is not ideal for me, let me
 | 
				
			||||||
redefine it:
 | 
					redefine it:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-interactive-keymap (iresize tile-group) (:on-enter #'setup-iresize
 | 
					(define-interactive-keymap (iresize tile-group) (:on-enter #'setup-iresize
 | 
				
			||||||
                                                 :on-exit  #'resize-unhide
 | 
					                                                 :on-exit  #'resize-unhide
 | 
				
			||||||
                                                 :abort-if #'abort-resize-p)
 | 
					                                                 :abort-if #'abort-resize-p)
 | 
				
			||||||
  ((kbd "c") "resize-direction left")
 | 
					  ((kbd "c") "resize-direction left")
 | 
				
			||||||
@ -1183,7 +1180,7 @@ redefine it:
 | 
				
			|||||||
As with groups management, I grew used to ~s-TAB~ in AwesomeWM bringing
 | 
					As with groups management, I grew used to ~s-TAB~ in AwesomeWM bringing
 | 
				
			||||||
me back to the previously focused window.
 | 
					me back to the previously focused window.
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (define-key *top-map* (kbd "s-TAB") "other-window")
 | 
					(define-key *top-map* (kbd "s-TAB") "other-window")
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Windows management
 | 
					** Windows management
 | 
				
			||||||
@ -1206,12 +1203,12 @@ with Emacs’ buffers.
 | 
				
			|||||||
| ~p~        | ~prev~                    |
 | 
					| ~p~        | ~prev~                    |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-buffers-management-keymap*
 | 
					(defvar *my-buffers-management-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=window-management)>>
 | 
					    <<keybinds-gen(map="m", keybinds=window-management)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (define-key *root-map* (kbd "b") '*my-buffers-management-keymap*)
 | 
					(define-key *root-map* (kbd "b") '*my-buffers-management-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Media and Media Control
 | 
					** Media and Media Control
 | 
				
			||||||
@ -1236,7 +1233,7 @@ of MPD.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Cela donne le code suivant:
 | 
					Cela donne le code suivant:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  <<interactive-gen(name="mpc-interactive", keys=inter-mpc)>>
 | 
					<<interactive-gen(name="mpc-interactive", keys=inter-mpc)>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Another one will be defined for the general audio of my computer. And
 | 
					Another one will be defined for the general audio of my computer. And
 | 
				
			||||||
@ -1253,7 +1250,7 @@ for my screen’s backlight.
 | 
				
			|||||||
| ~m~    | ~exec amixer -q set Master 1+ toggle~  |
 | 
					| ~m~    | ~exec amixer -q set Master 1+ toggle~  |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  <<interactive-gen(name="media-interactive", keys=inter-media)>>
 | 
					<<interactive-gen(name="media-interactive", keys=inter-media)>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then, let’s declare a keymap for our media controls.
 | 
					Then, let’s declare a keymap for our media controls.
 | 
				
			||||||
@ -1272,12 +1269,12 @@ Then, let’s declare a keymap for our media controls.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Let’s translate this table in CommonLisp:
 | 
					Let’s translate this table in CommonLisp:
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-media-keymap*
 | 
					(defvar *my-media-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=media-management)>>
 | 
					    <<keybinds-gen(map="m", keybinds=media-management)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (define-key *root-map* (kbd "m") '*my-media-keymap*)
 | 
					(define-key *root-map* (kbd "m") '*my-media-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I will also define on ~*top-map*~ some basic volume management keybinds
 | 
					I will also define on ~*top-map*~ some basic volume management keybinds
 | 
				
			||||||
@ -1298,7 +1295,7 @@ media-related, but I’ll add keybinds for my screen’s backlight.
 | 
				
			|||||||
| ~XF86MonBrightnessUp~   | ~exec xbacklight -inc 2~               |
 | 
					| ~XF86MonBrightnessUp~   | ~exec xbacklight -inc 2~               |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  <<keybinds-gen(map="*top-map*", keybinds=media-top-level)>>
 | 
					<<keybinds-gen(map="*top-map*", keybinds=media-top-level)>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Misc
 | 
					** Misc
 | 
				
			||||||
@ -1316,7 +1313,7 @@ anywhere else:
 | 
				
			|||||||
| ~r~        | ~reload~     |
 | 
					| ~r~        | ~reload~     |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  <<keybinds-gen(map="*root-map*", keybinds=misc-root-map)>>
 | 
					<<keybinds-gen(map="*root-map*", keybinds=misc-root-map)>>
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
From time to time, I need to switch between different keyboard
 | 
					From time to time, I need to switch between different keyboard
 | 
				
			||||||
@ -1330,12 +1327,12 @@ games and the bépo layout most of the time. I’ll use the command
 | 
				
			|||||||
| ~u~        | ~exec setxkbmap us~            |
 | 
					| ~u~        | ~exec setxkbmap us~            |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+begin_src lisp
 | 
					#+begin_src lisp
 | 
				
			||||||
  (defvar *my-keyboard-layout-keymap*
 | 
					(defvar *my-keyboard-layout-keymap*
 | 
				
			||||||
  (let ((m (make-sparse-keymap)))
 | 
					  (let ((m (make-sparse-keymap)))
 | 
				
			||||||
    <<keybinds-gen(map="m", keybinds=keyboard-layout-map)>>
 | 
					    <<keybinds-gen(map="m", keybinds=keyboard-layout-map)>>
 | 
				
			||||||
    m))
 | 
					    m))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (define-key *root-map* (kbd "k") '*my-keyboard-layout-keymap*)
 | 
					(define-key *root-map* (kbd "k") '*my-keyboard-layout-keymap*)
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* org functions                                                    :noexport:
 | 
					* org functions                                                    :noexport:
 | 
				
			||||||
@ -1345,7 +1342,7 @@ games and the bépo layout most of the time. I’ll use the command
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+name: keybinds-gen
 | 
					#+name: keybinds-gen
 | 
				
			||||||
#+begin_src emacs-lisp :var map="m" keybinds=frames-float
 | 
					#+begin_src emacs-lisp :var map="m" keybinds=frames-float
 | 
				
			||||||
  (mapconcat (lambda (keybind)
 | 
					(mapconcat (lambda (keybind)
 | 
				
			||||||
             (format "%s" (let ((key      (let ((s (car keybind)))
 | 
					             (format "%s" (let ((key      (let ((s (car keybind)))
 | 
				
			||||||
                                            (substring-no-properties s 1 (1- (length s)))))
 | 
					                                            (substring-no-properties s 1 (1- (length s)))))
 | 
				
			||||||
                                (function (let ((s (cadr keybind)))
 | 
					                                (function (let ((s (cadr keybind)))
 | 
				
			||||||
@ -1361,7 +1358,7 @@ games and the bépo layout most of the time. I’ll use the command
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+name: interactive-gen
 | 
					#+name: interactive-gen
 | 
				
			||||||
#+begin_src emacs-lisp :var name="inter" keys=inter-mpc
 | 
					#+begin_src emacs-lisp :var name="inter" keys=inter-mpc
 | 
				
			||||||
  (format "%s"
 | 
					(format "%s"
 | 
				
			||||||
        `(define-interactive-keymap ,name ()
 | 
					        `(define-interactive-keymap ,name ()
 | 
				
			||||||
           "\n "
 | 
					           "\n "
 | 
				
			||||||
           ,(mapconcat (lambda (keybind)
 | 
					           ,(mapconcat (lambda (keybind)
 | 
				
			||||||
@ -1382,7 +1379,7 @@ games and the bépo layout most of the time. I’ll use the command
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#+name: num-to-char
 | 
					#+name: num-to-char
 | 
				
			||||||
#+begin_src emacs-lisp :var table=number-to-char-table num=0
 | 
					#+begin_src emacs-lisp :var table=number-to-char-table num=0
 | 
				
			||||||
  (let ((char (replace-regexp-in-string (regexp-quote "~")
 | 
					(let ((char (replace-regexp-in-string (regexp-quote "~")
 | 
				
			||||||
                                      ""
 | 
					                                      ""
 | 
				
			||||||
                                      (let* ((row (assoc num table))
 | 
					                                      (let* ((row (assoc num table))
 | 
				
			||||||
                                             (char (cadr row))
 | 
					                                             (char (cadr row))
 | 
				
			||||||
 | 
				
			|||||||
@ -24,12 +24,14 @@ Whether if a new *window* will retain the current path. Possible values are:
 | 
				
			|||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_new_window_retain_current_path=true
 | 
					tmux_conf_new_window_retain_current_path=true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Whether if a new *pane* should retain the current path. Possible values are:
 | 
					Whether if a new *pane* should retain the current path. Possible values are:
 | 
				
			||||||
- ~true~ (default)
 | 
					- ~true~ (default)
 | 
				
			||||||
- ~false~
 | 
					- ~false~
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_new_window_retain_current_path=true
 | 
					tmux_conf_new_window_retain_current_path=true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Whether or not tmux should attempt to reconnect to the current ssh session. This
 | 
					Whether or not tmux should attempt to reconnect to the current ssh session. This
 | 
				
			||||||
is still experimental. Possible values are:
 | 
					is still experimental. Possible values are:
 | 
				
			||||||
- ~true~
 | 
					- ~true~
 | 
				
			||||||
@ -37,6 +39,7 @@ is still experimental. Possible values are:
 | 
				
			|||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_new_pane_reconnect_ssh=true
 | 
					tmux_conf_new_pane_reconnect_ssh=true
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Whether tmux should prompt for new session name when creating a new one.
 | 
					Whether tmux should prompt for new session name when creating a new one.
 | 
				
			||||||
Possible values are:
 | 
					Possible values are:
 | 
				
			||||||
- ~true~
 | 
					- ~true~
 | 
				
			||||||
@ -56,18 +59,21 @@ Possible values are:
 | 
				
			|||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_theme_24b_colour=false
 | 
					tmux_conf_theme_24b_colour=false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These variables are for chosing the window style. I use the default one.
 | 
					These variables are for chosing the window style. I use the default one.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_fg='default'
 | 
					tmux_conf_theme_window_fg='default'
 | 
				
			||||||
  tmux_conf_theme_window_bg='default'
 | 
					tmux_conf_theme_window_bg='default'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Whether the focused pane should be highlighted (only available in tmux >= 2.1).
 | 
					Whether the focused pane should be highlighted (only available in tmux >= 2.1).
 | 
				
			||||||
Possible values are:
 | 
					Possible values are:
 | 
				
			||||||
- ~true~
 | 
					- ~true~
 | 
				
			||||||
- ~false~ (default)
 | 
					- ~false~ (default)
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_highlight_focused_pane=false
 | 
					tmux_conf_theme_highlight_focused_pane=false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the terminal title. Built-in variables are:
 | 
					Set the terminal title. Built-in variables are:
 | 
				
			||||||
- =#{circled_window_index}=
 | 
					- =#{circled_window_index}=
 | 
				
			||||||
- =#{circled_session_name}=
 | 
					- =#{circled_session_name}=
 | 
				
			||||||
@ -76,16 +82,17 @@ Set the terminal title. Built-in variables are:
 | 
				
			|||||||
- =#{username}=
 | 
					- =#{username}=
 | 
				
			||||||
- =#{username_ssh}=
 | 
					- =#{username_ssh}=
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_terminal_title='#h ❐ #S ● #I #W'
 | 
					tmux_conf_theme_terminal_title='#h ❐ #S ● #I #W'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These variables set the left/right separators between sections. With the current
 | 
					These variables set the left/right separators between sections. With the current
 | 
				
			||||||
values, you don’t need to install Powerline, but only fonts patched with
 | 
					values, you don’t need to install Powerline, but only fonts patched with
 | 
				
			||||||
Powerline symbols or the standalone PowerlineSymbols.otf font.
 | 
					Powerline symbols or the standalone PowerlineSymbols.otf font.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_left_separator_main='\uE0B0'
 | 
					tmux_conf_theme_left_separator_main='\uE0B0'
 | 
				
			||||||
  tmux_conf_theme_left_separator_sub='\uE0B1'
 | 
					tmux_conf_theme_left_separator_sub='\uE0B1'
 | 
				
			||||||
  tmux_conf_theme_right_separator_main='\uE0B2'
 | 
					tmux_conf_theme_right_separator_main='\uE0B2'
 | 
				
			||||||
  tmux_conf_theme_right_separator_sub='\uE0B3'
 | 
					tmux_conf_theme_right_separator_sub='\uE0B3'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Colors and style
 | 
					** Colors and style
 | 
				
			||||||
@ -103,45 +110,52 @@ Choose the style of the pane borders. Possible values are:
 | 
				
			|||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_theme_pane_border_style=thin
 | 
					tmux_conf_theme_pane_border_style=thin
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare what the colors of the focused pane should be. The first variable
 | 
					Declare what the colors of the focused pane should be. The first variable
 | 
				
			||||||
specifies the foreground color, the other the background color.
 | 
					specifies the foreground color, the other the background color.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_focused_pane_fg='default'
 | 
					tmux_conf_theme_focused_pane_fg='default'
 | 
				
			||||||
  tmux_conf_theme_focused_pane_bg='#0087d7'
 | 
					tmux_conf_theme_focused_pane_bg='#0087d7'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Here you  can set  the colors  of the pane  borders.
 | 
					Here you  can set  the colors  of the pane  borders.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_pane_border='#444444'
 | 
					tmux_conf_theme_pane_border='#444444'
 | 
				
			||||||
  tmux_conf_theme_pane_active_border='#00afff'
 | 
					tmux_conf_theme_pane_active_border='#00afff'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With these variables, you can set the colors for the pane indicators.
 | 
					With these variables, you can set the colors for the pane indicators.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_pane_indicator='#00afff'
 | 
					tmux_conf_theme_pane_indicator='#00afff'
 | 
				
			||||||
  tmux_conf_theme_pane_active_indicator='#00afff'
 | 
					tmux_conf_theme_pane_active_indicator='#00afff'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These variables set the colors and the style of the status line.
 | 
					These variables set the colors and the style of the status line.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_message_fg='#000000'
 | 
					tmux_conf_theme_message_fg='#000000'
 | 
				
			||||||
  tmux_conf_theme_message_bg='#ffff00'
 | 
					tmux_conf_theme_message_bg='#ffff00'
 | 
				
			||||||
  tmux_conf_theme_message_attr='bold'
 | 
					tmux_conf_theme_message_attr='bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Same as above for the status line command style.
 | 
					Same as above for the status line command style.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_message_command_fg='#ffff00'
 | 
					tmux_conf_theme_message_command_fg='#ffff00'
 | 
				
			||||||
  tmux_conf_theme_message_command_bg='#000000'
 | 
					tmux_conf_theme_message_command_bg='#000000'
 | 
				
			||||||
  tmux_conf_theme_message_command_attr='bold'
 | 
					tmux_conf_theme_message_command_attr='bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These variables set the style of the window modes.
 | 
					These variables set the style of the window modes.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_mode_fg='#000000'
 | 
					tmux_conf_theme_mode_fg='#000000'
 | 
				
			||||||
  tmux_conf_theme_mode_bg='#ffff00'
 | 
					tmux_conf_theme_mode_bg='#ffff00'
 | 
				
			||||||
  tmux_conf_theme_mode_attr='bold'
 | 
					tmux_conf_theme_mode_attr='bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the style of the status line.
 | 
					Set the style of the status line.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_status_fg='#8a8a8a'
 | 
					tmux_conf_theme_status_fg='#8a8a8a'
 | 
				
			||||||
  tmux_conf_theme_status_bg='#080808'
 | 
					tmux_conf_theme_status_bg='#080808'
 | 
				
			||||||
  tmux_conf_theme_status_attr='none'
 | 
					tmux_conf_theme_status_attr='none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Window status bar
 | 
					** Window status bar
 | 
				
			||||||
@ -152,10 +166,11 @@ The following variables are to set the window’s status style and format.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Sets the colors and style of the window status.
 | 
					Sets the colors and style of the window status.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_fg='#8a8a8a'
 | 
					tmux_conf_theme_window_status_fg='#8a8a8a'
 | 
				
			||||||
  tmux_conf_theme_window_status_bg='#080808'
 | 
					tmux_conf_theme_window_status_bg='#080808'
 | 
				
			||||||
  tmux_conf_theme_window_status_attr='none'
 | 
					tmux_conf_theme_window_status_attr='none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the format of the window status. Built-in variables are:
 | 
					Sets the format of the window status. Built-in variables are:
 | 
				
			||||||
- =#{circled_window_index}=
 | 
					- =#{circled_window_index}=
 | 
				
			||||||
- =#{circled_session_name}=
 | 
					- =#{circled_session_name}=
 | 
				
			||||||
@ -166,12 +181,14 @@ Sets the format of the window status. Built-in variables are:
 | 
				
			|||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
tmux_conf_theme_window_status_format='#I #W'
 | 
					tmux_conf_theme_window_status_format='#I #W'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the colors and style of the current window status.
 | 
					Sets the colors and style of the current window status.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_current_fg='#000000'
 | 
					tmux_conf_theme_window_status_current_fg='#000000'
 | 
				
			||||||
  tmux_conf_theme_window_status_current_bg='#00afff'
 | 
					tmux_conf_theme_window_status_current_bg='#00afff'
 | 
				
			||||||
  tmux_conf_theme_window_status_current_attr='bold'
 | 
					tmux_conf_theme_window_status_current_attr='bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the format of the currentwindow status. Built-in variables are:
 | 
					Sets the format of the currentwindow status. Built-in variables are:
 | 
				
			||||||
- =#{circled_window_index}=
 | 
					- =#{circled_window_index}=
 | 
				
			||||||
- =#{circled_session_name}=
 | 
					- =#{circled_session_name}=
 | 
				
			||||||
@ -180,26 +197,30 @@ Sets the format of the currentwindow status. Built-in variables are:
 | 
				
			|||||||
- =#{username}=
 | 
					- =#{username}=
 | 
				
			||||||
- =#{username_ssh}=
 | 
					- =#{username_ssh}=
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_current_format='#I #W'
 | 
					tmux_conf_theme_window_status_current_format='#I #W'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Sets the window activity status style.
 | 
					Sets the window activity status style.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_activity_fg='default'
 | 
					tmux_conf_theme_window_status_activity_fg='default'
 | 
				
			||||||
  tmux_conf_theme_window_status_activity_bg='default'
 | 
					tmux_conf_theme_window_status_activity_bg='default'
 | 
				
			||||||
  tmux_conf_theme_window_status_activity_attr='underscore'
 | 
					tmux_conf_theme_window_status_activity_attr='underscore'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the window bell status style.
 | 
					Sets the window bell status style.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_bell_fg='#ffff00'
 | 
					tmux_conf_theme_window_status_bell_fg='#ffff00'
 | 
				
			||||||
  tmux_conf_theme_window_status_bell_bg='default'
 | 
					tmux_conf_theme_window_status_bell_bg='default'
 | 
				
			||||||
  tmux_conf_theme_window_status_bell_attr='blink,bold'
 | 
					tmux_conf_theme_window_status_bell_attr='blink,bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the window last status style.
 | 
					Sets the window last status style.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_window_status_last_fg='#00afff'
 | 
					tmux_conf_theme_window_status_last_fg='#00afff'
 | 
				
			||||||
  tmux_conf_theme_window_status_last_bg='default'
 | 
					tmux_conf_theme_window_status_last_bg='default'
 | 
				
			||||||
  tmux_conf_theme_window_status_last_attr='none'
 | 
					tmux_conf_theme_window_status_last_attr='none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the left and right content of the status bar of tmux. Sections should be
 | 
					Sets the left and right content of the status bar of tmux. Sections should be
 | 
				
			||||||
separated with =|=, subsections with =,=. The built-in values are:
 | 
					separated with =|=, subsections with =,=. The built-in values are:
 | 
				
			||||||
- =#{battery_bar}=
 | 
					- =#{battery_bar}=
 | 
				
			||||||
@ -223,100 +244,112 @@ separated with =|=, subsections with =,=. The built-in values are:
 | 
				
			|||||||
- =#{username}=
 | 
					- =#{username}=
 | 
				
			||||||
- =#{username_ssh}=
 | 
					- =#{username_ssh}=
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_status_left=' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '
 | 
					tmux_conf_theme_status_left=' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '
 | 
				
			||||||
  tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '
 | 
					tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the left status style and colors.
 | 
					Sets the left status style and colors.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_status_left_fg='#000000,#e4e4e4,#e4e4e4'
 | 
					tmux_conf_theme_status_left_fg='#000000,#e4e4e4,#e4e4e4'
 | 
				
			||||||
  tmux_conf_theme_status_left_bg='#ffff00,#ff00af,#00afff'
 | 
					tmux_conf_theme_status_left_bg='#ffff00,#ff00af,#00afff'
 | 
				
			||||||
  tmux_conf_theme_status_left_attr='bold,none,none'
 | 
					tmux_conf_theme_status_left_attr='bold,none,none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sets the right status style and colors.
 | 
					Sets the right status style and colors.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_status_right_fg='#8a8a8a,#e4e4e4,#000000'
 | 
					tmux_conf_theme_status_right_fg='#8a8a8a,#e4e4e4,#000000'
 | 
				
			||||||
  tmux_conf_theme_status_right_bg='#080808,#d70000,#e4e4e4'
 | 
					tmux_conf_theme_status_right_bg='#080808,#d70000,#e4e4e4'
 | 
				
			||||||
  tmux_conf_theme_status_right_attr='none,none,bold'
 | 
					tmux_conf_theme_status_right_attr='none,none,bold'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the pairing indicator, its style and its attribute.
 | 
					Set the pairing indicator, its style and its attribute.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_pairing='👓 '          # U+1F453
 | 
					tmux_conf_theme_pairing='👓 '          # U+1F453
 | 
				
			||||||
  tmux_conf_theme_pairing_fg='none'
 | 
					tmux_conf_theme_pairing_fg='none'
 | 
				
			||||||
  tmux_conf_theme_pairing_bg='none'
 | 
					tmux_conf_theme_pairing_bg='none'
 | 
				
			||||||
  tmux_conf_theme_pairing_attr='none'
 | 
					tmux_conf_theme_pairing_attr='none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the pairing indicator, its style and its attribute.
 | 
					Set the pairing indicator, its style and its attribute.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  # prefix indicator
 | 
					tmux_conf_theme_prefix='⌨ '            # U+2328
 | 
				
			||||||
  tmux_conf_theme_prefix='⌨ '            # U+2328
 | 
					tmux_conf_theme_prefix_fg='none'
 | 
				
			||||||
  tmux_conf_theme_prefix_fg='none'
 | 
					tmux_conf_theme_prefix_bg='none'
 | 
				
			||||||
  tmux_conf_theme_prefix_bg='none'
 | 
					tmux_conf_theme_prefix_attr='none'
 | 
				
			||||||
  tmux_conf_theme_prefix_attr='none'
 | 
					 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the root indicator, its style and its attribute.
 | 
					Set the root indicator, its style and its attribute.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_root='!'
 | 
					tmux_conf_theme_root='!'
 | 
				
			||||||
  tmux_conf_theme_root_fg='none'
 | 
					tmux_conf_theme_root_fg='none'
 | 
				
			||||||
  tmux_conf_theme_root_bg='none'
 | 
					tmux_conf_theme_root_bg='none'
 | 
				
			||||||
  tmux_conf_theme_root_attr='bold,blink'
 | 
					tmux_conf_theme_root_attr='bold,blink'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the synchronized indicator, its style and its attribute.
 | 
					Set the synchronized indicator, its style and its attribute.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_synchronized='🔒'     # U+1F512
 | 
					tmux_conf_theme_synchronized='🔒'     # U+1F512
 | 
				
			||||||
  tmux_conf_theme_synchronized_fg='none'
 | 
					tmux_conf_theme_synchronized_fg='none'
 | 
				
			||||||
  tmux_conf_theme_synchronized_bg='none'
 | 
					tmux_conf_theme_synchronized_bg='none'
 | 
				
			||||||
  tmux_conf_theme_synchronized_attr='none'
 | 
					tmux_conf_theme_synchronized_attr='none'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the battery bar symbols.
 | 
					Set the battery bar symbols.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_bar_symbol_full='◼'
 | 
					tmux_conf_battery_bar_symbol_full='◼'
 | 
				
			||||||
  tmux_conf_battery_bar_symbol_empty='◻'
 | 
					tmux_conf_battery_bar_symbol_empty='◻'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the battery bar length in terms of amount of symbols. Possible values are:
 | 
					Set the battery bar length in terms of amount of symbols. Possible values are:
 | 
				
			||||||
- =auto=
 | 
					- =auto=
 | 
				
			||||||
- an integer number, e.g. 5
 | 
					- an integer number, e.g. 5
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_bar_length='auto'
 | 
					tmux_conf_battery_bar_length='auto'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the battery bar palette. Possible values are:
 | 
					Set the battery bar palette. Possible values are:
 | 
				
			||||||
- =gradient= (default)
 | 
					- =gradient= (default)
 | 
				
			||||||
- =heat=
 | 
					- =heat=
 | 
				
			||||||
- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
					- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
				
			||||||
  value preceded by a pound symbol =#=.
 | 
					  value preceded by a pound symbol =#=.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_bar_palette='gradient'
 | 
					tmux_conf_battery_bar_palette='gradient'
 | 
				
			||||||
  #tmux_conf_battery_bar_palette='#d70000,#e4e4e4,#000000'
 | 
					#tmux_conf_battery_bar_palette='#d70000,#e4e4e4,#000000'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the hbar palette. Possible values are:
 | 
					Set the hbar palette. Possible values are:
 | 
				
			||||||
- =gradient= (default)
 | 
					- =gradient= (default)
 | 
				
			||||||
- =heat=
 | 
					- =heat=
 | 
				
			||||||
- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
					- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
				
			||||||
  value preceded by a pound symbol =#=.
 | 
					  value preceded by a pound symbol =#=.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_hbar_palette='gradient'
 | 
					tmux_conf_battery_hbar_palette='gradient'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the vbar palette. Possible values are:
 | 
					Set the vbar palette. Possible values are:
 | 
				
			||||||
- =gradient= (default)
 | 
					- =gradient= (default)
 | 
				
			||||||
- =heat=
 | 
					- =heat=
 | 
				
			||||||
- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
					- =color_full_fg,color_empty_fg,color_bg= with each being an hexadecimal RGB
 | 
				
			||||||
  value preceded by a pound symbol =#=.
 | 
					  value preceded by a pound symbol =#=.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_vbar_palette='gradient'
 | 
					tmux_conf_battery_vbar_palette='gradient'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
Set symbols used to indicate whether the battery is charging or discharging.
 | 
					Set symbols used to indicate whether the battery is charging or discharging.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_battery_status_charging='⚡ '    # U+26A1
 | 
					tmux_conf_battery_status_charging='⚡ '    # U+26A1
 | 
				
			||||||
  tmux_conf_battery_status_discharging='🔋 ' # U+1F50B
 | 
					tmux_conf_battery_status_discharging='🔋 ' # U+1F50B
 | 
				
			||||||
  # tmux_conf_battery_status_charging='↑'       # U+2191
 | 
					# tmux_conf_battery_status_charging='↑'       # U+2191
 | 
				
			||||||
  # tmux_conf_battery_status_discharging='↓'    # U+2193
 | 
					# tmux_conf_battery_status_discharging='↓'    # U+2193
 | 
				
			||||||
  #tmux_conf_battery_status_charging='🔌 '    # U+1F50C
 | 
					#tmux_conf_battery_status_charging='🔌 '    # U+1F50C
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Set the clock style. If it is displayed on the right side of the status bar, it
 | 
					Set the clock style. If it is displayed on the right side of the status bar, it
 | 
				
			||||||
might be better to use =%I:%M %p= rather than =%R= in
 | 
					might be better to use =%I:%M %p= rather than =%R= in
 | 
				
			||||||
=tmux_conf_theme_status_right=.
 | 
					=tmux_conf_theme_status_right=.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_theme_clock_colour='#00afff'
 | 
					tmux_conf_theme_clock_colour='#00afff'
 | 
				
			||||||
  tmux_conf_theme_clock_style='24'
 | 
					tmux_conf_theme_clock_style='24'
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Clipboard
 | 
					* Clipboard
 | 
				
			||||||
@ -328,7 +361,7 @@ Possible values are:
 | 
				
			|||||||
- ~true~
 | 
					- ~true~
 | 
				
			||||||
- ~false~ (default)
 | 
					- ~false~ (default)
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  tmux_conf_copy_to_os_clipboard=false
 | 
					tmux_conf_copy_to_os_clipboard=false
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* User customizations
 | 
					* User customizations
 | 
				
			||||||
@ -338,29 +371,33 @@ Possible values are:
 | 
				
			|||||||
Here we can override or undo some setting from settings from tmux. First, we can
 | 
					Here we can override or undo some setting from settings from tmux. First, we can
 | 
				
			||||||
increase the history size.
 | 
					increase the history size.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  set -g history-limit 10000
 | 
					set -g history-limit 10000
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We can also start with mouse mode enabled. But I don’t.
 | 
					We can also start with mouse mode enabled. But I don’t.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  #set -g mouse on
 | 
					#set -g mouse on
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Whether or not Vi mode should be enabled. But really, we should rather export
 | 
					Whether or not Vi mode should be enabled. But really, we should rather export
 | 
				
			||||||
the =VISUAL= or =EDITOR= environment variables, see the tmux manual. Although I
 | 
					the =VISUAL= or =EDITOR= environment variables, see the tmux manual. Although I
 | 
				
			||||||
don’t, as said in my dotfish, I prefer to use Emacs.
 | 
					don’t, as said in my dotfish, I prefer to use Emacs.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  #set -g status-keys vi
 | 
					#set -g status-keys vi
 | 
				
			||||||
  #set -g mode-keys vi
 | 
					#set -g mode-keys vi
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Replace =C-b= by =C-a= instead of using both prefixes. I personally prefer to
 | 
					Replace =C-b= by =C-a= instead of using both prefixes. I personally prefer to
 | 
				
			||||||
just use =C-b=, hence why the lines are commented.
 | 
					just use =C-b=, hence why the lines are commented.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  # set -gu prefix2
 | 
					# set -gu prefix2
 | 
				
			||||||
  # unbind C-a
 | 
					# unbind C-a
 | 
				
			||||||
  # unbind C-b
 | 
					# unbind C-b
 | 
				
			||||||
  # set -g prefix C-a
 | 
					# set -g prefix C-a
 | 
				
			||||||
  # bind C-a send-prefix
 | 
					# bind C-a send-prefix
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Move the status line to the top.
 | 
					Move the status line to the top.
 | 
				
			||||||
#+BEGIN_SRC conf-unix
 | 
					#+BEGIN_SRC conf-unix
 | 
				
			||||||
  #set -g status-position top
 | 
					#set -g status-position top
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user