zv / dotfilez

dotfiles to support the lifestylez of the owned and the lamest
20 stars 3 forks source link
dotfiles emacs-lisp gpg shell

+PROPERTY: header-args :noweb no

+PROPERTY: header-args:sh :results replace output :var DOTFILEZ=(directory-file-name (file-name-directory (buffer-file-name)))

** GnuPG Key

+NAME: GPG Key

+BEGIN_SRC sh :results file :file zv.gpg.pub :exports results

 gpg --export --armor 9358C8BDAAD9A62BB08B9660F6F2D0445DC172F8

+END_SRC

+RESULTS: GPG Key

[[file:zv.gpg.pub]]

** Packages :PROPERTIES: :header-args:sh: :results output replace :exports code :END:

*** =dnf.conf=

+BEGIN_SRC sh

  sudo dnf config-manager --save --setopt fastestmirror=True
#+END_SRC

*** Base

+BEGIN_SRC sh

  sudo dnf install -y tmux vim-enhanced zsh
#+END_SRC

*** Development

+BEGIN_SRC sh

  sudo dnf install -y autoconf automake binutils bison clang cmake ctags flex gcc 'gcc-c++' gdb git graphviz libtool make nasm openssl patch pkgconf readline socat strace
#+END_SRC

**** Python

+BEGIN_SRC sh

   sudo dnf install -y python3 python3-devel python3-ipython python3-epc python3-flake8 python3-importmagic python3-isort python3-mypy python3-yapf
 #+END_SRC

*** Desktop

+BEGIN_SRC sh

  sudo dnf install -y adobe-source-code-pro-fonts avahi-tools bpftool bpftrace curl \
       dotnet elfutils emacs global global-ctags gnupg2 java-latest-openjdk jq \
       kernel-devel ltrace mtr nmap perf postgresql qemu ripgrep systemtap \
       valgrind weechat wget wine wireshark xsel z3
#+END_SRC

**** Yubikey

+BEGIN_SRC sh

   sudo dnf install -y gnupg2 gnupg2-smime pcsc-lite pcsc-tools ykclient ykpers yubikey-personalization-gui
 #+END_SRC

**** Remove "Install Package To Provide" Fedora contains a package to prompt the user if a missing command is typed into the shell, which this snippet disables.

 #+BEGIN_SRC sh
   sudo dnf remove -y PackageKit-command-not-found
 #+END_SRC

** RC Files

+NAME: link_if.sh

+BEGIN_SRC sh :exports code :results verbatim :prologue "exec 2>&1" :shebang "#!/bin/sh"

 link_if() {
     if command -V "$1" 1>/dev/null; then
         shift

         while (( $# )); do
             local src="https://github.com/zv/dotfilez/raw/master/$(realpath -e "$1")"
             local dst="${HOME}/.$(basename "$1")"
             if test -e "$dst"; then
                 printf "%s already exists\n" "$dst"
             else
                 ( set -x; ln -sT "$src" "$dst" )
             fi
             shift
         done
     fi
 }

 (
     if cd "${DOTFILEZ:-0}"; then
         link_if dig 'rc/digrc'
         link_if emacs 'emacs.d' 'rc/spacemacs' 'rc/gnus.el' 'rc/newsrc'
         link_if erl 'rc/erlang'
         link_if gdb 'rc/gdbinit'
         link_if git 'rc/gitignore' 'rc/gitconfig'
         link_if gpg 'rc/gnupg'
         link_if iex 'rc/iex'
         link_if node 'rc/npmrc' 'rc/babelrc'
         link_if psql 'rc/psqlrc'
         link_if rg 'rc/ripgreprc'
         link_if ruby 'rc/pryrc' 'rc/gemrc'
         link_if screen 'rc/screenrc'
         link_if tmux 'rc/tmux.conf'
         link_if top 'rc/toprc'
         link_if vim 'rc/vim' 'rc/vimrc'
         link_if weechat 'rc/weechat'
         link_if wget 'rc/wgetrc'
         link_if bash 'rc/bashrc'
         link_if zsh 'rc/zsh' 'rc/zshenv' 'rc/zshrc'
         link_if dircolors 'rc/dir_colors'
         link_if Xorg 'rc/Xsession' 'rc/Xresources'
         link_if -- 'rc/ssh'
         link_if -- 'rc/editrc'
         link_if -- 'rc/inputrc'
     else
         printf "Could not change working directory to '%s'\n" "${DOTFILEZ:-0}"
     fi
 )

+END_SRC

** Login Shell

+BEGIN_SRC sh :exports code

 set -eu
 sudo usermod  --shell "$(which zsh)" "$(whoami)"

+END_SRC

** =/etc/profile.d=

+NAME: dir_colors.sh

+BEGIN_SRC sh :results file silent :file "/sudo::/etc/profile.d/dir_colors.sh" :file-mode (identity #o755)

 if [[ -r ~/.dir_colors ]]; then
     dircolors -b ~/.dir_colors
 else
     printf "%s does not exist\n" ~/.dir_colors >&2
     exit 1
 fi

+END_SRC

** =org-protocol= [[https://orgmode.org/worg/org-contrib/org-protocol.html][=org-protocol=]] intercepts calls from emacsclient to trigger custom actions without external dependencies. Only one protocol has to be configured with your external applications or the operating system, to trigger an arbitrary number of custom actions.

+BEGIN_SRC conf :tangle "~/.local/share/applications/org-protocol.desktop"

 [Desktop Entry]
 Name=org-protocol
 Exec=emacsclient %u
 Type=Application
 Terminal=false
 Categories=System;
 MimeType=x-scheme-handler/org-protocol;

+END_SRC

Afterwards, you must run =update-desktop-database=

+BEGIN_SRC sh

 update-desktop-database "$HOME/.local/share/applications/"

+END_SRC

** =libvirt= =libvirt= will complain about user-sessions hitting a root, I allow any user in =wheel= to do so anyway on my workstation.

+NAME: 80-libvirt.rules

+BEGIN_SRC javascript :tangle "/sudo::/etc/polkit-1/rules.d/80-libvirt.rules"

 polkit.addRule(function(action, subject) {
   if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("wheel")) {
     return polkit.Result.YES;
   }
 });

+END_SRC

** =sudo= :WARN: I like =sudo= to use a single timestamp across all of my login session.

+NAME: /etc/sudoers.d/70_timestamp_timeout

+BEGIN_SRC conf :tangle "/sudo::/etc/sudoers.d/70_timestamp_timeout"

 # Number of minutes that can elapse before sudo will ask for a passwd again.
 # You can create or delete a timestamp with `sudo -v` & `sudo -k` respectively
 Defaults  timestamp_timeout  = 30

 # `global` sets a single time stamp record, regardless of the terminal or parent process ID.
 Defaults  timestamp_type  = global

+END_SRC

** Emacs * Build ** Fedora 33 This adds ~--without-gconf~ & ~--without-gsettings~, as =dconf= & =gconf= breaks font settings in ~$HOME/.emacs~. See [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25228]]

#+BEGIN_SRC sh
  mkdir "$HOME/extern";
  cd "$HOME/extern";
  git clone --depth=1 --branch='emacs-28' 'https://git.savannah.gnu.org/git/emacs.git';
  cd emacs;
  sudo dnf install -y \
      ImageMagick-devel \
      automake \
      gcc \
      gcc-c++ \
      giflib-devel \
      gnutls-devel \
      gpm-devel \
      gtk3-devel \
      harfbuzz-devel \
      jansson-devel \
      libXpm-devel \
      libgccjit-devel \
      libjpeg-turbo-devel \
      libotf-devel \
      librsvg2-devel \
      libtiff-devel \
      make \
      ncurses-devel \
      texinfo \
      webkit2gtk3-devel \
      xorg-x11-proto-devel;
./autogen.sh;
./configure \
    CFLAGS='-pipe -mtune=native -march=native' \
    --with-cairo \
    --with-imagemagick \
    --with-json \
    --with-librsvg \
    --with-modules \
    --with-native-compilation \
    --with-x-toolkit=gtk3 \
    --with-xwidgets \
    --without-gconf \
    --without-gsettings \
    --without-xaw3d;
make -j
#+END_SRC

** Python

*** =IPython= config Rewrites the default ~$HOME/.ipython/profile_default/ipython_config.py~ with my preferred defaults

#+BEGIN_SRC awk :results file :file "~/.ipython/profile_default/ipython_config.py" :exports code
  #!/usr/bin/awk -f

  BEGIN {
      if (ARGC == 1) {
          ARGV[ARGC] = ENVIRON["HOME"] "/.ipython/profile_default/ipython_config.py"
          ARGC = ARGC + 1
      }
  }

  function set_value(new) {
      for (i=0;i<NF;i++) {
          if ($i == "=") {
              printf "%s = %s\n", $(i-1), new
              next
          }
      }
  }

  /^[#]* *c.TerminalIPythonApp.display_banner/ { set_value("False") }
  /^[#]* *c.TerminalInteractiveShell.editing_mode/ { set_value("'vi'") }
  /^[#]* *c.TerminalInteractiveShell.extra_open_editor_shortcuts/ { set_value("True") }
  /^[#]* *c.InteractiveShell.autoindent/ { set_value("True") }
  /^[#]* *c.InteractiveShell.autoawait/ { set_value("True") }
  /^[#]* *c.InteractiveShell.history_length/ { set_value("50000") }
  /^[#]* *c.InteractiveShell.history_load_length/ { set_value("1000") }
  /^[#]* *c.TerminalInteractiveShell.prompt_includes_vi_mode/ { set_value("True") }

  { print }
#+END_SRC

** =noatime= I run my workstation's primary filesystems with the =noatime= option; no longer updating file access times. I rarely care about when files were accessed, usually only caring about it's =mtime= (last modification).

Access times are still useful, rarely justify themselves.

+BEGIN_SRC sh

 sudoedit /etc/fstab # add `noatime` mount option to `/`, `/home`, etc.
 systemctl daemon-reload # ask systemd to regenerate mount units from fstab

+END_SRC

** =udev= =udev= is a device manager for the Linux kernel. As the successor of =devfsd= and =hotplug=, =udev= primarily manages device nodes in the =/dev= directory. At the same time, =udev= also handles all user space events raised while hardware devices are added into the system or removed from it, including firmware loading as required by certain devices.

*** Yubikey Add Yubikey access

#+name: 70-u2f.rules
#+BEGIN_SRC conf :tangle "/sudo::/etc/udev/rules.d/70-u2f.rules"
  # Yubico YubiKey

  KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0200|0402|0403|0406|0407|0410", TAG+="uaccess"
#+END_SRC

*** Wireshark (=usbmon=)

#+name: 90-wireshark-usbmon.rules
#+BEGIN_SRC conf :tangle "/sudo::/etc/udev/rules.d/90-wireshark-usbmon.rules"
  # Wireshark

  SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640"
#+END_SRC

** Nvidia (GeForce/Quadro/Tesla) This driver is suitable for any GPU found in 2012 and later.

+BEGIN_SRC sh

 sudo dnf install "https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
 sudo dnf install -y akmod-nvidia xorg-x11-drv-nvidia-cuda

+END_SRC

Once the module is built, you can check it's installation with ~modinfo -F version nvidia~

** systemd

*** GnuPG You can ensure that the GnuPG daemons =dirmngr= and =gpg-agent= are launched automatically the first time they're needed, and shut down cleanly at session logout by enabling user services via socket-activation:

#+BEGIN_SRC sh
  systemctl --user enable dirmngr.socket gpg-agent.socket gpg-agent-ssh.socket gpg-agent-browser.socket gpg-agent-extra.socket
#+END_SRC

If you'd rather try a socket-activated GnuPG daemon in an already-running session without logging out, kill any existing daemons and start the user socket manually:

#+BEGIN_EXAMPLE

gpgconf --kill dirmngr systemctl --user start dirmngr.socket

+END_EXAMPLE

*** =/etc/systemd/coredump.conf=

#+name: coredump.conf
#+BEGIN_SRC conf :tangle "/sudo::/etc/systemd/coredump.conf"
  # See coredump.conf(5) for details.

  [Coredump]
  #Storage=external
  Compress=yes
  #ProcessSizeMax=2G
  #ExternalSizeMax=2G
  JournalSizeMax=767M
  MaxUse=1G
  #KeepFree=
#+END_SRC

** Gnome *** Settings

+NAME: keybindings.sh

#+BEGIN_SRC sh :results output replace :file keybindings.sh :exports results :shebang "#!/bin/sh" :prologue "set -x"
  print_dconf_heredoc() {
      cat <<OUTER
  dconf load "$1" <<EOF
  $(dconf dump "$1")
  EOF
  OUTER
  }

  print_gsetting() {
      printf 'gsettings set %s %s "%s"\n' "$1" "$2" "$(gsettings get "$1" "$2")"
  }

  # Swap Caps-lock & alt
  print_gsetting org.gnome.desktop.input-sources xkb-options

  # Dump of Gnome window keybindings
  for schema in 'org.gnome.Terminal.Legacy.Settings' \
                    'org.gnome.desktop.wm.keybindings' \
                    'org.gnome.mutter.keybindings' \
                    'org.gnome.settings-daemon.plugins.media-keys'; do
      for key in $(gsettings list-keys "$schema"); do
          print_gsetting "$schema" "$key"
      done
  done

  print_dconf_heredoc /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/
#+END_SRC

#+RESULTS: keybindings.sh
#+begin_example
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:ralt_rctrl', 'ctrl:rctrl_ralt', 'ctrl:nocaps', 'lv3:menu_switch']"
gsettings set org.gnome.Terminal.Legacy.Settings mnemonics-enabled "false"
gsettings set org.gnome.Terminal.Legacy.Settings tab-position "'top'"
gsettings set org.gnome.Terminal.Legacy.Settings headerbar "@mb false"
gsettings set org.gnome.Terminal.Legacy.Settings new-terminal-mode "'window'"
gsettings set org.gnome.Terminal.Legacy.Settings theme-variant "'dark'"
gsettings set org.gnome.Terminal.Legacy.Settings default-show-menubar "false"
gsettings set org.gnome.Terminal.Legacy.Settings shell-integration-enabled "true"
gsettings set org.gnome.Terminal.Legacy.Settings schema-version "uint32 3"
gsettings set org.gnome.Terminal.Legacy.Settings confirm-close "true"
gsettings set org.gnome.Terminal.Legacy.Settings new-tab-position "'last'"
gsettings set org.gnome.Terminal.Legacy.Settings unified-menu "false"
gsettings set org.gnome.Terminal.Legacy.Settings menu-accelerator-enabled "false"
gsettings set org.gnome.Terminal.Legacy.Settings context-info "['numbers']"
gsettings set org.gnome.Terminal.Legacy.Settings shortcuts-enabled "false"
gsettings set org.gnome.Terminal.Legacy.Settings tab-policy "'automatic'"
gsettings set org.gnome.desktop.wm.keybindings switch-group "@as []"
gsettings set org.gnome.desktop.wm.keybindings begin-resize "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7 "['<Super>u']"
gsettings set org.gnome.desktop.wm.keybindings begin-move "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-side-w "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-corner-nw "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-10 "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6 "['<Shift><Super>y']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-right "['<Control><Shift><Alt>Right']"
gsettings set org.gnome.desktop.wm.keybindings always-on-top "@as []"
gsettings set org.gnome.desktop.wm.keybindings toggle-maximized "['<Super>m']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['<Control><Shift><Alt>Left']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8 "['<Super>i']"
gsettings set org.gnome.desktop.wm.keybindings cycle-panels "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-11 "@as []"
gsettings set org.gnome.desktop.wm.keybindings lower "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7 "['<Shift><Super>u']"
gsettings set org.gnome.desktop.wm.keybindings toggle-above "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-down "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-panels "@as []"
gsettings set org.gnome.desktop.wm.keybindings minimize "@as []"
gsettings set org.gnome.desktop.wm.keybindings cycle-windows "['<Super>l']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9 "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-12 "@as []"
gsettings set org.gnome.desktop.wm.keybindings toggle-on-all-workspaces "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8 "['<Shift><Super>i']"
gsettings set org.gnome.desktop.wm.keybindings move-to-side-n "@as []"
gsettings set org.gnome.desktop.wm.keybindings maximize-horizontally "@as []"
gsettings set org.gnome.desktop.wm.keybindings activate-window-menu "@as []"
gsettings set org.gnome.desktop.wm.keybindings set-spew-mark "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings maximize-vertically "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-corner-sw "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9 "@as []"
gsettings set org.gnome.desktop.wm.keybindings maximize "['<Super>Up']"
gsettings set org.gnome.desktop.wm.keybindings panel-main-menu "@as []"
gsettings set org.gnome.desktop.wm.keybindings close "['<Super>c']"
gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-up "@as []"
gsettings set org.gnome.desktop.wm.keybindings raise-or-lower "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-side-e "@as []"
gsettings set org.gnome.desktop.wm.keybindings cycle-windows-backward "['<Super>h']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['<Super>q']"
gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-right "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-windows "@as []"
gsettings set org.gnome.desktop.wm.keybindings panel-run-dialog "['<Super>semicolon']"
gsettings set org.gnome.desktop.wm.keybindings switch-panels-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings unmaximize "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['<Super>w']"
gsettings set org.gnome.desktop.wm.keybindings switch-applications "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-last "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "['<Shift><Super>q']"
gsettings set org.gnome.desktop.wm.keybindings move-to-corner-ne "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['<Super>e']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-up "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-side-s "@as []"
gsettings set org.gnome.desktop.wm.keybindings show-desktop "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-center "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "['<Shift><Super>w']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['<Control><Alt>Left']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['<Control><Alt>Right']"
gsettings set org.gnome.desktop.wm.keybindings raise "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-corner-se "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-10 "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>r']"
gsettings set org.gnome.desktop.wm.keybindings toggle-shaded "@as []"
gsettings set org.gnome.desktop.wm.keybindings cycle-group-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "['<Shift><Super>e']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-down "@as []"
gsettings set org.gnome.desktop.wm.keybindings cycle-panels-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-left "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-11 "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "['<Super>t']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Shift><Super>r']"
gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-down "@as []"
gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['<Super>f']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "['<Super>y']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-12 "@as []"
gsettings set org.gnome.desktop.wm.keybindings cycle-group "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-up "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-last "@as []"
gsettings set org.gnome.desktop.wm.keybindings switch-group-backward "@as []"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5 "['<Shift><Super>t']"
gsettings set org.gnome.mutter.keybindings tab-popup-cancel "@as []"
gsettings set org.gnome.mutter.keybindings tab-popup-select "@as []"
gsettings set org.gnome.mutter.keybindings toggle-tiled-right "['<Shift><Super>l']"
gsettings set org.gnome.mutter.keybindings toggle-tiled-left "['<Shift><Super>h']"
gsettings set org.gnome.mutter.keybindings rotate-monitor "['XF86RotateWindows']"
gsettings set org.gnome.mutter.keybindings switch-monitor "['<Super>p', 'XF86Display']"
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
gsettings set org.gnome.settings-daemon.plugins.media-keys media "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys stop-static "['XF86AudioStop']"
gsettings set org.gnome.settings-daemon.plugins.media-keys eject-static "['XF86Eject']"
gsettings set org.gnome.settings-daemon.plugins.media-keys rotate-video-lock "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-cycle "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys toggle-contrast "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys rotate-video-lock-static "['<Super>o', 'XF86RotationLockToggle']"
gsettings set org.gnome.settings-daemon.plugins.media-keys www "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys window-screenshot-clip "['<Alt><Super>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys battery-status-static "['XF86Battery']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down "['AudioLowerVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-repeat "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys hibernate "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down-precise "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys next "['AudioNext']"
gsettings set org.gnome.settings-daemon.plugins.media-keys suspend "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-toggle-static "['XF86TouchpadToggle', '<Ctrl><Super>XF86TouchpadToggle']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up-quiet "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-up-static "['XF86MonBrightnessUp']"
gsettings set org.gnome.settings-daemon.plugins.media-keys play-static "['XF86AudioPlay', '<Ctrl>XF86AudioPlay']"
gsettings set org.gnome.settings-daemon.plugins.media-keys search-static "['XF86Search']"
gsettings set org.gnome.settings-daemon.plugins.media-keys magnifier-zoom-in "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys area-screenshot-clip "['<Shift><Super>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys mic-mute "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys stop "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys previous "['AudioPrev']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up "['AudioRaiseVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys control-center "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys search "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys calculator "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-step "6"
gsettings set org.gnome.settings-daemon.plugins.media-keys rfkill-static "['XF86WLAN', 'XF86UWB', 'XF86RFKill']"
gsettings set org.gnome.settings-daemon.plugins.media-keys pause-static "['XF86AudioPause']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute-static "['XF86AudioMute']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up-static "['XF86AudioRaiseVolume', '<Ctrl>XF86AudioRaiseVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys calculator-static "['XF86Calculator']"
gsettings set org.gnome.settings-daemon.plugins.media-keys home-static "['XF86Explorer']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-on "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys www-static "['XF86WWW']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute-quiet-static "['<Alt>XF86AudioMute']"
gsettings set org.gnome.settings-daemon.plugins.media-keys magnifier-zoom-out "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down-quiet-static "['<Alt>XF86AudioLowerVolume', '<Alt><Ctrl>XF86AudioLowerVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys window-screenshot "['<Alt>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys power "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys play "['AudioPlay']"
gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length "uint32 30"
gsettings set org.gnome.settings-daemon.plugins.media-keys power-static "['XF86PowerOff']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down-static "['XF86AudioLowerVolume', '<Ctrl>XF86AudioLowerVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-up "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-forward "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-random-static "['XF86AudioRandomPlay']"
gsettings set org.gnome.settings-daemon.plugins.media-keys pause "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-cycle-static "['XF86MonBrightnessCycle']"
gsettings set org.gnome.settings-daemon.plugins.media-keys media-static "['XF86AudioMedia']"
gsettings set org.gnome.settings-daemon.plugins.media-keys hibernate-static "['XF86Suspend', 'XF86Hibernate']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screenshot-clip "['<Super>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys eject "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys email-static "['XF86Mail']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-up "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys rfkill-bluetooth "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-toggle "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-toggle "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys logout "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys help "['', '<Super>F1']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-random "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys area-screenshot "['<Shift>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys decrease-text-size "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up-quiet-static "['<Alt>XF86AudioRaiseVolume', '<Alt><Ctrl>XF86AudioRaiseVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screencast "['<Primary>Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver-static "['XF86ScreenSaver']"
gsettings set org.gnome.settings-daemon.plugins.media-keys email "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down-quiet "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-down-static "['XF86MonBrightnessDown']"
gsettings set org.gnome.settings-daemon.plugins.media-keys increase-text-size "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-off-static "['XF86TouchpadOff']"
gsettings set org.gnome.settings-daemon.plugins.media-keys home "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-rewind-static "['XF86AudioRewind']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screenreader "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-repeat-static "['XF86AudioRepeat']"
gsettings set org.gnome.settings-daemon.plugins.media-keys magnifier "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up-precise "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-rewind "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys suspend-static "['XF86Sleep']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute "['AudioMute']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-toggle-static "['XF86KbdLightOnOff']"
gsettings set org.gnome.settings-daemon.plugins.media-keys mic-mute-static "['XF86AudioMicMute']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up-precise-static "['<Shift>XF86AudioRaiseVolume', '<Ctrl><Shift>XF86AudioRaiseVolume']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-up-static "['XF86KbdBrightnessUp']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screen-brightness-down "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys rfkill "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys playback-forward-static "['XF86AudioForward']"
gsettings set org.gnome.settings-daemon.plugins.media-keys rfkill-bluetooth-static "['XF86Bluetooth']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-down "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver "['<Primary><Shift><Alt><Super>l']"
gsettings set org.gnome.settings-daemon.plugins.media-keys on-screen-keyboard "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys control-center-static "['XF86Tools']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute-quiet "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-off "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys screenshot "['Print']"
gsettings set org.gnome.settings-daemon.plugins.media-keys battery-status "['']"
gsettings set org.gnome.settings-daemon.plugins.media-keys touchpad-on-static "['XF86TouchpadOn']"
gsettings set org.gnome.settings-daemon.plugins.media-keys next-static "['XF86AudioNext', '<Ctrl>XF86AudioNext']"
gsettings set org.gnome.settings-daemon.plugins.media-keys previous-static "['XF86AudioPrev', '<Ctrl>XF86AudioPrev']"
gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-down-static "['XF86KbdBrightnessDown']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down-precise-static "['<Shift>XF86AudioLowerVolume', '<Ctrl><Shift>XF86AudioLowerVolume']"
dconf load "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/" <<EOF
[custom0]
binding='<Super>Return'
command='gnome-terminal'
name='Launch Terminal'
EOF
#+end_example

** =gnome-terminal=

*** Themes This theme is restored by invoking ~dconf load~ with a file containing the contents of the results drawer below (You can automatically generate this file with =org-babel-tangle=)

#+NAME: gnome-terminal-themes.dconf
#+BEGIN_SRC sh :exports results
  dconf dump /org/gnome/terminal/
#+END_SRC

#+RESULTS: gnome-terminal-themes.dconf
#+begin_example
[legacy]
confirm-close=true
default-show-menubar=false
headerbar=@mb false
menu-accelerator-enabled=false
mnemonics-enabled=false
new-tab-position='last'
new-terminal-mode='window'
schema-version=uint32 3
shell-integration-enabled=true
shortcuts-enabled=false
tab-policy='automatic'
tab-position='top'
theme-variant='dark'
unified-menu=false

[legacy/profiles:]
list=['b1dcc9dd-5262-4d8d-a863-c897e6d979b9', '8bfbb274-dc3d-4666-8048-5317058efebe']

[legacy/profiles:/:8bfbb274-dc3d-4666-8048-5317058efebe]
audible-bell=false
background-color='rgb(253,246,227)'
font='Source Code Pro 14'
foreground-color='rgb(101,123,131)'
palette=['rgb(7,54,66)', 'rgb(220,50,47)', 'rgb(133,153,0)', 'rgb(181,137,0)', 'rgb(38,139,210)', 'rgb(211,54,130)', 'rgb(42,161,152)', 'rgb(238,232,213)', 'rgb(0,43,54)', 'rgb(203,75,22)', 'rgb(88,110,117)', 'rgb(101,123,131)', 'rgb(131,148,150)', 'rgb(108,113,196)', 'rgb(147,161,161)', 'rgb(253,246,227)']
scrollback-lines=100000
scrollbar-policy='never'
use-system-font=false
use-theme-colors=false
visible-name='Light'

[legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
audible-bell=false
background-color='rgb(0,43,54)'
font='Source Code Pro 14'
foreground-color='rgb(131,148,150)'
palette=['rgb(7,54,66)', 'rgb(220,50,47)', 'rgb(133,153,0)', 'rgb(181,137,0)', 'rgb(38,139,210)', 'rgb(211,54,130)', 'rgb(42,161,152)', 'rgb(238,232,213)', 'rgb(0,43,54)', 'rgb(203,75,22)', 'rgb(88,110,117)', 'rgb(101,123,131)', 'rgb(131,148,150)', 'rgb(108,113,196)', 'rgb(147,161,161)', 'rgb(253,246,227)']
scrollback-lines=100000
scrollbar-policy='never'
use-system-font=false
use-theme-colors=false
visible-name='Dark'
#+end_example

*** =gtk.css= By default, =gnome-terminal= displays an obscenely tall header bar which I like to disable.

The following CSS file does just that, as well as shrinking the header bar of Gnome applications generally.

#+name: gtk.css
#+BEGIN_SRC css :tangle "~/.config/gtk-3.0/gtk.css"
  VteTerminal,
  TerminalScreen,
  vte-terminal {
    /* XXX: Don't attempt to change this to padding: 5px 0 5px 5px */
    padding-bottom: 0px;
    padding-top: 5px;
    padding-left: 5px;
    padding-right: 5px;
  }

  /* shrink headerbars */
  headerbar {
    min-height: 0px;
    padding-left: 0px; /* same as childrens vertical margins for nicer proportions */
    padding-right: 0px;
  }

  headerbar entry,
  headerbar spinbutton,
  headerbar button,
  headerbar separator {
    margin-top: 0px; /* same as headerbar side padding for nicer proportions */
    margin-bottom: 0px;
  }

  /* shrink ssd titlebars */
  .default-decoration {
    min-height: 0; /* let the entry and button drive the titlebar size */
    padding: 0px;
  }

  .default-decoration .titlebutton {
    min-height: 0px; /* tweak these two props to reduce button size */
    min-width: 0px;
  }

  window.ssd headerbar.titlebar,
  window.ssd headerbar.titlebar button.titlebutton
  {
    padding-top: 0px;
    padding-bottom: 0px;
    min-height: 0;
  }
#+END_SRC

** =NetworkManager= =NetworkManager= is a program for providing detection and configuration for systems to automatically connect to network.

* Use local resolver ** Set ~main.dns~ to =dnsmasq= in =NetworkManager.conf= You must ensure NetworkManager globally enables local resolver =dnsmasq=

 #+NAME: 70-use-dnsmasq.conf
 #+BEGIN_SRC conf :tangle "/sudo::/etc/NetworkManager/conf.d/70-use-dnsmasq.conf"
   [main]
   dns=dnsmasq
 #+END_SRC

**** Add server configuration to ~/etc/NetworkManager/dnsmasq.d~ This will tack on these servers to the list recieved by DHCP.

+NAME: server.conf

 #+BEGIN_SRC conf :tangle "/sudo::/etc/NetworkManager/dnsmasq.d/server.conf"
   # Upstream DNS servers
   server=2606:4700:4700::1001
   server=2001:4860:4860::8844
   server=1.1.1.1
   server=8.8.8.8

   # Increase the cachesize
   cache-size=1500

   # Don't store in cache the invalid resolutions
   no-negcache
 #+END_SRC

** Backup

+NAME: backup

[[file:backup/README.org]]