dotfilez
[[./data/setup.png]]
The setup of my ride has been steadily growing for almost 13 years now. In the vast sea of rc files, =/etc= config clauses, sensitive and public cryptographic key material, documents, default package lists and custom patches that I apply to the systems I run. I had to come up with a way to manage it all in some sane fashion.
Dotfilez is an attempt to keep a configuration framework for my personal use online. You are welcome to modify it if you think it could be useful to you too.
Public Keys ** =authorized_keys=
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCMbMY01S86OnaP7Q5H9kYHeBUdfTsZkGh1AwQC1VJIwXRHdldRigkFxCLR6QJkFVQt5ntruvXwBre1bDF04UveXLLtcq2P5iGZWgQtuVAsZ1DAENR5N+SMZY6DA/aPjg8tzv7lL09pwFkAxfVDWLEZXtcEuuCaaGbW9GH707MBnvMZn8rWD8MEEEflkrtpbTGxjrsubYqGOB9bL3PTEtrKBAhptaIHIhX7tcHBHoWVCNgt47U+zghg4VaJIj/c+TUY+1CUF/QWqfWl6En2JwLqKe8RhH4SqgWMt6WY5XDXurJHNjtlzSCbwf8jrXfSZq+63WLFxqdINyjqedkLSVhl cardno:000603647045 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJZiX9CJyfQ2QYkm9Sh+BRoQVeM5UACdbOhf8PYfrwSC zv-sigstkflt
** GnuPG Key
gpg --export --armor 9358C8BDAAD9A62BB08B9660F6F2D0445DC172F8
[[file:zv.gpg.pub]]
Workstation Setup The following shell & configuration file snippets are intended to be installed with [[https://orgmode.org/worg/org-contrib/babel/][Babel]].
To run an entire sections installation scripts, point your cursor at the appropriate heading and execute =org-babel-execute-subtree= (you can also run each individual step with =org-babel-execute-maybe=). Configuration files are installed separately, using =org-babel-tangle= (=tramp= will prompt you to =sudo=)
** Packages :PROPERTIES: :header-args:sh: :results output replace :exports code :END:
*** =dnf.conf=
sudo dnf config-manager --save --setopt fastestmirror=True
#+END_SRC
*** Base
sudo dnf install -y tmux vim-enhanced zsh
#+END_SRC
*** Development
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
sudo dnf install -y python3 python3-devel python3-ipython python3-epc python3-flake8 python3-importmagic python3-isort python3-mypy python3-yapf
#+END_SRC
*** Desktop
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
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
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
)
** Login Shell
set -eu
sudo usermod --shell "$(which zsh)" "$(whoami)"
** =/etc/profile.d=
if [[ -r ~/.dir_colors ]]; then
dircolors -b ~/.dir_colors
else
printf "%s does not exist\n" ~/.dir_colors >&2
exit 1
fi
** =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.
[Desktop Entry]
Name=org-protocol
Exec=emacsclient %u
Type=Application
Terminal=false
Categories=System;
MimeType=x-scheme-handler/org-protocol;
Afterwards, you must run =update-desktop-database=
update-desktop-database "$HOME/.local/share/applications/"
** =libvirt= =libvirt= will complain about user-sessions hitting a root, I allow any user in =wheel= to do so anyway on my workstation.
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
** =sudo= :WARN: I like =sudo= to use a single timestamp across all of my login session.
# 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
** 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.
sudoedit /etc/fstab # add `noatime` mount option to `/`, `/home`, etc.
systemctl daemon-reload # ask systemd to regenerate mount units from fstab
** =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.
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
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
*** =/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
#+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.
#+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
[[file:backup/README.org]]