aboutsummaryrefslogtreecommitdiff
path: root/home/dot_config
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2026-08-02 14:48:29 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2026-08-02 14:48:29 +0200
commite43eb1177872f52e949fb5f0f93396ed94b0d093 (patch)
tree78b73af6a989fa2996d71b112e161b70d35081ef /home/dot_config
parent2f14a896e4b897bd747c24d7ad8e9e7bb3237d03 (diff)
move to chezmoi
Diffstat (limited to 'home/dot_config')
-rw-r--r--home/dot_config/BetterDiscord/data/stable/custom.css2
-rw-r--r--home/dot_config/BetterDiscord/data/stable/plugins.json1
-rw-r--r--home/dot_config/BetterDiscord/data/stable/settings.json53
-rw-r--r--home/dot_config/BetterDiscord/data/stable/themes.json5
-rw-r--r--home/dot_config/BetterDiscord/themes/flat.theme.css580
-rw-r--r--home/dot_config/X11/base13
-rw-r--r--home/dot_config/bat/config4
-rw-r--r--home/dot_config/clangd/config.yaml9
-rw-r--r--home/dot_config/coc/extensions/package.json22
-rw-r--r--home/dot_config/dircolors177
-rw-r--r--home/dot_config/dunst/base48
-rw-r--r--home/dot_config/fcitx5/conf/classicui.conf35
-rw-r--r--home/dot_config/fcitx5/conf/clipboard.conf8
-rw-r--r--home/dot_config/fcitx5/conf/imselector.conf13
-rw-r--r--home/dot_config/fcitx5/conf/mozc.conf13
-rw-r--r--home/dot_config/fcitx5/conf/private_notifications.conf3
-rw-r--r--home/dot_config/fcitx5/conf/quickphrase.conf10
-rw-r--r--home/dot_config/fcitx5/conf/xcb.conf5
-rw-r--r--home/dot_config/fcitx5/conf/xim.conf3
-rw-r--r--home/dot_config/fcitx5/config75
-rw-r--r--home/dot_config/fcitx5/private_profile29
-rw-r--r--home/dot_config/firefox/chrome/userChrome.css39
-rw-r--r--home/dot_config/firefox/user.js60
-rw-r--r--home/dot_config/flashfocus/flashfocus.yml9
-rw-r--r--home/dot_config/fontconfig/conf.d/10-inter-features.conf14
-rw-r--r--home/dot_config/fontconfig/conf.d/10-sub-pixel-rgb.conf8
-rw-r--r--home/dot_config/fontconfig/fonts.conf30
-rw-r--r--home/dot_config/foot/foot.ini.tmpl6
-rw-r--r--home/dot_config/fzmp/symlink_conf1
-rw-r--r--home/dot_config/gdb/gdbearlyinit1
-rw-r--r--home/dot_config/gdb/gdbinit31
-rw-r--r--home/dot_config/gdb/gdbinit.py52
-rw-r--r--home/dot_config/git/config.tmpl53
-rw-r--r--home/dot_config/gtk-3.0/settings.ini16
-rw-r--r--home/dot_config/gtk-4.0/env6
-rw-r--r--home/dot_config/i3/config.tmpl90
-rw-r--r--home/dot_config/i3/executable_autostart33
-rw-r--r--home/dot_config/imapnotify/pipeframe.conf11
-rw-r--r--home/dot_config/inputrc8
-rw-r--r--home/dot_config/jellyfin-mpv-shim/mpv.conf.tmpl3
-rw-r--r--home/dot_config/jellyfin-mpv-shim/scripts/set-lights.lua6
-rw-r--r--home/dot_config/jellyfin-mpv-shim/scripts/symlink_copy-subs.lua1
-rw-r--r--home/dot_config/jellyfin-mpv-shim/symlink_input.conf1
-rw-r--r--home/dot_config/khal/base14
-rw-r--r--home/dot_config/khal/executable_config_gen105
-rw-r--r--home/dot_config/khal/symlink_config.sh1
-rw-r--r--home/dot_config/khard/base23
-rw-r--r--home/dot_config/khard/executable_config_gen25
-rw-r--r--home/dot_config/khard/symlink_config.sh1
-rw-r--r--home/dot_config/kicad/kicad_common22
-rw-r--r--home/dot_config/kwalletrc4
-rw-r--r--home/dot_config/latexmk/latexmkrc1
-rw-r--r--home/dot_config/lf/lfrc30
-rw-r--r--home/dot_config/mailcap7
-rw-r--r--home/dot_config/mbsyncrc23
-rw-r--r--home/dot_config/mozc/config1.dbbin0 -> 2047 bytes
-rw-r--r--home/dot_config/mozc/dot_gitattributes1
-rw-r--r--home/dot_config/mozc/keymap.tsv56
-rw-r--r--home/dot_config/mozc/user_dictionary.dbbin0 -> 486 bytes
-rw-r--r--home/dot_config/mpcplus/fzmp.conf3
-rw-r--r--home/dot_config/mpd/mpd.conf.tmpl45
-rw-r--r--home/dot_config/mpv/input.conf4
-rw-r--r--home/dot_config/mpv/mpv.conf15
-rw-r--r--home/dot_config/mpv/scripts/copy-subs.lua32
-rw-r--r--home/dot_config/ncmpcpp/bindings52
-rw-r--r--home/dot_config/ncmpcpp/config.tmpl37
-rw-r--r--home/dot_config/neomutt/neomuttrc82
-rw-r--r--home/dot_config/neovide/config.toml1
-rw-r--r--home/dot_config/nvim/coc-settings.json44
-rw-r--r--home/dot_config/nvim/color-tweaks.vim41
-rw-r--r--home/dot_config/nvim/ftplugin/tex.vim5
-rw-r--r--home/dot_config/nvim/init.vim409
-rw-r--r--home/dot_config/nvim/mode.vim9
-rw-r--r--home/dot_config/pam-gnupg.tmpl2
-rw-r--r--home/dot_config/picom.conf132
-rw-r--r--home/dot_config/pipewire/pipewire.conf.d/50-bitrate.conf5
-rw-r--r--home/dot_config/poke/pokerc.conf7
-rw-r--r--home/dot_config/polybar/config.ini.tmpl169
-rw-r--r--home/dot_config/ranger/rc.conf8
-rw-r--r--home/dot_config/rofi-pass/config25
-rw-r--r--home/dot_config/rofi-pass/rofi.rasi16
-rw-r--r--home/dot_config/rofi/config.rasi.tmpl69
-rw-r--r--home/dot_config/sxiv/exec/executable_image-info6
-rw-r--r--home/dot_config/systemd/user/default.target.wants/symlink_goimapnotify@pipeframe.service1
-rw-r--r--home/dot_config/systemd/user/default.target.wants/symlink_mpd.service1
-rw-r--r--home/dot_config/systemd/user/default.target.wants/symlink_pipewire-pulse.service1
-rw-r--r--home/dot_config/systemd/user/default.target.wants/symlink_pipewire.service1
-rw-r--r--home/dot_config/systemd/user/mbsync.service7
-rw-r--r--home/dot_config/systemd/user/mbsync.timer11
-rw-r--r--home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber.service1
-rw-r--r--home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber@loek.service1
-rw-r--r--home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire-pulse.socket1
-rw-r--r--home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire.socket1
-rw-r--r--home/dot_config/systemd/user/timers.target.wants/symlink_mbsync.timer1
-rw-r--r--home/dot_config/todoman/config.py5
-rw-r--r--home/dot_config/user-dirs.dirs15
-rw-r--r--home/dot_config/vdirsyncer/config.sh.example31
-rw-r--r--home/dot_config/vdirsyncer/executable_config_gen111
-rw-r--r--home/dot_config/wgetrc.tmpl1
-rw-r--r--home/dot_config/winapps/winapps.conf15
-rw-r--r--home/dot_config/wireplumber/wireplumber.conf.d/50-bluez.conf5
-rw-r--r--home/dot_config/wireplumber/wireplumber.conf.d/50-disable-suspend.conf30
-rw-r--r--home/dot_config/wireplumber/wireplumber.conf.d/50-mpv-fix.conf14
-rw-r--r--home/dot_config/xbindkeys/main128
-rw-r--r--home/dot_config/xsettingsd/xsettingsd.conf4
-rw-r--r--home/dot_config/yadm/config3
-rw-r--r--home/dot_config/yadm/executable_bootstrap84
-rw-r--r--home/dot_config/yadm/executable_install-arch12
-rw-r--r--home/dot_config/yadm/hooks/executable_post_pull2
-rw-r--r--home/dot_config/yadm/lib/bootstrap22
-rw-r--r--home/dot_config/yadm/packages-arch125
-rw-r--r--home/dot_config/yadm/root/etc/NetworkManager/dispatcher.d/executable_70-auto-wifi.sh21
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/00-keyboard.conf9
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/40-trackpad.conf9
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/50-mouse-acceleration.conf8
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/72-wacom-options.conf11
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-logitech.conf8
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-wacom.conf9
-rw-r--r--home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-wacom-overrides.conf7
-rw-r--r--home/dot_config/yadm/root/etc/containers/empty_nodocker0
-rw-r--r--home/dot_config/yadm/root/etc/default/earlyoom1
-rw-r--r--home/dot_config/yadm/root/etc/kernel/cmdline1
-rw-r--r--home/dot_config/yadm/root/etc/libinput/local-overrides.quirks4
-rw-r--r--home/dot_config/yadm/root/etc/lightdm/executable_autorandr-change5
-rw-r--r--home/dot_config/yadm/root/etc/lightdm/lightdm-gtk-greeter.conf8
-rw-r--r--home/dot_config/yadm/root/etc/locale.conf2
-rw-r--r--home/dot_config/yadm/root/etc/locale.gen3
-rw-r--r--home/dot_config/yadm/root/etc/logid.cfg13
-rw-r--r--home/dot_config/yadm/root/etc/sudoers.d/10-wheel-nopasswd4
-rw-r--r--home/dot_config/yadm/root/etc/systemd/logind.conf.d/10-laptop-lid.conf4
-rw-r--r--home/dot_config/yadm/root/etc/udev/hwdb.d/71-logitech-mx3.hwdb3
-rw-r--r--home/dot_config/yadm/root/etc/udev/rules.d/90-backlight.rules1
-rw-r--r--home/dot_config/yadm/root/etc/udev/rules.d/99-capture-card.rules3
-rw-r--r--home/dot_config/yadm/root/etc/xdg/nvim/init.vim2
-rw-r--r--home/dot_config/yadm/root/executable_bootstrap95
-rw-r--r--home/dot_config/zathura/zathurarc16
136 files changed, 3999 insertions, 0 deletions
diff --git a/home/dot_config/BetterDiscord/data/stable/custom.css b/home/dot_config/BetterDiscord/data/stable/custom.css
new file mode 100644
index 0000000..c2a6d52
--- /dev/null
+++ b/home/dot_config/BetterDiscord/data/stable/custom.css
@@ -0,0 +1,2 @@
+li:has(a[href="/shop"]) { display: none; }
+li:has(a[href="/store"]) { display: none; } \ No newline at end of file
diff --git a/home/dot_config/BetterDiscord/data/stable/plugins.json b/home/dot_config/BetterDiscord/data/stable/plugins.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/home/dot_config/BetterDiscord/data/stable/plugins.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/home/dot_config/BetterDiscord/data/stable/settings.json b/home/dot_config/BetterDiscord/data/stable/settings.json
new file mode 100644
index 0000000..bf9a764
--- /dev/null
+++ b/home/dot_config/BetterDiscord/data/stable/settings.json
@@ -0,0 +1,53 @@
+{
+ "general": {
+ "voiceDisconnect": false,
+ "showToasts": true,
+ "mediaKeys": false,
+ "themeAttributes": true,
+ "notificationPosition": "top-right",
+ "notificationEnabled": true
+ },
+ "addons": {
+ "addonErrors": true,
+ "editAction": "detached",
+ "checkForUpdates": true,
+ "updateInterval": 4
+ },
+ "store": {
+ "bdAddonStore": true,
+ "alwaysEnable": false,
+ "addonEmbeds": true
+ },
+ "customcss": {
+ "customcss": true,
+ "liveUpdate": true,
+ "openAction": "settings"
+ },
+ "editor": {
+ "theme": "system",
+ "lineNumbers": true,
+ "minimap": true,
+ "hover": true,
+ "quickSuggestions": true,
+ "insertSpaces": false,
+ "tabSize": 4,
+ "fontSize": 14,
+ "renderWhitespace": "selection"
+ },
+ "window": {
+ "transparency": false,
+ "removeMinimumSize": true,
+ "frame": false,
+ "inAppTrafficLights": false
+ },
+ "developer": {
+ "debugLogs": false,
+ "devTools": true,
+ "debuggerHotkey": false,
+ "reactDevTools": false,
+ "inspectElement": false,
+ "devToolsWarning": false,
+ "recovery": true,
+ "canary": false
+ }
+} \ No newline at end of file
diff --git a/home/dot_config/BetterDiscord/data/stable/themes.json b/home/dot_config/BetterDiscord/data/stable/themes.json
new file mode 100644
index 0000000..3afcd03
--- /dev/null
+++ b/home/dot_config/BetterDiscord/data/stable/themes.json
@@ -0,0 +1,5 @@
+{
+ "Horizontal Server List": true,
+ "flat": true,
+ "mode": true
+} \ No newline at end of file
diff --git a/home/dot_config/BetterDiscord/themes/flat.theme.css b/home/dot_config/BetterDiscord/themes/flat.theme.css
new file mode 100644
index 0000000..fdac8d1
--- /dev/null
+++ b/home/dot_config/BetterDiscord/themes/flat.theme.css
@@ -0,0 +1,580 @@
+/**
+ * @name flat
+ * @author lonkaars
+ * @version 0
+*/
+
+/** this is a lazy theme, do not report bugs */
+
+.theme-darker {
+
+ --app-frame-border: var(--background-primary) !important;
+ --background-base-low: var(--background-primary) !important;
+ --background-base-lower: var(--background-primary) !important;
+ --background-base-lowest: var(--background-primary) !important;
+ --card-background-default: var(--background-primary) !important;
+ --chat-background-default: var(--background-primary) !important;
+ --background-surface-high: var(--background-primary) !important;
+
+ --background-mod-subtle: var(--background-secondary) !important;
+
+ --background-mod-muted: var(--background-tertiary) !important;
+ --background-mod-normal: var(--background-tertiary) !important;
+ --interactive-background-hover: var(--background-tertiary) !important;
+ --interactive-background-selected: var(--background-tertiary) !important;
+
+ --text-default: var(--text-primary) !important;
+
+ /* --ansi-black: #ff00ff !important; */
+ /* --ansi-blue: #ff00ff !important; */
+ /* --ansi-bright-black: #ff00ff !important; */
+ /* --ansi-bright-blue: #ff00ff !important; */
+ /* --ansi-bright-cyan: #ff00ff !important; */
+ /* --ansi-bright-green: #ff00ff !important; */
+ /* --ansi-bright-magenta: #ff00ff !important; */
+ /* --ansi-bright-red: #ff00ff !important; */
+ /* --ansi-bright-white: #ff00ff !important; */
+ /* --ansi-bright-yellow: #ff00ff !important; */
+ /* --ansi-cyan: #ff00ff !important; */
+ /* --ansi-green: #ff00ff !important; */
+ /* --ansi-magenta: #ff00ff !important; */
+ /* --ansi-red: #ff00ff !important; */
+ /* --ansi-white: #ff00ff !important; */
+ /* --ansi-yellow: #ff00ff !important; */
+ /* --app-frame-background: #ff00ff !important; */
+ /* --app-frame-border: #ff00ff !important; */
+ /* --app-message-embed-secondary-text: #ff00ff !important; */
+ /* --background-accent: #ff00ff !important; */
+ /* --background-brand: #ff00ff !important; */
+ /* --background-code-addition: #ff00ff !important; */
+ /* --background-code-deletion: #ff00ff !important; */
+ /* --background-code: #ff00ff !important; */
+ /* --background-feedback-critical: #ff00ff !important; */
+ /* --background-feedback-info: #ff00ff !important; */
+ /* --background-feedback-notification: #ff00ff !important; */
+ /* --background-feedback-positive: #ff00ff !important; */
+ /* --background-feedback-warning: #ff00ff !important; */
+ /* --background-scrim-lightbox: #ff00ff !important; */
+ /* --background-scrim: #ff00ff !important; */
+ /* --background-secondary-alt: #ff00ff !important; */
+ /* --background-surface-higher: #ff00ff !important; */
+ /* --background-surface-highest: #ff00ff !important; */
+ /* --background-tile-gradient-pink-end: #ff00ff !important; */
+ /* --background-tile-gradient-pink-start: #ff00ff !important; */
+ /* --background-voice-muted: #ff00ff !important; */
+ /* --badge-background-brand: #ff00ff !important; */
+ /* --badge-background-default: #ff00ff !important; */
+ /* --badge-common-background: #ff00ff !important; */
+ /* --badge-common-border: #ff00ff !important; */
+ /* --badge-common-text: #ff00ff !important; */
+ /* --badge-epic-background: #ff00ff !important; */
+ /* --badge-epic-border-gradient-end: #ff00ff !important; */
+ /* --badge-epic-border-gradient-start: #ff00ff !important; */
+ /* --badge-epic-text: #ff00ff !important; */
+ /* --badge-expressive-background-default: #ff00ff !important; */
+ /* --badge-expressive-text-default: #ff00ff !important; */
+ /* --badge-mythic-background: #ff00ff !important; */
+ /* --badge-mythic-border-gradient-end: #ff00ff !important; */
+ /* --badge-mythic-border-gradient-start: #ff00ff !important; */
+ /* --badge-mythic-text: #ff00ff !important; */
+ /* --badge-notification-background: #ff00ff !important; */
+ /* --badge-rare-background: #ff00ff !important; */
+ /* --badge-rare-border-gradient-end: #ff00ff !important; */
+ /* --badge-rare-border-gradient-start: #ff00ff !important; */
+ /* --badge-rare-text: #ff00ff !important; */
+ /* --badge-text-brand: #ff00ff !important; */
+ /* --badge-text-default: #ff00ff !important; */
+ /* --bg-surface-raised: #ff00ff !important; */
+ /* --border-feedback-critical: #ff00ff !important; */
+ /* --border-feedback-info: #ff00ff !important; */
+ /* --border-feedback-positive: #ff00ff !important; */
+ /* --border-feedback-warning: #ff00ff !important; */
+ /* --border-focus: #ff00ff !important; */
+ /* --border-muted: #ff00ff !important; */
+ /* --border-normal: #ff00ff !important; */
+ /* --border-strong: #ff00ff !important; */
+ /* --border-subtle: #ff00ff !important; */
+ /* --border-voice-muted: #ff00ff !important; */
+ /* --button-danger-background-disabled: #ff00ff !important; */
+ /* --button-outline-brand-background-hover: #ff00ff !important; */
+ /* --button-outline-brand-border-active: #ff00ff !important; */
+ /* --button-outline-primary-text: #ff00ff !important; */
+ /* --card-border-default: #ff00ff !important; */
+ /* --card-primary-pressed-bg: #ff00ff !important; */
+ /* --card-secondary-bg: #ff00ff !important; */
+ /* --card-secondary-pressed-bg: #ff00ff !important; */
+ /* --channel-background-default: #ff00ff !important; */
+ /* --channel-icon: #ff00ff !important; */
+ /* --channel-text-area-placeholder: #ff00ff !important; */
+ /* --channels-default: #ff00ff !important; */
+ /* --channeltextarea-background: #ff00ff !important; */
+ /* --chart-brand: #ff00ff !important; */
+ /* --chart-categorical-10: #ff00ff !important; */
+ /* --chart-categorical-1: #ff00ff !important; */
+ /* --chart-categorical-2: #ff00ff !important; */
+ /* --chart-categorical-3: #ff00ff !important; */
+ /* --chart-categorical-4: #ff00ff !important; */
+ /* --chart-categorical-5: #ff00ff !important; */
+ /* --chart-categorical-6: #ff00ff !important; */
+ /* --chart-categorical-7: #ff00ff !important; */
+ /* --chart-categorical-8: #ff00ff !important; */
+ /* --chart-categorical-9: #ff00ff !important; */
+ /* --chart-mono-1: #ff00ff !important; */
+ /* --chart-mono-2: #ff00ff !important; */
+ /* --chart-mono-3: #ff00ff !important; */
+ /* --chart-mono-4: #ff00ff !important; */
+ /* --chart-mono-5: #ff00ff !important; */
+ /* --chart-mono-6: #ff00ff !important; */
+ /* --chart-mono-7: #ff00ff !important; */
+ /* --chart-mono-text-1: #ff00ff !important; */
+ /* --chart-mono-text-2: #ff00ff !important; */
+ /* --chart-mono-text-3: #ff00ff !important; */
+ /* --chart-mono-text-4: #ff00ff !important; */
+ /* --chart-mono-text-5: #ff00ff !important; */
+ /* --chart-mono-text-6: #ff00ff !important; */
+ /* --chart-mono-text-7: #ff00ff !important; */
+ /* --chart-negative: #ff00ff !important; */
+ /* --chart-neutral: #ff00ff !important; */
+ /* --chart-positive: #ff00ff !important; */
+ /* --chat-background-default: #ff00ff !important; */
+ /* --chat-background: #ff00ff !important; */
+ /* --chat-border: #ff00ff !important; */
+ /* --chat-text-muted: #ff00ff !important; */
+ /* --checkbox-background-active: #ff00ff !important; */
+ /* --checkbox-background-default: #ff00ff !important; */
+ /* --checkbox-background-hover: #ff00ff !important; */
+ /* --checkbox-background-selected-default: #ff00ff !important; */
+ /* --checkbox-background-selected-hover: #ff00ff !important; */
+ /* --checkbox-border-active: #ff00ff !important; */
+ /* --checkbox-border-default: #ff00ff !important; */
+ /* --checkbox-border-hover: #ff00ff !important; */
+ /* --checkbox-border-selected-default: #ff00ff !important; */
+ /* --checkbox-border-selected-hover: #ff00ff !important; */
+ /* --checkbox-icon-active: #ff00ff !important; */
+ /* --chip-blurple-dark-background: #ff00ff !important; */
+ /* --chip-blurple-dark-text: #ff00ff !important; */
+ /* --chip-blurple-light-background: #ff00ff !important; */
+ /* --chip-blurple-light-text: #ff00ff !important; */
+ /* --chip-blurple-medium-background: #ff00ff !important; */
+ /* --chip-blurple-medium-text: #ff00ff !important; */
+ /* --chip-gray-dark-background: #ff00ff !important; */
+ /* --chip-gray-dark-text: #ff00ff !important; */
+ /* --chip-gray-light-background: #ff00ff !important; */
+ /* --chip-gray-light-text: #ff00ff !important; */
+ /* --chip-gray-medium-background: #ff00ff !important; */
+ /* --chip-gray-medium-text: #ff00ff !important; */
+ /* --chip-green-dark-background: #ff00ff !important; */
+ /* --chip-green-dark-text: #ff00ff !important; */
+ /* --chip-green-light-background: #ff00ff !important; */
+ /* --chip-green-light-text: #ff00ff !important; */
+ /* --chip-green-medium-background: #ff00ff !important; */
+ /* --chip-green-medium-text: #ff00ff !important; */
+ /* --chip-orange-dark-background: #ff00ff !important; */
+ /* --chip-orange-dark-text: #ff00ff !important; */
+ /* --chip-orange-light-background: #ff00ff !important; */
+ /* --chip-orange-light-text: #ff00ff !important; */
+ /* --chip-orange-medium-background: #ff00ff !important; */
+ /* --chip-orange-medium-text: #ff00ff !important; */
+ /* --chip-pink-dark-background: #ff00ff !important; */
+ /* --chip-pink-dark-text: #ff00ff !important; */
+ /* --chip-pink-light-background: #ff00ff !important; */
+ /* --chip-pink-light-text: #ff00ff !important; */
+ /* --chip-pink-medium-background: #ff00ff !important; */
+ /* --chip-pink-medium-text: #ff00ff !important; */
+ /* --chip-purple-dark-background: #ff00ff !important; */
+ /* --chip-purple-dark-text: #ff00ff !important; */
+ /* --chip-purple-light-background: #ff00ff !important; */
+ /* --chip-purple-light-text: #ff00ff !important; */
+ /* --chip-purple-medium-background: #ff00ff !important; */
+ /* --chip-purple-medium-text: #ff00ff !important; */
+ /* --chip-red-dark-background: #ff00ff !important; */
+ /* --chip-red-dark-text: #ff00ff !important; */
+ /* --chip-red-light-background: #ff00ff !important; */
+ /* --chip-red-light-text: #ff00ff !important; */
+ /* --chip-red-medium-background: #ff00ff !important; */
+ /* --chip-red-medium-text: #ff00ff !important; */
+ /* --chip-yellow-dark-background: #ff00ff !important; */
+ /* --chip-yellow-dark-text: #ff00ff !important; */
+ /* --chip-yellow-light-background: #ff00ff !important; */
+ /* --chip-yellow-light-text: #ff00ff !important; */
+ /* --chip-yellow-medium-background: #ff00ff !important; */
+ /* --chip-yellow-medium-text: #ff00ff !important; */
+ /* --collectibles-tab-gradient-center: #ff00ff !important; */
+ /* --collectibles-tab-gradient-inner: #ff00ff !important; */
+ /* --collectibles-tab-gradient-outer: #ff00ff !important; */
+ /* --content-inventory-media-seekbar-container: #ff00ff !important; */
+ /* --content-inventory-overlay-text-primary: #ff00ff !important; */
+ /* --content-inventory-overlay-text-secondary: #ff00ff !important; */
+ /* --context-menu-backdrop-background: #ff00ff !important; */
+ /* --control-brand-foreground-new: #ff00ff !important; */
+ /* --control-brand-foreground: #ff00ff !important; */
+ /* --control-connected-background-active: #ff00ff !important; */
+ /* --control-connected-background-default: #ff00ff !important; */
+ /* --control-connected-background-hover: #ff00ff !important; */
+ /* --control-connected-border-active: #ff00ff !important; */
+ /* --control-connected-border-default: #ff00ff !important; */
+ /* --control-connected-border-hover: #ff00ff !important; */
+ /* --control-connected-icon-active: #ff00ff !important; */
+ /* --control-connected-icon-default: #ff00ff !important; */
+ /* --control-connected-icon-hover: #ff00ff !important; */
+ /* --control-connected-text-active: #ff00ff !important; */
+ /* --control-connected-text-default: #ff00ff !important; */
+ /* --control-connected-text-hover: #ff00ff !important; */
+ /* --control-critical-primary-background-active: #ff00ff !important; */
+ /* --control-critical-primary-background-default: #ff00ff !important; */
+ /* --control-critical-primary-background-hover: #ff00ff !important; */
+ /* --control-critical-primary-border-active: #ff00ff !important; */
+ /* --control-critical-primary-border-default: #ff00ff !important; */
+ /* --control-critical-primary-border-hover: #ff00ff !important; */
+ /* --control-critical-primary-icon-active: #ff00ff !important; */
+ /* --control-critical-primary-icon-default: #ff00ff !important; */
+ /* --control-critical-primary-icon-hover: #ff00ff !important; */
+ /* --control-critical-primary-text-active: #ff00ff !important; */
+ /* --control-critical-primary-text-default: #ff00ff !important; */
+ /* --control-critical-primary-text-hover: #ff00ff !important; */
+ /* --control-critical-secondary-background-active: #ff00ff !important; */
+ /* --control-critical-secondary-background-default: #ff00ff !important; */
+ /* --control-critical-secondary-background-hover: #ff00ff !important; */
+ /* --control-critical-secondary-border-active: #ff00ff !important; */
+ /* --control-critical-secondary-border-default: #ff00ff !important; */
+ /* --control-critical-secondary-border-hover: #ff00ff !important; */
+ /* --control-critical-secondary-icon-active: #ff00ff !important; */
+ /* --control-critical-secondary-icon-default: #ff00ff !important; */
+ /* --control-critical-secondary-icon-hover: #ff00ff !important; */
+ /* --control-critical-secondary-text-active: #ff00ff !important; */
+ /* --control-critical-secondary-text-default: #ff00ff !important; */
+ /* --control-critical-secondary-text-hover: #ff00ff !important; */
+ /* --control-expressive-background-active: #ff00ff !important; */
+ /* --control-expressive-background-default: #ff00ff !important; */
+ /* --control-expressive-background-hover: #ff00ff !important; */
+ /* --control-expressive-border-active: #ff00ff !important; */
+ /* --control-expressive-border-default: #ff00ff !important; */
+ /* --control-expressive-border-hover: #ff00ff !important; */
+ /* --control-expressive-icon-active: #ff00ff !important; */
+ /* --control-expressive-icon-default: #ff00ff !important; */
+ /* --control-expressive-icon-hover: #ff00ff !important; */
+ /* --control-expressive-text-active: #ff00ff !important; */
+ /* --control-expressive-text-default: #ff00ff !important; */
+ /* --control-expressive-text-hover: #ff00ff !important; */
+ /* --control-icon-only-background-active: #ff00ff !important; */
+ /* --control-icon-only-background-hover: #ff00ff !important; */
+ /* --control-icon-only-border-active: #ff00ff !important; */
+ /* --control-icon-only-border-hover: #ff00ff !important; */
+ /* --control-icon-only-icon-active: #ff00ff !important; */
+ /* --control-icon-only-icon-default: #ff00ff !important; */
+ /* --control-icon-only-icon-hover: #ff00ff !important; */
+ /* --control-overlay-primary-background-active: #ff00ff !important; */
+ /* --control-overlay-primary-background-default: #ff00ff !important; */
+ /* --control-overlay-primary-background-hover: #ff00ff !important; */
+ /* --control-overlay-primary-border-active: #ff00ff !important; */
+ /* --control-overlay-primary-border-default: #ff00ff !important; */
+ /* --control-overlay-primary-border-hover: #ff00ff !important; */
+ /* --control-overlay-primary-icon-active: #ff00ff !important; */
+ /* --control-overlay-primary-icon-default: #ff00ff !important; */
+ /* --control-overlay-primary-icon-hover: #ff00ff !important; */
+ /* --control-overlay-primary-text-active: #ff00ff !important; */
+ /* --control-overlay-primary-text-default: #ff00ff !important; */
+ /* --control-overlay-primary-text-hover: #ff00ff !important; */
+ /* --control-overlay-secondary-background-active: #ff00ff !important; */
+ /* --control-overlay-secondary-background-default: #ff00ff !important; */
+ /* --control-overlay-secondary-background-hover: #ff00ff !important; */
+ /* --control-overlay-secondary-border-active: #ff00ff !important; */
+ /* --control-overlay-secondary-border-default: #ff00ff !important; */
+ /* --control-overlay-secondary-border-hover: #ff00ff !important; */
+ /* --control-overlay-secondary-icon-active: #ff00ff !important; */
+ /* --control-overlay-secondary-icon-default: #ff00ff !important; */
+ /* --control-overlay-secondary-icon-hover: #ff00ff !important; */
+ /* --control-overlay-secondary-text-active: #ff00ff !important; */
+ /* --control-overlay-secondary-text-default: #ff00ff !important; */
+ /* --control-overlay-secondary-text-hover: #ff00ff !important; */
+ /* --control-primary-background-active: #ff00ff !important; */
+ /* --control-primary-background-default: #ff00ff !important; */
+ /* --control-primary-background-hover: #ff00ff !important; */
+ /* --control-primary-border-active: #ff00ff !important; */
+ /* --control-primary-border-default: #ff00ff !important; */
+ /* --control-primary-border-hover: #ff00ff !important; */
+ /* --control-primary-icon-active: #ff00ff !important; */
+ /* --control-primary-icon-default: #ff00ff !important; */
+ /* --control-primary-icon-hover: #ff00ff !important; */
+ /* --control-primary-text-active: #ff00ff !important; */
+ /* --control-primary-text-default: #ff00ff !important; */
+ /* --control-primary-text-hover: #ff00ff !important; */
+ /* --control-secondary-background-active: #ff00ff !important; */
+ /* --control-secondary-background-default: #ff00ff !important; */
+ /* --control-secondary-background-hover: #ff00ff !important; */
+ /* --control-secondary-border-active: #ff00ff !important; */
+ /* --control-secondary-border-default: #ff00ff !important; */
+ /* --control-secondary-border-hover: #ff00ff !important; */
+ /* --control-secondary-icon-active: #ff00ff !important; */
+ /* --control-secondary-icon-default: #ff00ff !important; */
+ /* --control-secondary-icon-hover: #ff00ff !important; */
+ /* --control-secondary-text-active: #ff00ff !important; */
+ /* --control-secondary-text-default: #ff00ff !important; */
+ /* --control-secondary-text-hover: #ff00ff !important; */
+ /* --creator-revenue-icon-gradient-end: #ff00ff !important; */
+ /* --creator-revenue-icon-gradient-start: #ff00ff !important; */
+ /* --creator-revenue-info-box-background: #ff00ff !important; */
+ /* --creator-revenue-info-box-border: #ff00ff !important; */
+ /* --creator-revenue-locked-channel-icon: #ff00ff !important; */
+ /* --creator-revenue-progress-bar: #ff00ff !important; */
+ /* --datepicker-range-background-default: #ff00ff !important; */
+ /* --datepicker-range-background-hover: #ff00ff !important; */
+ /* --embed-background-alternate: #ff00ff !important; */
+ /* --embed-background: #ff00ff !important; */
+ /* --experimental-avatar-embed-bg: #ff00ff !important; */
+ /* --expressive-gradient-blue-end: #ff00ff !important; */
+ /* --expressive-gradient-blue-start: #ff00ff !important; */
+ /* --expressive-gradient-green-end: #ff00ff !important; */
+ /* --expressive-gradient-green-start: #ff00ff !important; */
+ /* --expressive-gradient-nitro-green-end: #ff00ff !important; */
+ /* --expressive-gradient-nitro-green-start: #ff00ff !important; */
+ /* --expressive-gradient-nitro-pink-end: #ff00ff !important; */
+ /* --expressive-gradient-nitro-pink-start: #ff00ff !important; */
+ /* --expressive-gradient-pink-end: #ff00ff !important; */
+ /* --expressive-gradient-pink-start: #ff00ff !important; */
+ /* --expressive-gradient-purple-end: #ff00ff !important; */
+ /* --expressive-gradient-purple-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-bronze-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-bronze-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-diamond-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-diamond-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-emerald-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-emerald-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-gold-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-gold-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-opal-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-opal-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-platinum-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-platinum-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-ruby-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-ruby-start: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-silver-end: #ff00ff !important; */
+ /* --expressive-gradient-tenure-badge-silver-start: #ff00ff !important; */
+ /* --gradient-progress-pill-background: #ff00ff !important; */
+ /* --guild-profile-banner-background-default: #ff00ff !important; */
+ /* --home-background: #ff00ff !important; */
+ /* --icon-default: #ff00ff !important; */
+ /* --icon-feedback-critical: #ff00ff !important; */
+ /* --icon-feedback-info: #ff00ff !important; */
+ /* --icon-feedback-notification: #ff00ff !important; */
+ /* --icon-feedback-positive: #ff00ff !important; */
+ /* --icon-feedback-warning: #ff00ff !important; */
+ /* --icon-invert: #ff00ff !important; */
+ /* --icon-link: #ff00ff !important; */
+ /* --icon-muted: #ff00ff !important; */
+ /* --icon-overlay-dark: #ff00ff !important; */
+ /* --icon-overlay-light: #ff00ff !important; */
+ /* --icon-status-dnd: #ff00ff !important; */
+ /* --icon-status-idle: #ff00ff !important; */
+ /* --icon-status-offline: #ff00ff !important; */
+ /* --icon-status-online: #ff00ff !important; */
+ /* --icon-strong: #ff00ff !important; */
+ /* --icon-subtle: #ff00ff !important; */
+ /* --icon-transparent: #ff00ff !important; */
+ /* --icon-voice-connected: #ff00ff !important; */
+ /* --icon-voice-disconnected: #ff00ff !important; */
+ /* --icon-voice-muted: #ff00ff !important; */
+ /* --icon-voice-speaking: #ff00ff !important; */
+ /* --inlinenotice-border-critical: #ff00ff !important; */
+ /* --inlinenotice-border-info: #ff00ff !important; */
+ /* --inlinenotice-border-positive: #ff00ff !important; */
+ /* --inlinenotice-border-warning: #ff00ff !important; */
+ /* --input-background-default: #ff00ff !important; */
+ /* --input-background-error-default: #ff00ff !important; */
+ /* --input-border-active: #ff00ff !important; */
+ /* --input-border-default: #ff00ff !important; */
+ /* --input-border-error-default: #ff00ff !important; */
+ /* --input-border-hover: #ff00ff !important; */
+ /* --input-border-readonly: #ff00ff !important; */
+ /* --input-icon-default: #ff00ff !important; */
+ /* --input-placeholder-text-default: #ff00ff !important; */
+ /* --input-text-default: #ff00ff !important; */
+ /* --input-text-error-default: #ff00ff !important; */
+ /* --interactive-accent-background-active: #ff00ff !important; */
+ /* --interactive-accent-background-default: #ff00ff !important; */
+ /* --interactive-accent-background-hover: #ff00ff !important; */
+ /* --interactive-accent-background-selected: #ff00ff !important; */
+ /* --interactive-background-active: #ff00ff !important; */
+ /* --interactive-background-hover: #ff00ff !important; */
+ /* --interactive-icon-active: #ff00ff !important; */
+ /* --interactive-icon-default: #ff00ff !important; */
+ /* --interactive-icon-hover: #ff00ff !important; */
+ /* --interactive-muted: #ff00ff !important; */
+ /* --interactive-text-active: #ff00ff !important; */
+ /* --interactive-text-default: #ff00ff !important; */
+ /* --interactive-text-hover: #ff00ff !important; */
+ /* --keyword-highlight-background: #ff00ff !important; */
+ /* --logo-primary: #ff00ff !important; */
+ /* --mention-background: #ff00ff !important; */
+ /* --mention-foreground: #ff00ff !important; */
+ /* --message-automod-background-default: #ff00ff !important; */
+ /* --message-automod-background-hover: #ff00ff !important; */
+ /* --message-background-hover: #ff00ff !important; */
+ /* --message-highlight-background-default: #ff00ff !important; */
+ /* --message-highlight-background-hover: #ff00ff !important; */
+ /* --message-mentioned-background-default: #ff00ff !important; */
+ /* --message-mentioned-background-hover: #ff00ff !important; */
+ /* --mobile-background-scrim-opaque: #ff00ff !important; */
+ /* --mobile-expression-picker-background-default: #ff00ff !important; */
+ /* --mobile-guildbar-icon-default: #ff00ff !important; */
+ /* --mobile-searchbar-gradient-background: #ff00ff !important; */
+ /* --mobile-text-heading-primary: #ff00ff !important; */
+ /* --modal-background: #ff00ff !important; */
+ /* --modal-footer-background: #ff00ff !important; */
+ /* --navigator-header-tint: #ff00ff !important; */
+ /* --nitro-tab-gradient-center: #ff00ff !important; */
+ /* --nitro-tab-gradient-inner-ring: #ff00ff !important; */
+ /* --nitro-tab-gradient-outer-ring: #ff00ff !important; */
+ /* --notice-background-critical: #ff00ff !important; */
+ /* --notice-background-info: #ff00ff !important; */
+ /* --notice-background-positive: #ff00ff !important; */
+ /* --notice-background-warning: #ff00ff !important; */
+ /* --notice-text-critical: #ff00ff !important; */
+ /* --notice-text-info: #ff00ff !important; */
+ /* --notice-text-positive: #ff00ff !important; */
+ /* --notice-text-warning: #ff00ff !important; */
+ /* --overlay-backdrop-lightbox: #ff00ff !important; */
+ /* --panel-bg: #ff00ff !important; */
+ /* --polls-normal-image-background: #ff00ff !important; */
+ /* --polls-victor-fill: #ff00ff !important; */
+ /* --polls-voted-fill: #ff00ff !important; */
+ /* --premium-nitro-pink-text: #ff00ff !important; */
+ /* --profile-gradient-note-background: #ff00ff !important; */
+ /* --profile-gradient-overlay-synced-with-user-theme: #ff00ff !important; */
+ /* --profile-gradient-overlay: #ff00ff !important; */
+ /* --profile-gradient-role-pill-background: #ff00ff !important; */
+ /* --profile-gradient-role-pill-border: #ff00ff !important; */
+ /* --profile-gradient-section-box: #ff00ff !important; */
+ /* --progressbar-indicator-background: #ff00ff !important; */
+ /* --progressbar-track-background: #ff00ff !important; */
+ /* --quest-home-tab-gradient-blurple-center: #ff00ff !important; */
+ /* --quest-home-tab-gradient-blurple-inner: #ff00ff !important; */
+ /* --quest-home-tab-gradient-blurple-outer: #ff00ff !important; */
+ /* --radio-background-active: #ff00ff !important; */
+ /* --radio-background-default: #ff00ff !important; */
+ /* --radio-background-hover: #ff00ff !important; */
+ /* --radio-background-selected-default: #ff00ff !important; */
+ /* --radio-background-selected-hover: #ff00ff !important; */
+ /* --radio-border-active: #ff00ff !important; */
+ /* --radio-border-default: #ff00ff !important; */
+ /* --radio-border-hover: #ff00ff !important; */
+ /* --radio-border-selected-default: #ff00ff !important; */
+ /* --radio-border-selected-hover: #ff00ff !important; */
+ /* --radio-foreground-active: #ff00ff !important; */
+ /* --radio-foreground-default: #ff00ff !important; */
+ /* --radio-foreground-hover: #ff00ff !important; */
+ /* --radio-thumb-background-active: #ff00ff !important; */
+ /* --reaction-background-active: #ff00ff !important; */
+ /* --reaction-background-default: #ff00ff !important; */
+ /* --reaction-background-hover: #ff00ff !important; */
+ /* --reaction-background-reacted-default: #ff00ff !important; */
+ /* --reaction-background-reacted-hover: #ff00ff !important; */
+ /* --reaction-border-active: #ff00ff !important; */
+ /* --reaction-border-default: #ff00ff !important; */
+ /* --reaction-border-hover: #ff00ff !important; */
+ /* --reaction-border-reacted-default: #ff00ff !important; */
+ /* --reaction-text-active: #ff00ff !important; */
+ /* --reaction-text-default: #ff00ff !important; */
+ /* --reaction-text-hover: #ff00ff !important; */
+ /* --reaction-text-reacted-default: #ff00ff !important; */
+ /* --redesign-button-premium-primary-pink-for-gradient: #ff00ff !important; */
+ /* --redesign-button-premium-primary-pressed-background: #ff00ff !important; */
+ /* --redesign-button-premium-primary-purple-for-gradient-2: #ff00ff !important; */
+ /* --redesign-button-premium-primary-purple-for-gradient: #ff00ff !important; */
+ /* --redesign-button-tertiary-background: #ff00ff !important; */
+ /* --redesign-button-tertiary-pressed-background: #ff00ff !important; */
+ /* --redesign-button-tertiary-pressed-text: #ff00ff !important; */
+ /* --redesign-button-tertiary-text: #ff00ff !important; */
+ /* --scrollbar-auto-scrollbar-color-thumb: #ff00ff !important; */
+ /* --scrollbar-auto-scrollbar-color-track: #ff00ff !important; */
+ /* --scrollbar-auto-thumb: #ff00ff !important; */
+ /* --scrollbar-auto-track: #ff00ff !important; */
+ /* --scrollbar-thin-thumb: #ff00ff !important; */
+ /* --scrollbar-thin-track: #ff00ff !important; */
+ /* --slider-track-background: #ff00ff !important; */
+ /* --spine-default: #ff00ff !important; */
+ /* --spoiler-hidden-background-hover: #ff00ff !important; */
+ /* --spoiler-hidden-background: #ff00ff !important; */
+ /* --spoiler-revealed-background: #ff00ff !important; */
+ /* --standard-tab-gradient-center: #ff00ff !important; */
+ /* --standard-tab-gradient-inner-ring: #ff00ff !important; */
+ /* --standard-tab-gradient-outer-ring: #ff00ff !important; */
+ /* --status-danger: #ff00ff !important; */
+ /* --status-online: #ff00ff !important; */
+ /* --status-positive-background: #ff00ff !important; */
+ /* --status-positive-text: #ff00ff !important; */
+ /* --status-positive: #ff00ff !important; */
+ /* --status-speaking: #ff00ff !important; */
+ /* --status-warning-background: #ff00ff !important; */
+ /* --status-warning-text: #ff00ff !important; */
+ /* --status-warning: #ff00ff !important; */
+ /* --steam-review-text-mixed: #ff00ff !important; */
+ /* --steam-review-text-negative: #ff00ff !important; */
+ /* --steam-review-text-positive: #ff00ff !important; */
+ /* --switch-background-active: #ff00ff !important; */
+ /* --switch-background-default: #ff00ff !important; */
+ /* --switch-background-hover: #ff00ff !important; */
+ /* --switch-background-selected-default: #ff00ff !important; */
+ /* --switch-background-selected-hover: #ff00ff !important; */
+ /* --switch-border-default: #ff00ff !important; */
+ /* --switch-border-hover: #ff00ff !important; */
+ /* --switch-border-selected-default: #ff00ff !important; */
+ /* --switch-border-selected-hover: #ff00ff !important; */
+ /* --switch-thumb-background-default: #ff00ff !important; */
+ /* --switch-thumb-background-selected-default: #ff00ff !important; */
+ /* --switch-thumb-icon-active: #ff00ff !important; */
+ /* --switch-thumb-icon-default: #ff00ff !important; */
+ /* --text-brand: #ff00ff !important; */
+ /* --text-code-addition: #ff00ff !important; */
+ /* --text-code-attribute: #ff00ff !important; */
+ /* --text-code-builtin: #ff00ff !important; */
+ /* --text-code-bullet: #ff00ff !important; */
+ /* --text-code-comment: #ff00ff !important; */
+ /* --text-code-decorator: #ff00ff !important; */
+ /* --text-code-deletion: #ff00ff !important; */
+ /* --text-code-error: #ff00ff !important; */
+ /* --text-code-escape: #ff00ff !important; */
+ /* --text-code-keyword: #ff00ff !important; */
+ /* --text-code-link: #ff00ff !important; */
+ /* --text-code-namespace: #ff00ff !important; */
+ /* --text-code-number: #ff00ff !important; */
+ /* --text-code-operator: #ff00ff !important; */
+ /* --text-code-property: #ff00ff !important; */
+ /* --text-code-regexp: #ff00ff !important; */
+ /* --text-code-section: #ff00ff !important; */
+ /* --text-code-string: #ff00ff !important; */
+ /* --text-code-tag: #ff00ff !important; */
+ /* --text-code-title: #ff00ff !important; */
+ /* --text-code-type: #ff00ff !important; */
+ /* --text-code-variable: #ff00ff !important; */
+ /* --text-code: #ff00ff !important; */
+ /* --text-feedback-critical: #ff00ff !important; */
+ /* --text-feedback-info: #ff00ff !important; */
+ /* --text-feedback-positive: #ff00ff !important; */
+ /* --text-feedback-warning: #ff00ff !important; */
+ /* --text-invert: #ff00ff !important; */
+ /* --text-link: #ff00ff !important; */
+ /* --text-muted: #ff00ff !important; */
+ /* --text-overlay-dark: #ff00ff !important; */
+ /* --text-overlay-light: #ff00ff !important; */
+ /* --text-status-dnd: #ff00ff !important; */
+ /* --text-status-idle: #ff00ff !important; */
+ /* --text-status-offline: #ff00ff !important; */
+ /* --text-status-online: #ff00ff !important; */
+ /* --text-strong: #ff00ff !important; */
+ /* --text-subtle: #ff00ff !important; */
+ /* --text-voice-connected: #ff00ff !important; */
+ /* --text-voice-disconnected: #ff00ff !important; */
+ /* --text-voice-speaking: #ff00ff !important; */
+ /* --textbox-markdown-syntax: #ff00ff !important; */
+ /* --thread-channel-spine: #ff00ff !important; */
+ /* --user-profile-activity-toolbar-background: #ff00ff !important; */
+ /* --user-profile-background-hover: #ff00ff !important; */
+ /* --user-profile-border: #ff00ff !important; */
+ /* --user-profile-note-background-focus: #ff00ff !important; */
+ /* --user-profile-overlay-background-hover: #ff00ff !important; */
+ /* --user-profile-overlay-background: #ff00ff !important; */
+ /* --user-profile-toolbar-background: #ff00ff !important; */
+ /* --user-profile-toolbar-border: #ff00ff !important; */
+}
+
diff --git a/home/dot_config/X11/base b/home/dot_config/X11/base
new file mode 100644
index 0000000..a538320
--- /dev/null
+++ b/home/dot_config/X11/base
@@ -0,0 +1,13 @@
+*.font: monospace:size=7.5:antialias=true:autohint=true
+*.borderpx: 10
+*.termname: st-256color
+*.tabspaces: 2
+
+Xft.dpi: 96
+Xft.hinting: 1
+Xft.hintstyle: hintslight
+Xft.antialias: 1
+Xft.rgba: rgb
+
+Xcursor.theme: OpenZone_Black_Slim
+
diff --git a/home/dot_config/bat/config b/home/dot_config/bat/config
new file mode 100644
index 0000000..dd5778b
--- /dev/null
+++ b/home/dot_config/bat/config
@@ -0,0 +1,4 @@
+--style=plain
+--paging=never
+--theme=base16
+--tabs=2
diff --git a/home/dot_config/clangd/config.yaml b/home/dot_config/clangd/config.yaml
new file mode 100644
index 0000000..17947a1
--- /dev/null
+++ b/home/dot_config/clangd/config.yaml
@@ -0,0 +1,9 @@
+CompileFlags:
+ Add:
+ - -Wno-unknown-warning-option
+ - -Wno-gnu-folding-constant
+ - -fgnuc-version=8.0.0
+ Remove:
+ - -m*
+ - -f*
+ BuiltinHeaders: QueryDriver
diff --git a/home/dot_config/coc/extensions/package.json b/home/dot_config/coc/extensions/package.json
new file mode 100644
index 0000000..b648463
--- /dev/null
+++ b/home/dot_config/coc/extensions/package.json
@@ -0,0 +1,22 @@
+{
+ "dependencies": {
+ "coc-css": ">=2.1.0",
+ "coc-emmet": ">=1.1.6",
+ "coc-go": ">=1.3.35",
+ "coc-html": ">=1.8.0",
+ "coc-java": ">=1.26.1",
+ "coc-json": ">=1.9.3",
+ "coc-rust-analyzer": ">=0.85.0",
+ "coc-tsserver": ">=2.3.1",
+ "coc-vimtex": ">=1.1.5",
+ "coc-lua": ">=2.0.6",
+ "coc-deno": ">=3.15.0",
+ "coc-sh": ">=1.2.4",
+ "coc-solargraph": ">=1.2.4",
+ "coc-pyright": ">=1.1.405",
+ "coc-cmake": ">=0.2.2"
+ },
+ "disabled": [],
+ "locked": [],
+ "lastUpdate": 1762931212912
+} \ No newline at end of file
diff --git a/home/dot_config/dircolors b/home/dot_config/dircolors
new file mode 100644
index 0000000..9997fcf
--- /dev/null
+++ b/home/dot_config/dircolors
@@ -0,0 +1,177 @@
+# vim:ft=conf
+TERM Eterm
+TERM ansi
+TERM *color*
+TERM con[0-9]*x[0-9]*
+TERM cons25
+TERM console
+TERM cygwin
+TERM dtterm
+TERM gnome
+TERM hurd
+TERM jfbterm
+TERM konsole
+TERM kterm
+TERM linux
+TERM linux-c
+TERM mlterm
+TERM putty
+TERM rxvt*
+TERM screen*
+TERM st
+TERM terminator
+TERM tmux*
+TERM vt100
+TERM xterm*
+
+NORMAL 00 # no color code at all
+# FILE 00 # regular file: use no color at all
+RESET 0 # reset to "normal" color
+DIR 01;37 # directory
+# LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
+MULTIHARDLINK 00 # regular file with more than one link
+FIFO 40;33 # pipe
+SOCK 01;35 # socket
+DOOR 01;35 # door
+BLK 40;33;01 # block device driver
+CHR 40;33;01 # character device driver
+ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
+MISSING 00 # ... and the files they point to
+SETUID 37;41 # file that is setuid (u+s)
+SETGID 30;43 # file that is setgid (g+s)
+CAPABILITY 30;41 # file with capability
+STICKY_OTHER_WRITABLE 0;47 # dir that is sticky and other-writable (+t,o+w)
+OTHER_WRITABLE 01;34 # dir that is other-writable (o+w) and not sticky
+STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
+EXEC 0;37
+
+# List any file extensions like '.gz' or '.tar' that you would like ls
+# to colorize below. Put the extension, a space, and the color init string.
+# (and any comments you want to add after a '#')
+# If you use DOS-style suffixes, you may want to uncomment the following:
+#.cmd 01;32 # executables (bright green)
+#.exe 01;32
+#.com 01;32
+#.btm 01;32
+#.bat 01;32
+# Or if you want to colorize scripts even if they do not have the
+# executable bit actually set.
+#.sh 01;32
+#.csh 01;32
+ # archives or compressed (bright red)
+.tar 01;31
+.tgz 01;31
+.arc 01;31
+.arj 01;31
+.taz 01;31
+.lha 01;31
+.lz4 01;31
+.lzh 01;31
+.lzma 01;31
+.tlz 01;31
+.txz 01;31
+.tzo 01;31
+.t7z 01;31
+.zip 01;31
+.z 01;31
+.dz 01;31
+.gz 01;31
+.lrz 01;31
+.lz 01;31
+.lzo 01;31
+.xz 01;31
+.zst 01;31
+.tzst 01;31
+.bz2 01;31
+.bz 01;31
+.tbz 01;31
+.tbz2 01;31
+.tz 01;31
+.deb 01;31
+.rpm 01;31
+.jar 01;31
+.war 01;31
+.ear 01;31
+.sar 01;31
+.rar 01;31
+.alz 01;31
+.ace 01;31
+.zoo 01;31
+.cpio 01;31
+.7z 01;31
+.rz 01;31
+.cab 01;31
+.wim 01;31
+.swm 01;31
+.dwm 01;31
+.esd 01;31
+# image formats
+.jpg 01;35
+.jpeg 01;35
+.mjpg 01;35
+.mjpeg 01;35
+.gif 01;35
+.bmp 01;35
+.pbm 01;35
+.pgm 01;35
+.ppm 01;35
+.tga 01;35
+.xbm 01;35
+.xpm 01;35
+.tif 01;35
+.tiff 01;35
+.png 01;35
+.svg 01;35
+.svgz 01;35
+.mng 01;35
+.pcx 01;35
+.mov 01;35
+.mpg 01;35
+.mpeg 01;35
+.m2v 01;35
+.mkv 01;35
+.webm 01;35
+.webp 01;35
+.ogm 01;35
+.mp4 01;35
+.m4v 01;35
+.mp4v 01;35
+.vob 01;35
+.qt 01;35
+.nuv 01;35
+.wmv 01;35
+.asf 01;35
+.rm 01;35
+.rmvb 01;35
+.flc 01;35
+.avi 01;35
+.fli 01;35
+.flv 01;35
+.gl 01;35
+.dl 01;35
+.xcf 01;35
+.xwd 01;35
+.yuv 01;35
+.cgm 01;35
+.emf 01;35
+# https://wiki.xiph.org/MIME_Types_and_File_Extensions
+.ogv 01;35
+.ogx 01;35
+# audio formats
+.aac 00;36
+.au 00;36
+.flac 00;36
+.m4a 00;36
+.mid 00;36
+.midi 00;36
+.mka 00;36
+.mp3 00;36
+.mpc 00;36
+.ogg 00;36
+.ra 00;36
+.wav 00;36
+# https://wiki.xiph.org/MIME_Types_and_File_Extensions
+.oga 00;36
+.opus 00;36
+.spx 00;36
+.xspf 00;36
diff --git a/home/dot_config/dunst/base b/home/dot_config/dunst/base
new file mode 100644
index 0000000..75ae5eb
--- /dev/null
+++ b/home/dot_config/dunst/base
@@ -0,0 +1,48 @@
+[global]
+monitor = 0
+follow = none
+height = (0, 100)
+width = 300
+origin = top-right
+offset = 22x42
+indicate_hidden = yes
+shrink = no
+transparency = 0
+separator_height = 2
+padding = 12
+horizontal_padding = 12
+frame_width = 2
+separator_color = frame
+sort = yes
+idle_threshold = 10
+font = Inter 9
+line_height = 0
+markup = full
+format = "<b>%s</b>\n%b"
+alignment = left
+vertical_alignment = top
+show_age_threshold = 60
+word_wrap = yes
+ellipsize = middle
+ignore_newline = no
+stack_duplicates = true
+hide_duplicate_count = false
+show_indicators = yes
+icon_position = left
+min_icon_size = 0
+max_icon_size = 48
+icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
+sticky_history = yes
+history_length = 20
+browser = /usr/bin/firefox -new-tab
+always_run_script = true
+title = dunst
+class = dunst
+corner_radius = 10
+ignore_dbusclose = false
+force_xinerama = false
+mouse_left_click = do_action
+mouse_middle_click = close_all
+mouse_right_click = close_current
+
+# vim: ft=cfg
diff --git a/home/dot_config/fcitx5/conf/classicui.conf b/home/dot_config/fcitx5/conf/classicui.conf
new file mode 100644
index 0000000..9b98e74
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/classicui.conf
@@ -0,0 +1,35 @@
+# 候補ウィンドウを縦にする
+Vertical Candidate List=True
+# マウスホイールを使用して前または次のページに移動する
+WheelForPaging=True
+# フォント
+Font="Sans 10"
+# メニューフォント
+MenuFont="Sans 10"
+# トレイフォント
+TrayFont="JetBrainsMono Nerd Font Mono Bold 10"
+# トレイラベルのアウトライン色
+TrayOutlineColor=#00000000
+# トレイラベルのテキスト色
+TrayTextColor=#ffffff00
+# テキストアイコンを優先する
+PreferTextIcon=True
+# アイコンにレイアウト名を表示する
+ShowLayoutNameInIcon=False
+# 入力メソッドの言語を使用してテキストを表示する
+UseInputMethodLanguageToDisplayText=False
+# テーマ
+Theme=mode
+# ダークテーマ
+DarkTheme=mode
+# システムのライト/ダーク配色に従う
+UseDarkTheme=False
+# テーマとデスクトップでサポートされている場合は、システムのアクセントカラーに従う
+UseAccentColor=True
+# X11 で Per Screen DPI を使用する
+PerScreenDPI=False
+# フォント DPI を Wayland で強制する
+ForceWaylandDPI=0
+# Wayland で分数スケールを有効にする
+EnableFractionalScale=True
+
diff --git a/home/dot_config/fcitx5/conf/clipboard.conf b/home/dot_config/fcitx5/conf/clipboard.conf
new file mode 100644
index 0000000..6a38473
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/clipboard.conf
@@ -0,0 +1,8 @@
+# Paste Primary
+PastePrimaryKey=
+# Number of entries
+Number of entries=30
+
+[TriggerKey]
+0=Control+semicolon
+
diff --git a/home/dot_config/fcitx5/conf/imselector.conf b/home/dot_config/fcitx5/conf/imselector.conf
new file mode 100644
index 0000000..de02872
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/imselector.conf
@@ -0,0 +1,13 @@
+# 現在の入力コンテキストのみのトリガーキー
+TriggerKeyLocal=
+# 現在の入力コンテキストのみをN番目の入力メソッドに切り替えるホットキー
+SwitchKeyLocal=
+
+[TriggerKey]
+0=Super+Z
+
+[SwitchKey]
+0=Launch5
+1=Launch6
+2=Launch7
+
diff --git a/home/dot_config/fcitx5/conf/mozc.conf b/home/dot_config/fcitx5/conf/mozc.conf
new file mode 100644
index 0000000..09f0670
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/mozc.conf
@@ -0,0 +1,13 @@
+# 初期モード
+InitialMode=Hiragana
+# 入力状態の共有
+InputState="Follow Global Configuration"
+# 候補を縦に並べる
+Vertical=False
+# 用例の表示 (候補が縦並びのとき)
+ExpandMode="On Focus"
+# プリエディットカーソルをプリエディットの先頭に固定する
+PreeditCursorPositionAtBeginning=False
+# 用例を表示するホットキー
+ExpandKey=
+
diff --git a/home/dot_config/fcitx5/conf/private_notifications.conf b/home/dot_config/fcitx5/conf/private_notifications.conf
new file mode 100644
index 0000000..32460db
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/private_notifications.conf
@@ -0,0 +1,3 @@
+# 隠す通知
+HiddenNotifications=
+
diff --git a/home/dot_config/fcitx5/conf/quickphrase.conf b/home/dot_config/fcitx5/conf/quickphrase.conf
new file mode 100644
index 0000000..9e49067
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/quickphrase.conf
@@ -0,0 +1,10 @@
+# キーモディファイアーを選択
+Choose Modifier=None
+# スペルチェックを有効にする
+Spell=True
+# フォールバック時のスペルチェック言語
+FallbackSpellLanguage=en
+
+[TriggerKey]
+0=Super+semicolon
+
diff --git a/home/dot_config/fcitx5/conf/xcb.conf b/home/dot_config/fcitx5/conf/xcb.conf
new file mode 100644
index 0000000..642bc03
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/xcb.conf
@@ -0,0 +1,5 @@
+# Allow Overriding System XKB Settings
+Allow Overriding System XKB Settings=True
+# Always set layout to be only group layout
+AlwaysSetToGroupLayout=True
+
diff --git a/home/dot_config/fcitx5/conf/xim.conf b/home/dot_config/fcitx5/conf/xim.conf
new file mode 100644
index 0000000..57abf4b
--- /dev/null
+++ b/home/dot_config/fcitx5/conf/xim.conf
@@ -0,0 +1,3 @@
+# XIM で On The Spot スタイルを使う(再起動が必要)
+UseOnTheSpot=True
+
diff --git a/home/dot_config/fcitx5/config b/home/dot_config/fcitx5/config
new file mode 100644
index 0000000..12e7a48
--- /dev/null
+++ b/home/dot_config/fcitx5/config
@@ -0,0 +1,75 @@
+[Hotkey]
+# 入力メソッドの切り替え
+TriggerKeys=
+# トリガーキーを押すたびに切り替える
+EnumerateWithTriggerKeys=True
+# 一時的に第1入力メソッドに切り替える
+AltTriggerKeys=
+# 次の入力メソッドに切り替える
+EnumerateForwardKeys=
+# 前の入力メソッドに切り替える
+EnumerateBackwardKeys=
+# 切り替え時は第1入力メソッドをスキップする
+EnumerateSkipFirst=False
+# 次の入力メソッドグループに切り替える
+EnumerateGroupForwardKeys=
+# 前の入力メソッドグループに切り替える
+EnumerateGroupBackwardKeys=
+# 入力メソッドを有効にする
+ActivateKeys=
+# 入力メソッドをオフにする
+DeactivateKeys=
+# デフォルトの前ページ
+PrevPage=
+# デフォルトの次ページ
+NextPage=
+# 埋め込みプリエディットの切り替え
+TogglePreedit=
+# 修飾キーのショートカットをトリガーするための時間制限(ミリ秒)
+ModifierOnlyKeyTimeout=250
+
+[Hotkey/PrevCandidate]
+0=Shift+Tab
+
+[Hotkey/NextCandidate]
+0=Tab
+
+[Behavior]
+# デフォルトで有効にする
+ActiveByDefault=False
+# フォーカス時に状態をリセット
+resetStateWhenFocusIn=No
+# 入力状態を共有する
+ShareInputState=All
+# アプリケーションにプリエディットを表示する
+PreeditEnabledByDefault=True
+# 入力メソッドを切り替える際に入力メソッドの情報を表示する
+ShowInputMethodInformation=False
+# フォーカスを変更する際に入力メソッドの情報を表示する
+showInputMethodInformationWhenFocusIn=False
+# 入力メソッドの情報をコンパクトに表示する
+CompactInputMethodInformation=True
+# 第1入力メソッドの情報を表示する
+ShowFirstInputMethodInformation=False
+# デフォルトのページサイズ
+DefaultPageSize=5
+# XKB オプションより優先する
+OverrideXkbOption=False
+# カスタム XKB オプション
+CustomXkbOption=
+# Force Enabled Addons
+EnabledAddons=
+# Preload input method to be used by default
+PreloadInputMethod=True
+# パスワード欄に入力メソッドを許可する
+AllowInputMethodForPassword=False
+# パスワード入力時にプリエディットテキストを表示する
+ShowPreeditForPassword=False
+# ユーザーデータを保存する間隔(分)
+AutoSavePeriod=30
+
+[Behavior/DisabledAddons]
+0=kimpanel
+1=wayland
+2=waylandim
+
diff --git a/home/dot_config/fcitx5/private_profile b/home/dot_config/fcitx5/private_profile
new file mode 100644
index 0000000..a3e35fe
--- /dev/null
+++ b/home/dot_config/fcitx5/private_profile
@@ -0,0 +1,29 @@
+[Groups/0]
+# Group Name
+Name=Default
+# Layout
+Default Layout=us
+# Default Input Method
+DefaultIM=mozc
+
+[Groups/0/Items/0]
+# Name
+Name=keyboard-us
+# Layout
+Layout=
+
+[Groups/0/Items/1]
+# Name
+Name=keyboard-us-intl
+# Layout
+Layout=
+
+[Groups/0/Items/2]
+# Name
+Name=mozc
+# Layout
+Layout=
+
+[GroupOrder]
+0=Default
+
diff --git a/home/dot_config/firefox/chrome/userChrome.css b/home/dot_config/firefox/chrome/userChrome.css
new file mode 100644
index 0000000..330b18e
--- /dev/null
+++ b/home/dot_config/firefox/chrome/userChrome.css
@@ -0,0 +1,39 @@
+/* hide shit */
+#alltabs-button,
+#appMenu-fxa-status2,
+#appMenu-fxa-separator,
+#fullscreen-warning,
+.findbar-highlight,
+#urlbar-searchmode-switcher,
+#translations-button,
+#reader-mode-button
+{ display: none !important; }
+
+/* undo shit */
+#urlbar,
+#searchbar
+{ font-size: unset !important; }
+
+/* make shit compact */
+body { font-size: 10pt; }
+.tab-background { margin-block: 0 !important; }
+#TabsToolbar { --toolbarbutton-inner-padding: 8px; }
+:root { --tab-min-height: 24px !important; }
+.tab-label-container {
+ height: unset !important;
+ margin-right: var(--toolbarbutton-inner-padding);
+}
+
+.tabbrowser-tab
+{ padding: 0 !important; }
+
+.tab-background,
+#TabsToolbar .toolbarbutton-1 > .toolbarbutton-icon
+{ border-radius: 0 !important; }
+
+#nav-bar,
+#navigator-toolbox
+{ border: none !important; }
+
+#urlbar-input
+{ padding: 0px 8px !important; }
diff --git a/home/dot_config/firefox/user.js b/home/dot_config/firefox/user.js
new file mode 100644
index 0000000..a18c1e9
--- /dev/null
+++ b/home/dot_config/firefox/user.js
@@ -0,0 +1,60 @@
+// opinion
+user_pref("browser.toolbars.bookmarks.visibility", "never");
+user_pref("browser.quitShortcut.disabled", true);
+user_pref("media.videocontrols.picture-in-picture.video-toggle.enabled", false);
+user_pref("layout.spellcheckDefault", 0);
+user_pref("findbar.highlightAll", true);
+
+// i know what i'm doing
+user_pref("browser.safebrowsing.downloads.enabled", false);
+user_pref("browser.safebrowsing.malware.enabled", false);
+user_pref("browser.safebrowsing.phishing.enabled", false);
+
+// i18n
+user_pref("intl.regional_prefs.use_os_locales", true);
+user_pref("layout.spellcheckDefault", 0);
+user_pref("browser.translations.automaticallyPopup", false);
+
+// privacy
+user_pref("signon.rememberSignons", false);
+user_pref("datareporting.healthreport.uploadEnabled", false);
+user_pref("app.shield.optoutstudies.enabled", false);
+user_pref("dom.security.https_only_mode", true);
+user_pref("dom.security.https_only_mode_ever_enabled", true);
+
+// smooth scrolling
+user_pref("general.smoothScroll", true);
+user_pref("general.smoothScroll.msdPhysics.enabled", true);
+user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
+user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
+user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 1800);
+user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
+user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 60);
+user_pref("general.smoothScroll.currentVelocityWeighting", "1");
+user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
+
+// enable chrome/userChrome.css
+user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
+
+// enable userChrome debugging
+user_pref("devtools.chrome.enabled", true);
+user_pref("devtools.debugger.remote-enabled", true);
+
+// no first time ux
+user_pref("trailhead.firstrun.didSeeAboutWelcome", true);
+user_pref("app.normandy.first_run", false);
+user_pref("browser.aboutConfig.showWarning", false);
+user_pref("browser.aboutwelcome.didSeeFinalScreen", true);
+user_pref("browser.bookmarks.addedImportButton", true);
+user_pref("browser.bookmarks.restore_default_bookmarks", false);
+
+// no new tab page
+user_pref("browser.newtabpage.enabled", false);
+user_pref("browser.startup.homepage", "chrome://browser/content/blanktab.html");
+
+// fonts
+user_pref("font.default.x-western", "sans-serif");
+user_pref("font.name.monospace.x-western", "monospace");
+user_pref("font.name.sans-serif.x-western", "sans-serif");
+user_pref("font.name.serif.x-western", "serif");
+
diff --git a/home/dot_config/flashfocus/flashfocus.yml b/home/dot_config/flashfocus/flashfocus.yml
new file mode 100644
index 0000000..3f6f0e0
--- /dev/null
+++ b/home/dot_config/flashfocus/flashfocus.yml
@@ -0,0 +1,9 @@
+flash-opacity: 0.95
+default-opacity: 1
+time: 150
+simple: false
+ntimepoints: 20
+flash-on-focus: true
+flash-fullscreen: true
+flash-lone-windows: 'on_switch'
+
diff --git a/home/dot_config/fontconfig/conf.d/10-inter-features.conf b/home/dot_config/fontconfig/conf.d/10-inter-features.conf
new file mode 100644
index 0000000..5a641d6
--- /dev/null
+++ b/home/dot_config/fontconfig/conf.d/10-inter-features.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
+<fontconfig>
+ <description>Enable font features for Inter</description>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Inter</string>
+ </test>
+ <edit name="fontfeatures" mode="append">
+ <string>ss07 on</string> <!-- Square punctuation -->
+ <string>ss08 on</string> <!-- Square quotes -->
+ </edit>
+ </match>
+</fontconfig>
diff --git a/home/dot_config/fontconfig/conf.d/10-sub-pixel-rgb.conf b/home/dot_config/fontconfig/conf.d/10-sub-pixel-rgb.conf
new file mode 100644
index 0000000..fcd51f3
--- /dev/null
+++ b/home/dot_config/fontconfig/conf.d/10-sub-pixel-rgb.conf
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
+<fontconfig>
+ <description>Enable sub-pixel font rendering</description>
+ <match target="pattern">
+ <edit name="rgba" mode="append"><const>rgb</const></edit>
+ </match>
+</fontconfig>
diff --git a/home/dot_config/fontconfig/fonts.conf b/home/dot_config/fontconfig/fonts.conf
new file mode 100644
index 0000000..955c797
--- /dev/null
+++ b/home/dot_config/fontconfig/fonts.conf
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
+<fontconfig>
+ <description>System default fonts with Japanese fallback fonts</description>
+ <alias binding="strong">
+ <family>sans-serif</family>
+ <prefer><family>Inter</family></prefer>
+ </alias>
+ <alias binding="strong">
+ <family>serif</family>
+ <prefer><family>TeX Gyre Schola</family></prefer>
+ </alias>
+ <alias binding="strong">
+ <family>monospace</family>
+ <prefer><family>JetBrains Mono</family></prefer>
+ </alias>
+ <alias binding="strong">
+ <family>system-ui</family>
+ <prefer><family>Inter</family></prefer>
+ </alias>
+
+ <match target="pattern">
+ <test name="family"><string>sans-serif</string></test>
+ <edit name="family" mode="append" binding="strong"><string>Hiragino Kaku Gothic ProN</string></edit>
+ </match>
+ <match target="pattern">
+ <test name="family"><string>serif</string></test>
+ <edit name="family" mode="append" binding="strong"><string>Hiragino Mincho ProN</string></edit>
+ </match>
+</fontconfig>
diff --git a/home/dot_config/foot/foot.ini.tmpl b/home/dot_config/foot/foot.ini.tmpl
new file mode 100644
index 0000000..0b7451d
--- /dev/null
+++ b/home/dot_config/foot/foot.ini.tmpl
@@ -0,0 +1,6 @@
+[main]
+line-height = 15px
+pad = 10x10
+font = monospace:size=7.5:antialias=true:autohint=true
+
+include={{ env "XDG_CONFIG_HOME" }}/foot/colors.ini
diff --git a/home/dot_config/fzmp/symlink_conf b/home/dot_config/fzmp/symlink_conf
new file mode 100644
index 0000000..7d048e5
--- /dev/null
+++ b/home/dot_config/fzmp/symlink_conf
@@ -0,0 +1 @@
+../mpcplus/fzmp.conf
diff --git a/home/dot_config/gdb/gdbearlyinit b/home/dot_config/gdb/gdbearlyinit
new file mode 100644
index 0000000..b73aa96
--- /dev/null
+++ b/home/dot_config/gdb/gdbearlyinit
@@ -0,0 +1 @@
+set startup-quietly on
diff --git a/home/dot_config/gdb/gdbinit b/home/dot_config/gdb/gdbinit
new file mode 100644
index 0000000..a2d1f36
--- /dev/null
+++ b/home/dot_config/gdb/gdbinit
@@ -0,0 +1,31 @@
+# load ./gdbinit.py
+python
+import sys, os
+sys.path.append(os.path.join(os.environ["XDG_CONFIG_HOME"], "gdb"))
+import gdbinit
+end
+
+# preferences
+try set disassembly-flavor intel
+set debuginfod enabled off
+set confirm off
+set extended-prompt \P
+set history save on
+set history size 10000000
+set history remove-duplicates 100
+set style emoji off
+set pagination off
+set output-radix 16
+
+# aliases
+alias reset = monitor reset
+alias erase = monitor flash erase
+
+alias -a -- v8m = arm-v8m
+alias -a -- v8m tz = arm-v8m trustzone
+alias -a -- jlink sv = jlink server
+alias -a -- jlink sv wd = jlink server watchdog
+
+# commands
+alias mk = !mk
+alias ls = !ls
diff --git a/home/dot_config/gdb/gdbinit.py b/home/dot_config/gdb/gdbinit.py
new file mode 100644
index 0000000..7888a37
--- /dev/null
+++ b/home/dot_config/gdb/gdbinit.py
@@ -0,0 +1,52 @@
+import gdb
+import gdb.prompt
+
+from subprocess import check_output
+from os import environ
+
+class TryCommand(gdb.Command):
+ """
+ Try evaluating the argument(s) as a regular GDB command, but do not fail if the command fails.
+ """
+
+ def __init__(self):
+ super().__init__("try", gdb.COMMAND_USER)
+
+ def invoke(self, argument, from_tty):
+ try:
+ gdb.execute(argument)
+ except gdb.error:
+ pass
+
+TryCommand()
+
+def custom_prompt() -> str:
+ try:
+ env = environ
+ env["eo"] = "\\["
+ env["ec"] = "\\]"
+ prompt = check_output(["prompt", "gdb"], text=True, env=env)
+ return prompt
+ except Exception:
+ return "(gdb) "
+
+# add custom prompt ("\P") escape code to extended-prompt
+substitute_prompt = gdb.prompt.substitute_prompt
+def new_substitute_prompt(prompt: str):
+ out = ""
+ escape = False
+ for char in prompt:
+ out += char
+ if not escape:
+ if char == "\\":
+ escape = True
+ continue
+ escape = False
+
+ if char == "P":
+ out = out[:-2] + custom_prompt()
+
+ out = substitute_prompt(out)
+ return out
+
+gdb.prompt.substitute_prompt = new_substitute_prompt
diff --git a/home/dot_config/git/config.tmpl b/home/dot_config/git/config.tmpl
new file mode 100644
index 0000000..9202c61
--- /dev/null
+++ b/home/dot_config/git/config.tmpl
@@ -0,0 +1,53 @@
+[init]
+ defaultBranch = master
+[core]
+ quotepath = off
+[user]
+ email = loek@pipeframe.xyz
+ name = Loek Le Blansch
+ signingkey = {{ env "GPG_ID_GIT" }}
+[commit]
+ gpgsign = true
+[gpg]
+ program = {{ env "XDG_DATA_HOME" }}/bin/gpg-git
+[credential]
+ helper = cache --timeout 7200
+ helper = store
+[color]
+ ui = true
+[filter "lfs"]
+ clean = git-lfs clean -- %f
+ smudge = git-lfs smudge -- %f
+ process = git-lfs filter-process
+ required = true
+[pull]
+ rebase = false
+[alias]
+ adda = add -A
+ a = add -A
+ c = commit
+ s = status
+ ps = push
+ psa = !git remote | xargs -L1 -P0 -- git push
+ pl = pull
+ l = log
+ d = diff
+ cloc = !git ls-files -z | xargs -0 cloc
+ conflict = !git diff --name-only --diff-filter=U --relative
+ ec = !git conflict -z | xargs -0 -- $EDITOR
+ ours = !git conflict -z | xargs -0 -- git checkout --ours
+ theirs = !git conflict -z | xargs -0 -- git checkout --theirs
+ nuke = !git reset --hard && git clean -fxd
+[pager]
+ log = delta
+ show = delta
+ diff = delta
+ blame = delta
+[delta]
+ tabs = 2
+ side-by-side = false
+ syntax-theme = base16
+[safe]
+ directory = *
+[diff "mozc_config"]
+ textconv = mozc-config-filter
diff --git a/home/dot_config/gtk-3.0/settings.ini b/home/dot_config/gtk-3.0/settings.ini
new file mode 100644
index 0000000..5c6573f
--- /dev/null
+++ b/home/dot_config/gtk-3.0/settings.ini
@@ -0,0 +1,16 @@
+[Settings]
+gtk-application-prefer-light-theme=1
+gtk-icon-theme-name=Adwaita
+gtk-font-name=Inter 9
+gtk-cursor-theme-size=0
+gtk-toolbar-style=GTK_TOOLBAR_BOTH
+gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
+gtk-button-images=1
+gtk-menu-images=1
+gtk-enable-event-sounds=1
+gtk-enable-input-feedback-sounds=1
+gtk-xft-antialias=1
+gtk-xft-hinting=1
+gtk-xft-hintstyle=hintfull
+gtk-cursor-theme-name=OpenZone_Black_Slim
+gtk-theme-name=adw-gtk3-light
diff --git a/home/dot_config/gtk-4.0/env b/home/dot_config/gtk-4.0/env
new file mode 100644
index 0000000..2eac735
--- /dev/null
+++ b/home/dot_config/gtk-4.0/env
@@ -0,0 +1,6 @@
+#!/bin/sh
+export GTK_THEME="adw-gtk3"
+mode_state="$XDG_CACHE_HOME/mode/state/theme"
+[ -e "$mode_state" ] && . "$mode_state"
+[ "$mode" = "dark" ] && GTK_THEME="$GTK_THEME:dark"
+export GTK_THEME
diff --git a/home/dot_config/i3/config.tmpl b/home/dot_config/i3/config.tmpl
new file mode 100644
index 0000000..e0cf678
--- /dev/null
+++ b/home/dot_config/i3/config.tmpl
@@ -0,0 +1,90 @@
+# variables
+set $mod Mod4
+set $inner_gaps 8
+set $outer_gaps 0
+
+# set gaps
+gaps inner $inner_gaps
+gaps outer $outer_gaps
+
+include color.conf
+
+# Replace window decorations with a border
+for_window [class=".*"] border pixel 0
+
+# font
+font pango:Inter 9
+
+floating_modifier $mod
+
+# Gaps
+bindsym $mod+i gaps inner current plus 5
+bindsym $mod+Shift+i gaps inner current minus 5
+bindsym $mod+o gaps outer current plus 5
+bindsym $mod+Shift+o gaps outer current minus 5
+bindsym $mod+n gaps inner current set -1; gaps outer current set 0
+bindsym $mod+d gaps inner current set $inner_gaps; gaps outer current set $outer_gaps;
+
+# Autostart
+exec --no-startup-id "{{ env "XDG_CONFIG_HOME" }}/i3/autostart"
+
+# split in horizontal orientation
+bindsym $mod+bar split h
+bindsym $mod+minus split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+Alt+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+Shift+a focus parent
+
+# workspaces
+set $ws1 "1"
+set $ws2 "2"
+set $ws3 "3"
+set $ws4 "4"
+set $ws5 "5"
+set $ws6 "6"
+set $ws7 "7"
+set $ws8 "8"
+
+# switch to workspace
+bindsym $mod+1 workspace number $ws1
+bindsym $mod+2 workspace number $ws2
+bindsym $mod+3 workspace number $ws3
+bindsym $mod+4 workspace number $ws4
+bindsym $mod+5 workspace number $ws5
+bindsym $mod+6 workspace number $ws6
+bindsym $mod+7 workspace number $ws7
+bindsym $mod+8 workspace number $ws8
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number $ws1
+bindsym $mod+Shift+2 move container to workspace number $ws2
+bindsym $mod+Shift+3 move container to workspace number $ws3
+bindsym $mod+Shift+4 move container to workspace number $ws4
+bindsym $mod+Shift+5 move container to workspace number $ws5
+bindsym $mod+Shift+6 move container to workspace number $ws6
+bindsym $mod+Shift+7 move container to workspace number $ws7
+bindsym $mod+Shift+8 move container to workspace number $ws8
+
+# always floating windows
+for_window [class="steam"] floating enable
+for_window [class="RAIL"] floating enable
+for_window [class="Conky"] floating enable
+for_window [title="Farge"] floating enable
+for_window [title="^\[floating\].*" tiling_from=auto] floating enable
+for_window [window_type=notification] floating enable
+for_window [title="JidePopup"] floating enable
+
+for_window [class="Unturned.x86_64"] floating disable
+for_window [class="Unturned.x86_64"] fullscreen disable
+
+for_window [class="Microsoft Windows"] floating enable
+
diff --git a/home/dot_config/i3/executable_autostart b/home/dot_config/i3/executable_autostart
new file mode 100644
index 0000000..70b7616
--- /dev/null
+++ b/home/dot_config/i3/executable_autostart
@@ -0,0 +1,33 @@
+#!/bin/sh
+. "$HOME/.profile"
+xrdb -override < "$XDG_CONFIG_HOME/X11/base"
+mode --no-reload --no-cfggen restore
+
+/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
+polybar &
+picom &
+xbanish &
+dunst &
+autocutsel -selection CLIPBOARD &
+fcitx5 &
+xbindkeys --nodaemon &
+xdimmer -t 45 -p 3 &
+redshift -l 52:6 &
+nicotine --hidden &
+desktop2mqtt --config "$XDG_CONFIG_HOME/desktop2mqtt/config.yml" &
+light-locker --late-locking --lock-after-screensaver=0 --no-lock-on-suspend --no-lock-on-lid &
+systembus-notify &
+nmpassd &
+
+# auto start lazy script after everything else
+[ -x "$HOME/do.sh" ] && "$HOME/do.sh" &
+
+exit_trap() {
+ trap - TERM
+ kill -- -$$
+}
+trap exit_trap INT TERM EXIT
+
+# I want to keep this script running so I can easily kill all daemons when i3
+# exits
+wait $(jobs -p)
diff --git a/home/dot_config/imapnotify/pipeframe.conf b/home/dot_config/imapnotify/pipeframe.conf
new file mode 100644
index 0000000..774236c
--- /dev/null
+++ b/home/dot_config/imapnotify/pipeframe.conf
@@ -0,0 +1,11 @@
+{
+ "username": "loek",
+ "host": "mail.pipeframe.xyz",
+ "port": 993,
+ "tls": true,
+ "tlsOptions": { "rejectUnauthorized": true },
+ "passwordCmd": "pass srv/wipper/passwd/loek",
+ "onNewMail": "systemctl --user start mbsync",
+ "onNewMailPost": "notify-send '新着メール'",
+ "boxes": [ "Inbox" ]
+}
diff --git a/home/dot_config/inputrc b/home/dot_config/inputrc
new file mode 100644
index 0000000..aa55cba
--- /dev/null
+++ b/home/dot_config/inputrc
@@ -0,0 +1,8 @@
+set show-all-if-ambiguous on
+set completion-ignore-case on
+set colored-completion-prefix on
+set colored-stats on
+set menu-complete-display-prefix on
+
+TAB: menu-complete
+"\e[Z": menu-complete-backward
diff --git a/home/dot_config/jellyfin-mpv-shim/mpv.conf.tmpl b/home/dot_config/jellyfin-mpv-shim/mpv.conf.tmpl
new file mode 100644
index 0000000..30a9ccf
--- /dev/null
+++ b/home/dot_config/jellyfin-mpv-shim/mpv.conf.tmpl
@@ -0,0 +1,3 @@
+{{ include "dot_config/mpv/mpv.conf" }}
+# better japanese font for watching with japanese subtitles
+sub-font='Hiragino Kaku Gothic ProN'
diff --git a/home/dot_config/jellyfin-mpv-shim/scripts/set-lights.lua b/home/dot_config/jellyfin-mpv-shim/scripts/set-lights.lua
new file mode 100644
index 0000000..3a392dc
--- /dev/null
+++ b/home/dot_config/jellyfin-mpv-shim/scripts/set-lights.lua
@@ -0,0 +1,6 @@
+function on_start_file()
+ os.execute("curl -X POST \"$HASS_SERVER/api/webhook/movie\"");
+end
+
+mp.register_event("start-file", on_start_file)
+
diff --git a/home/dot_config/jellyfin-mpv-shim/scripts/symlink_copy-subs.lua b/home/dot_config/jellyfin-mpv-shim/scripts/symlink_copy-subs.lua
new file mode 100644
index 0000000..3609faf
--- /dev/null
+++ b/home/dot_config/jellyfin-mpv-shim/scripts/symlink_copy-subs.lua
@@ -0,0 +1 @@
+../../mpv/scripts/copy-subs.lua
diff --git a/home/dot_config/jellyfin-mpv-shim/symlink_input.conf b/home/dot_config/jellyfin-mpv-shim/symlink_input.conf
new file mode 100644
index 0000000..61f879a
--- /dev/null
+++ b/home/dot_config/jellyfin-mpv-shim/symlink_input.conf
@@ -0,0 +1 @@
+../mpv/input.conf
diff --git a/home/dot_config/khal/base b/home/dot_config/khal/base
new file mode 100644
index 0000000..2a8238d
--- /dev/null
+++ b/home/dot_config/khal/base
@@ -0,0 +1,14 @@
+# vim:ft=dosini
+
+[locale]
+timeformat = %H:%M
+dateformat = %m月%d日 (%a)
+longdateformat = %A %Y年%m月%d日
+datetimeformat = %c
+longdatetimeformat = %c
+
+[view]
+agenda_day_format = "{bold}{date-long}{reset}"
+agenda_event_format = " {cancelled}{repeat-symbol}{alarm-symbol}{start-end-time-style} -- {calendar-color}{title}{reset}"
+blank_line_before_day = True
+
diff --git a/home/dot_config/khal/executable_config_gen b/home/dot_config/khal/executable_config_gen
new file mode 100644
index 0000000..3f982c5
--- /dev/null
+++ b/home/dot_config/khal/executable_config_gen
@@ -0,0 +1,105 @@
+#!/bin/sh
+EXPORT_LIB=y . "$XDG_CONFIG_HOME/vdirsyncer/config_gen"
+
+cat << EOF
+[calendars]
+
+EOF
+
+_sync() {
+ yes | vdirsyncer discover 1> /dev/null 2> /dev/null
+ vdirsyncer sync 1> /dev/null 2> /dev/null
+ vdirsyncer metasync 1> /dev/null 2> /dev/null
+}
+
+color_fmt() { pastel format hsl | tr -d 'hsl(,%)' | sed 's/\.[^ ]\+//g' ; }
+TERMINAL_COLORS="$(for n in $(seq 0 15) ; do xrdb -get "color$n" ; done | color_fmt)"
+_color_quantize() {
+ INPUT="$(echo $1 | grep -o '#[0-9a-fA-F]\{6\}' | color_fmt)"
+ COLOR="$(printf '%s\n%s' "$INPUT" "$TERMINAL_COLORS" | awk --non-decimal-data '
+ # abs() is not built-in???
+ function abs(v) { return v < 0 ? -v : v }
+ BEGIN {
+ closest = 0; # closest ANSI color index
+ # offset line number once for input color, and another time to make color
+ # numbers start from 0 (line numbers start from 1 by default)
+ NR -= 2;
+ # keep track of the first color
+ first = 1;
+ }
+ {
+ # first line of input contains input colors
+ if (NR == -1) {
+ input_r = $1;
+ input_g = $2;
+ input_b = $3;
+ next;
+ }
+ if (NR == 0) next; # do not pick background color
+ # sloppy check to nearest RGB color
+ diff = abs(input_r - $1) + abs(input_g - $2) + abs(input_b - $3);
+ if (diff < max_diff || first) {
+ first = 0;
+ max_diff = diff;
+ closest = NR;
+ }
+ }
+ END { print closest; }
+ ')"
+ case "$COLOR" in
+ 0) echo "black" ; break ;;
+ 1) echo "dark red" ; break ;;
+ 2) echo "dark green" ; break ;;
+ 3) echo "brown" ; break ;;
+ 4) echo "dark blue" ; break ;;
+ 5) echo "dark magenta" ; break ;;
+ 6) echo "dark cyan" ; break ;;
+ 7) echo "dark gray" ; break ;;
+ 8) echo "light gray" ; break ;;
+ 9) echo "light red" ; break ;;
+ 10) echo "light green" ; break ;;
+ 11) echo "yellow" ; break ;;
+ 12) echo "light blue" ; break ;;
+ 13) echo "light magenta" ; break ;;
+ 14) echo "light cyan" ; break ;;
+ 15) echo "white" ; break ;;
+ esac
+}
+
+_cfg_dav() {
+ [ "$DAV_TYPE" != "caldav" ] && return
+ jq --raw-output '.collections[][0]' "$VDIRSYNCER_STATUS_PATH/$ID.collections" | while read -r collection ; do
+ collection_path="$XDG_DATA_HOME/vdirsyncer/$ID/$collection"
+ color_path="$collection_path/color"
+ displayname_path="$collection_path/displayname"
+ [ ! -d "$collection_path" ] && _sync
+ [ ! -f "$color_path" ] && _sync
+ [ ! -f "$displayname_path" ] && _sync
+ COLOR="$(cat "$color_path")"
+ NAME="$(cat "$displayname_path")"
+ [ -n "$COLOR" ] && [ -n "$QUANTIZE_COLOR" ] && COLOR="$(_color_quantize "$COLOR")"
+ cat << EOF
+[[$NAME]]
+path = "$collection_path"
+EOF
+ [ -n "$COLOR" ] && echo "color = \"$COLOR\""
+ echo
+ done
+}
+
+_cfg_ical() {
+ collection_path="$XDG_DATA_HOME/vdirsyncer/$ID"
+ [ ! -d "$collection_path" ] && _sync
+ cat << EOF
+[[$NAME]]
+path = "$collection_path"
+readonly = True
+EOF
+ [ -n "$COLOR" ] && echo "color = \"$COLOR\""
+
+ echo
+}
+
+. "$CONFIG_FILE"
+
+printf '# %s:%s=%s\n' vim ft dosini
diff --git a/home/dot_config/khal/symlink_config.sh b/home/dot_config/khal/symlink_config.sh
new file mode 100644
index 0000000..c47897b
--- /dev/null
+++ b/home/dot_config/khal/symlink_config.sh
@@ -0,0 +1 @@
+../vdirsyncer/config.sh
diff --git a/home/dot_config/khard/base b/home/dot_config/khard/base
new file mode 100644
index 0000000..258af81
--- /dev/null
+++ b/home/dot_config/khard/base
@@ -0,0 +1,23 @@
+[general]
+debug = no
+default_action = list
+
+[contact table]
+display = formatted_name
+group_by_addressbook = no
+reverse = no
+show_nicknames = no
+show_uids = no
+show_kinds = no
+sort = last_name
+localize_dates = no
+
+preferred_phone_number_type = voice, cell, home
+preferred_email_address_type = internet, home, work
+
+[vcard]
+preferred_version = 3.0
+search_in_source_files = no
+skip_unparsable = no
+
+# vim:ft=dosini
diff --git a/home/dot_config/khard/executable_config_gen b/home/dot_config/khard/executable_config_gen
new file mode 100644
index 0000000..75f59b1
--- /dev/null
+++ b/home/dot_config/khard/executable_config_gen
@@ -0,0 +1,25 @@
+#!/bin/sh
+EXPORT_LIB=y . "$XDG_CONFIG_HOME/vdirsyncer/config_gen"
+
+cat << EOF
+[addressbooks]
+
+EOF
+
+_cfg_dav() {
+ [ "$DAV_TYPE" != "carddav" ] && return
+ jq --raw-output '.collections[][0]' "$VDIRSYNCER_STATUS_PATH/$ID.collections" | while read -r collection ; do
+ collection_path="$XDG_DATA_HOME/vdirsyncer/$ID/$collection"
+ displayname_path="$collection_path/displayname"
+ NAME="$(cat "$displayname_path")"
+ cat << EOF
+[[$NAME]]
+path = "$collection_path"
+EOF
+ echo
+ done
+}
+
+. "$CONFIG_FILE"
+
+printf '# %s:%s=%s\n' vim ft dosini
diff --git a/home/dot_config/khard/symlink_config.sh b/home/dot_config/khard/symlink_config.sh
new file mode 100644
index 0000000..c47897b
--- /dev/null
+++ b/home/dot_config/khard/symlink_config.sh
@@ -0,0 +1 @@
+../vdirsyncer/config.sh
diff --git a/home/dot_config/kicad/kicad_common b/home/dot_config/kicad/kicad_common
new file mode 100644
index 0000000..4eabfb7
--- /dev/null
+++ b/home/dot_config/kicad/kicad_common
@@ -0,0 +1,22 @@
+UseIconsInMenus=1
+IconScale=-1
+MousewheelPAN=0
+ZoomNoCenter=0
+AutoPAN=1
+OpenGLAntialiasingMode=2
+CairoAntialiasingMode=3
+WorkingDir=/home/loek
+ShowEnvVarWarningDialog=1
+Editor=nvim
+AutoSaveInterval=600
+FileHistorySize=9
+CanvasScale=0
+PdfBrowserName=
+UseSystemBrowser=1
+[EnvironmentVariables]
+KICAD_SYMBOL_DIR=/usr/share/kicad/library
+KICAD_TEMPLATE_DIR=/usr/share/kicad/template
+KICAD_USER_TEMPLATE_DIR=/home/loek/kicad/template
+KIGITHUB=https://github.com/KiCad
+KISYS3DMOD=/usr/share/kicad/modules/packages3d/
+KISYSMOD=/usr/share/kicad/modules
diff --git a/home/dot_config/kwalletrc b/home/dot_config/kwalletrc
new file mode 100644
index 0000000..6f0a8f5
--- /dev/null
+++ b/home/dot_config/kwalletrc
@@ -0,0 +1,4 @@
+[Wallet]
+Default Wallet=Default keyring
+Enabled=false
+First Use=false
diff --git a/home/dot_config/latexmk/latexmkrc b/home/dot_config/latexmk/latexmkrc
new file mode 100644
index 0000000..6d6ec09
--- /dev/null
+++ b/home/dot_config/latexmk/latexmkrc
@@ -0,0 +1 @@
+$pdf_previewer = "fork xdg-open %O %S";
diff --git a/home/dot_config/lf/lfrc b/home/dot_config/lf/lfrc
new file mode 100644
index 0000000..d01b837
--- /dev/null
+++ b/home/dot_config/lf/lfrc
@@ -0,0 +1,30 @@
+set shell sh
+set shellopts '-eu'
+set ifs "\n"
+set filesep "\n"
+set scrolloff 10
+set info size
+set dircounts
+set mouse true
+
+set cleaner clean
+set previewer preview
+cmd open $open $fx
+
+set cursorpreviewfmt ""
+set errorfmt "\033[31m"
+set promptfmt "\033[34;1m%d\033[0m\033[1m%f\033[0m"
+set statfmt "\033[36m%p| -> %l"
+set rulerfmt " %a| %p| \033[7;31m mv %m \033[0m| \033[7;33m cp %c \033[0m| \033[7;35m sel %s \033[0m| \033[7;34m %f \033[0m"
+
+map v :toggle ; down
+map V invert
+map <backspace> set hidden! # <C-h>
+map u
+map uv unselect
+map uc clear
+
+cmd bulkrename $renamer -n $fx
+
+# vim:ft=cfg
+
diff --git a/home/dot_config/mailcap b/home/dot_config/mailcap
new file mode 100644
index 0000000..ff69b62
--- /dev/null
+++ b/home/dot_config/mailcap
@@ -0,0 +1,7 @@
+# open html files in default browser using xdg-open (appends .html to %s)
+text/html; xdg-open %s; nametemplate=%s.html; copiousoutput;
+
+# wrap plain text before paging inside mutt (prevents line breaks to be
+# prefixed with '+', makes copying URLs easier)
+text/plain; fold -w $COLUMNS %s; copiousoutput;
+
diff --git a/home/dot_config/mbsyncrc b/home/dot_config/mbsyncrc
new file mode 100644
index 0000000..bc3bedf
--- /dev/null
+++ b/home/dot_config/mbsyncrc
@@ -0,0 +1,23 @@
+IMAPAccount pipeframe
+Host mail.pipeframe.xyz
+Port 993
+User loek@mail.pipeframe.xyz
+PassCmd "pass srv/wipper/passwd/loek"
+TLSType IMAPS
+CertificateFile /etc/ssl/certs/ca-certificates.crt
+
+IMAPStore pipeframe-remote
+Account pipeframe
+
+MaildirStore pipeframe-local
+SubFolders Verbatim
+Path ~/docs/mail/pipeframe/
+Inbox ~/docs/mail/pipeframe/Inbox
+
+Channel pipeframe
+Far :pipeframe-remote:
+Near :pipeframe-local:
+Patterns *
+Create Both
+SyncState *
+
diff --git a/home/dot_config/mozc/config1.db b/home/dot_config/mozc/config1.db
new file mode 100644
index 0000000..65f9cde
--- /dev/null
+++ b/home/dot_config/mozc/config1.db
Binary files differ
diff --git a/home/dot_config/mozc/dot_gitattributes b/home/dot_config/mozc/dot_gitattributes
new file mode 100644
index 0000000..078cff9
--- /dev/null
+++ b/home/dot_config/mozc/dot_gitattributes
@@ -0,0 +1 @@
+config1.db binary diff=mozc_config
diff --git a/home/dot_config/mozc/keymap.tsv b/home/dot_config/mozc/keymap.tsv
new file mode 100644
index 0000000..d2674ab
--- /dev/null
+++ b/home/dot_config/mozc/keymap.tsv
@@ -0,0 +1,56 @@
+# This is a copy of keymap table for debugging.
+# Nothing happens when you edit this file manually.
+status key command
+Composition Backspace Backspace
+Composition Ctrl Enter Commit
+Composition Ctrl Left MoveCursorToBeginning
+Composition Ctrl Right MoveCursorToEnd
+Composition Ctrl h MoveCursorLeft
+Composition Ctrl l MoveCursorRight
+Composition ESC Cancel
+Composition End MoveCursorToEnd
+Composition Enter Commit
+Composition Home MoveCursorToBeginning
+Composition Left MoveCursorLeft
+Composition Right MoveCursorRight
+Composition Space Convert
+Composition Tab PredictAndConvert
+Conversion Backspace Cancel
+Conversion Ctrl Enter Commit
+Conversion Ctrl h SegmentWidthShrink
+Conversion Ctrl j ConvertNext
+Conversion Ctrl k ConvertPrev
+Conversion Ctrl l SegmentWidthExpand
+Conversion Down ConvertNext
+Conversion ESC Cancel
+Conversion End SegmentFocusLast
+Conversion Enter CommitOnlyFirstSegment
+Conversion Home SegmentFocusFirst
+Conversion Left SegmentFocusLeft
+Conversion Right SegmentFocusRight
+Conversion Shift Left SegmentWidthShrink
+Conversion Shift Right SegmentWidthExpand
+Conversion Shift Space ConvertPrev
+Conversion Shift Tab ConvertPrev
+Conversion Shift Up ConvertPrevPage
+Conversion Space ConvertNext
+Conversion Tab ConvertNext
+Conversion Up ConvertPrev
+Precomposition Backspace Revert
+Precomposition Shift Backspace Reconvert
+Precomposition Space InsertSpace
+Composition ASCII InsertCharacter
+Composition Kanji IMEOff
+Composition OFF IMEOff
+Composition ON IMEOn
+Conversion F1 ReportBug
+Conversion F3 ReportBug
+Conversion Kanji IMEOff
+Conversion OFF IMEOff
+Conversion ON IMEOn
+DirectInput Kanji IMEOn
+DirectInput ON IMEOn
+Precomposition ASCII InsertCharacter
+Precomposition Kanji IMEOff
+Precomposition OFF IMEOff
+Precomposition ON IMEOn
diff --git a/home/dot_config/mozc/user_dictionary.db b/home/dot_config/mozc/user_dictionary.db
new file mode 100644
index 0000000..9147808
--- /dev/null
+++ b/home/dot_config/mozc/user_dictionary.db
Binary files differ
diff --git a/home/dot_config/mpcplus/fzmp.conf b/home/dot_config/mpcplus/fzmp.conf
new file mode 100644
index 0000000..22439c3
--- /dev/null
+++ b/home/dot_config/mpcplus/fzmp.conf
@@ -0,0 +1,3 @@
+default_view songs
+full_song_format [[[%artist% - %album% / ][%title%]]|%file%]
+fzf_options --ignore-case
diff --git a/home/dot_config/mpd/mpd.conf.tmpl b/home/dot_config/mpd/mpd.conf.tmpl
new file mode 100644
index 0000000..affaec1
--- /dev/null
+++ b/home/dot_config/mpd/mpd.conf.tmpl
@@ -0,0 +1,45 @@
+{{- $host := dig "mpd" "host" false . -}}
+{{- $base_dir := dig "mpd" "base_dir" "/mnt/mpd" . -}}
+
+{{- $music_directory := "https://media.pipeframe.xyz/music" -}}
+{{- if $host -}}
+{{- $music_directory = printf "%s/music" $base_dir -}}
+{{- end -}}
+
+music_directory "{{ $music_directory }}"
+playlist_directory "{{ $base_dir }}/playlists"
+
+pid_file "{{ $base_dir }}/mpd.pid"
+state_file "{{ $base_dir }}/mpdstate"
+{{- if $host }}
+db_file "{{ $base_dir }}/mpd.db"
+{{- end }}
+
+bind_to_address "{{ ternary "*" "0.0.0.0" $host }}"
+port "6600"
+restore_paused "yes"
+{{- if $host }}
+auto_update "yes"
+user "{{ .chezmoi.username }}"
+group "{{ .chezmoi.group }}"
+default_permissions "read,add,control,admin"
+{{- end }}
+
+replaygain "track"
+replaygain_preamp "6"
+{{- if not $host }}
+
+database {
+ plugin "proxy"
+ host "pipeframe.xyz"
+}
+{{- end }}
+
+audio_output {
+ type "pulse"
+ name "desktop output"
+}
+
+input_cache {
+ size "512 MB"
+}
diff --git a/home/dot_config/mpv/input.conf b/home/dot_config/mpv/input.conf
new file mode 100644
index 0000000..711242e
--- /dev/null
+++ b/home/dot_config/mpv/input.conf
@@ -0,0 +1,4 @@
+ALT+c script-message-to copy_subs copy
+ALT+SHIFT+c script-message-to copy_subs auto
+CTRL+z set sub-delay 0
+
diff --git a/home/dot_config/mpv/mpv.conf b/home/dot_config/mpv/mpv.conf
new file mode 100644
index 0000000..cc3c44f
--- /dev/null
+++ b/home/dot_config/mpv/mpv.conf
@@ -0,0 +1,15 @@
+# Start in fullscreen mode by default.
+fs=yes
+
+# Display English subtitles if available.
+slang=en
+
+# Override ASS subtitles with same format as SRT
+sub-ass-override=force
+sub-scale=0.5
+
+# LOUD
+volume-max=200
+
+# enable hardware-accelerated decoding
+hwdec=auto
diff --git a/home/dot_config/mpv/scripts/copy-subs.lua b/home/dot_config/mpv/scripts/copy-subs.lua
new file mode 100644
index 0000000..973e1f2
--- /dev/null
+++ b/home/dot_config/mpv/scripts/copy-subs.lua
@@ -0,0 +1,32 @@
+_G.auto = false
+
+function copy()
+ local sub = mp.get_property("sub-text")
+ if sub then
+ -- remove some specific unicode characters
+ sub = sub:gsub('\u{27a1}', '')
+ sub = sub:gsub('\u{fffd}', '')
+ sub = sub:gsub('\u{3013}', '')
+ sub = sub:gsub('\u{2015}', '')
+
+ sub = sub:gsub('\n', ' ') -- replace newlines with space
+ sub = sub:gsub('\'', '\'\\\'\'') -- escape single quotes
+ os.execute("echo '" .. sub .. "' | xclip -selection clipboard -i")
+ end
+end
+
+function autocopy()
+ if _G.auto == false then return end
+ copy()
+end
+
+function toggle_autocopy()
+ _G.auto = not _G.auto
+ mp.osd_message("autocopy " .. (_G.auto and "on" or "off"))
+end
+
+mp.add_key_binding(nil, "copy", copy)
+
+mp.observe_property("sub-text", "string", autocopy)
+mp.add_key_binding(nil, "auto", toggle_autocopy)
+
diff --git a/home/dot_config/ncmpcpp/bindings b/home/dot_config/ncmpcpp/bindings
new file mode 100644
index 0000000..3e748fc
--- /dev/null
+++ b/home/dot_config/ncmpcpp/bindings
@@ -0,0 +1,52 @@
+def_key "/"
+ find_item_forward
+def_key "n"
+ next_found_item
+def_key "N"
+ previous_found_item
+
+def_key "-"
+ volume_down
+def_key "="
+ volume_up
+
+def_key "j"
+ scroll_down
+def_key "k"
+ scroll_up
+def_key "ctrl-u"
+ page_up
+def_key "ctrl-d"
+ page_down
+def_key "g"
+ move_home
+def_key "G"
+ move_end
+
+def_key "b"
+ jump_to_browser
+def_key "."
+ show_lyrics
+
+def_key "h"
+ previous_column
+def_key "l"
+ next_column
+
+def_key "m"
+ move_selected_items_up
+def_key "M"
+ move_selected_items_down
+
+def_key "v"
+ select_item
+ scroll_down
+def_key "V"
+ reverse_selection
+def_key "ctrl-v"
+ remove_selection
+
+def_key "f"
+ seek_forward
+def_key "F"
+ seek_backward
diff --git a/home/dot_config/ncmpcpp/config.tmpl b/home/dot_config/ncmpcpp/config.tmpl
new file mode 100644
index 0000000..e3e7844
--- /dev/null
+++ b/home/dot_config/ncmpcpp/config.tmpl
@@ -0,0 +1,37 @@
+mpd_host = "0.0.0.0"
+mpd_port = "6600"
+#mpd_host = "/mnt/e/mpd/socket"
+mpd_music_dir = "/mnt/e/mpd/music"
+mpd_connection_timeout = 1
+mpd_crossfade_time = 1
+
+external_editor = "{{ env "EDITOR" }}"
+ncmpcpp_directory = "{{ env "XDG_CONFIG_HOME" }}/ncmpcpp"
+lyrics_directory = "{{ env "XDG_CACHE_HOME" }}/lyrics"
+
+progressbar_look = "───"
+progressbar_color = black
+progressbar_elapsed_color = default
+visualizer_color = default
+playlist_display_mode = classic
+autocenter_mode = yes
+centered_cursor = yes
+user_interface = classic
+connected_message_on_startup = no
+
+header_visibility = no
+statusbar_visibility = no
+titles_visibility = no
+
+state_flags_color = black:b
+main_window_color = white
+current_item_prefix = "$r"
+song_columns_list_format = "(20)[]{a} (6f)[blue]{NE} (50)[default]{t|f:Title} (20)[blue]{} (7f)[magenta]{l}"
+song_list_format = " {{ "{{" }}%a - %t}|{%f}}$R{ %l} "
+window_border_color = default
+
+alternative_header_first_line_format = "{{ "{{" }}%a $8-$0 %t}|{%f}}"
+alternative_header_second_line_format = "$8{{ "{{" }}%b}|{%D}}"
+
+now_playing_prefix = "$b$0"
+now_playing_suffix = "$/b"
diff --git a/home/dot_config/neomutt/neomuttrc b/home/dot_config/neomutt/neomuttrc
new file mode 100644
index 0000000..af63b3f
--- /dev/null
+++ b/home/dot_config/neomutt/neomuttrc
@@ -0,0 +1,82 @@
+# name
+set real_name = "Loek Le Blansch"
+set from = "loek@pipeframe.xyz"
+
+# e-mail server
+set folder = "~/docs/mail/pipeframe/"
+set spool_file = "+Inbox"
+set record = "+Sent"
+set trash = "+Trash"
+set postponed = "+Drafts"
+
+# credentials
+set imap_user = "loek"
+set imap_pass = "$(pass srv/wipper/passwd/loek)"
+set smtp_pass = "$imap_pass"
+set smtp_url = "smtp://$imap_user@mail.pipeframe.xyz:587"
+set smtp_authenticators = 'login'
+set ssl_starttls = yes
+set ssl_force_tls = yes
+
+# automatically refresh incoming mail
+set mail_check = 60
+set wait_key = no
+push "<shell-escape> systemctl --user start mbsync & <enter>"
+
+# mailboxes
+mailboxes +Inbox +Drafts +Junk +Sent +Trash +Archive
+
+# open files
+set mailcap_path = "$XDG_CONFIG_HOME/mailcap"
+
+# keybinds (more vim-like than default)
+macro index,pager a "<save-message>+Archive<enter>" "Archive Message" # archive
+bind index,pager n search-next # next search match
+bind index,pager N search-opposite # previous search match
+bind generic,index g noop # clear immediate action of `g` (required for `gg`)
+bind generic,index gg first-entry # goto top of index
+bind generic,index G last-entry # goto bottom of index
+bind index \Cu previous-page # page up
+bind index \Cd next-page # page down
+bind attach <return> view-mailcap # always use mailcap to view attachments
+
+# miscellaneous options
+set fast_reply = yes
+set confirm_append = no
+set delete = yes
+set include = yes
+set sort = threads
+set header_cache = "$XDG_CACHE_HOME/neomutt/hcache"
+set edit_headers
+set auto_edit = yes
+set mime_type_query_command = "xdg-mime query filetype"
+unset prompt_after
+
+# format strings
+set status_format = "%D %> %P "
+set folder_format = "%i"
+set index_format = " %Z %[%m月%d日] %-15.15L %s "
+set browser_abbreviate_mailboxes = yes
+
+# external programs
+set editor = "$EDITOR"
+# set pager = "less"
+set sendmail = "/usr/bin/msmtp"
+
+# colors
+color indicator reverse default default # selection
+color index none white default # all other mail
+color index bold default default "~N|~O" # new/unopened mail
+uncolor status
+uncolor tree
+uncolor search
+color hdrdefault blue default
+color quoted blue black
+color signature blue black
+color attachment brightblack default
+color prompt brightmagenta black
+color message brightred default
+color error brightred black
+color markers red black
+color tilde brightmagenta black
+
diff --git a/home/dot_config/neovide/config.toml b/home/dot_config/neovide/config.toml
new file mode 100644
index 0000000..369f982
--- /dev/null
+++ b/home/dot_config/neovide/config.toml
@@ -0,0 +1 @@
+multigrid = true
diff --git a/home/dot_config/nvim/coc-settings.json b/home/dot_config/nvim/coc-settings.json
new file mode 100644
index 0000000..fc11396
--- /dev/null
+++ b/home/dot_config/nvim/coc-settings.json
@@ -0,0 +1,44 @@
+{
+ "suggest.noselect": true,
+ "python.jediEnabled": false,
+ "inlayHint.enable": false,
+ "languageserver": {
+ "clangd": {
+ "command": "clangd",
+ "rootPatterns": ["compile_flags.txt", "compile_commands.json"],
+ "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"]
+ },
+ "dart": {
+ "command": "dart",
+ "args": [
+ "/opt/dart-sdk/bin/snapshots/analysis_server.dart.snapshot",
+ "--lsp",
+ "--client-id",
+ "vim",
+ "--client-version",
+ "coc.nvim"
+ ],
+ "filetypes": ["dart"],
+ "trace.server": "verbose"
+ },
+ "arduino":{
+ "command":"/usr/bin/arduino-language-server",
+ "rootPatterns":["*.ino"],
+ "filetypes":["arduino"],
+ "args":["-cli", "/bin/arduino-cli", "-clangd", "/bin/clangd", "-cli-config", "/home/loek/.arduino15/arduino-cli.yaml"]
+ },
+ "sql": {
+ "command": "sqls",
+ "filetypes": ["sql", "mysql"]
+ },
+ "vhdl": {
+ "command": "vhdl_ls",
+ "filetypes": ["vhdl"]
+ },
+ "glsl": {
+ "command": "glsl_analyzer",
+ "filetypes": ["glsl", "vert", "tesc", "tese", "frag", "geom", "comp"]
+ }
+ },
+ "java.import.gradle.java.home": "/usr/lib/jvm/java-17-openjdk"
+}
diff --git a/home/dot_config/nvim/color-tweaks.vim b/home/dot_config/nvim/color-tweaks.vim
new file mode 100644
index 0000000..2fd2227
--- /dev/null
+++ b/home/dot_config/nvim/color-tweaks.vim
@@ -0,0 +1,41 @@
+" change default vim-sneak colors to be more readable
+hi! SneakLabel gui=reverse
+hi! SneakLabelMask gui=reverse
+
+" consistent cursor colors
+hi! Cursor gui=NONE guifg=bg guibg=fg
+hi! link iCursor Cursor
+
+" fix terminal color
+hi! link TermCursor Cursor
+hi! link TermCursorNC Cursor
+
+" fix which key color
+hi! link WhichKeyFloating NormalFloat
+
+" line numbers / gutter colors
+hi! SignColumn guibg=NONE ctermbg=NONE
+hi GitGutterAdd guibg=NONE
+hi GitGutterChange guibg=NONE
+hi GitGutterDelete guibg=NONE
+hi GitGutterAddIntraLine guibg=NONE
+hi GitGutterAddInvisible guibg=NONE
+hi GitGutterChangeDelete guibg=NONE
+hi GitGutterChangeInvisible guibg=NONE
+hi GitGutterDeleteIntraLine guibg=NONE
+hi GitGutterDeleteInvisible guibg=NONE
+hi CocErrorSign guibg=NONE
+hi CocGitAddedSign guibg=NONE
+hi CocGitChangeRemovedSign guibg=NONE
+hi CocGitChangedSign guibg=NONE
+hi CocGitRemovedSign guibg=NONE
+hi CocGitTopRemovedSign guibg=NONE
+hi CocHintSign guibg=NONE
+hi CocInfoSign guibg=NONE
+hi CocWarningSign guibg=NONE
+
+" fix disappearing CocFadeOut
+hi! link Conceal Comment
+
+hi! link WinSeparator LineNr
+hi! link NonText EndOfBuffer
diff --git a/home/dot_config/nvim/ftplugin/tex.vim b/home/dot_config/nvim/ftplugin/tex.vim
new file mode 100644
index 0000000..4e643f1
--- /dev/null
+++ b/home/dot_config/nvim/ftplugin/tex.vim
@@ -0,0 +1,5 @@
+setlocal cc=86
+setlocal textwidth=85
+noremap \b c\begin{<C-R>"}<CR>\end{<C-R>"}
+let g:Tex_SmartKeyQuote=0
+
diff --git a/home/dot_config/nvim/init.vim b/home/dot_config/nvim/init.vim
new file mode 100644
index 0000000..6d3768c
--- /dev/null
+++ b/home/dot_config/nvim/init.vim
@@ -0,0 +1,409 @@
+let mapleader = " "
+set modeline
+set wrap
+set autoindent
+set noexpandtab
+set tabstop=2
+set shiftwidth=2
+set termguicolors
+set shortmess+=It
+set splitbelow splitright
+set noshowmode
+set ignorecase
+set smartcase
+set timeoutlen=500
+set updatetime=100
+set smoothscroll
+set mouse=a
+set cino=N-s,E-s,l1,g-1,j1
+set linebreak " set wrap but don't wrap inside words
+set viminfo+='1000,n~/.local/nvim/viminfo
+set guifont=monospace:h7.5:#e-subpixelantialias
+set linespace=3
+set tabpagemax=999
+set breakindent
+set breakindentopt+=list:-1,shift:-2
+set showbreak=:\
+set formatoptions+=mM
+set tags^=build/tags
+set ssop-=options
+set guicursor=n-v-c-sm:block,i-ci-ve:ver20,r-cr-o:hor05,t:block-TermCursor
+let g:sneak#label = 1
+let g:which_key_map = {}
+let g:airline_powerline_fonts = 1
+let g:minimap_highlight='Visual'
+let g:python3_host_prog='/usr/bin/python3'
+let g:DiffColors = 0
+let g:AutoPairsMultilineClose = 0
+filetype plugin on
+
+if exists("g:neovide")
+ nmap <silent> <C-=> :lua vim.g.neovide_scale_factor = vim.g.neovide_scale_factor + 0.1<CR>
+ nmap <silent> <C-ScrollWheelUp> :lua vim.g.neovide_scale_factor = vim.g.neovide_scale_factor + 0.1<CR>
+ nmap <silent> <C--> :lua vim.g.neovide_scale_factor = vim.g.neovide_scale_factor - 0.1<CR>
+ nmap <silent> <C-ScrollWheelDown> :lua vim.g.neovide_scale_factor = vim.g.neovide_scale_factor - 0.1<CR>
+ nmap <silent> <C-0> :lua vim.g.neovide_scale_factor = 1<CR>
+ let g:smoothie_enabled = v:false
+ let g:neovide_scroll_animation_length = 0.16
+ let g:neovide_floating_shadow = v:false
+ let g:neovide_cursor_animation_length = 0.04
+ let g:neovide_cursor_trail_size = 0.0
+ let g:neovide_padding_top=10
+ let g:neovide_padding_left=10
+ let g:neovide_padding_right=10
+ let g:neovide_padding_bottom=10
+endif
+
+" plugged
+call plug#begin('~/.config/nvim/plugged')
+" tim <3
+Plug 'tpope/vim-surround'
+Plug 'tpope/vim-speeddating'
+Plug 'tpope/vim-eunuch'
+Plug 'tpope/vim-commentary'
+
+" quality of life
+Plug 'jiangmiao/auto-pairs'
+Plug 'itchyny/lightline.vim'
+Plug 'terryma/vim-multiple-cursors'
+Plug 'liuchengxu/vim-which-key'
+Plug 'justinmk/vim-sneak'
+Plug 'mbbill/undotree'
+Plug 'neoclide/coc.nvim', {'branch': 'release'}
+Plug 'puremourning/vimspector'
+Plug 'junegunn/goyo.vim'
+Plug 'psliwka/vim-smoothie'
+Plug 'airblade/vim-gitgutter'
+Plug 'wellle/targets.vim'
+Plug 'dkarter/bullets.vim'
+Plug 'editorconfig/editorconfig-vim'
+Plug 'rickhowe/diffunitsyntax'
+Plug 'lervag/file-line'
+Plug 'vim-scripts/AnsiEsc.vim'
+Plug 'vim-scripts/taglist.vim'
+
+" language plugins
+Plug 'lervag/vimtex'
+Plug 'hail2u/vim-css3-syntax'
+Plug 'octol/vim-cpp-enhanced-highlight'
+Plug 'vim-python/python-syntax'
+Plug 'dart-lang/dart-vim-plugin'
+Plug 'bartlomiejdanek/vim-dart'
+Plug 'HerringtonDarkholme/yats.vim'
+Plug 'cespare/vim-toml'
+Plug 'tikhomirov/vim-glsl'
+Plug 'vim-scripts/syntaxm4.vim'
+Plug 'elkowar/yuck.vim'
+Plug 'eraserhd/parinfer-rust', {'do': 'cargo build --release'}
+Plug 'kaarmu/typst.vim'
+Plug 'aklt/plantuml-syntax'
+Plug 'fymyte/rasi.vim'
+Plug 'habamax/vim-asciidoctor'
+Plug 'lonkaars/coc-khard'
+Plug 'sile-typesetter/vim-sile'
+Plug 'ahf/cocci-syntax'
+Plug 's3rvac/vim-syntax-jira'
+
+" themes
+Plug 'arzg/vim-colors-xcode'
+Plug 'romgrk/github-light.vim'
+Plug 'vv9k/vim-github-dark'
+Plug 'rose-pine/neovim', {'as': 'rose-pine'}
+
+Plug '~/.config/nvim/local/coc-markdown-links'
+call plug#end()
+
+" keybinds
+tnoremap <Esc> <C-\><C-n>
+nnoremap tt :tabnew<CR>
+nnoremap <CR> o<Esc>
+nnoremap <leader>qf <Plug>(coc-fix-current)
+nnoremap <silent> * yiw:let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>
+nnoremap <silent> <A-j> :m +1<CR>
+nnoremap <silent> <A-k> :m -2<CR>
+
+nnoremap <silent> gd :call CocAction('jumpDefinition')<cr>
+nnoremap <silent> <leader>d :call CocAction('jumpDefinition', 'vsplit')<cr>
+
+imap <C-h> <Left>
+imap <C-j> <Down>
+imap <C-k> <Up>
+imap <C-l> <Right>
+
+command UTF2Latex
+ \ :%s/‘/`/ge |
+ \ :%s/’/'/ge |
+ \ :%s/“/``/ge |
+ \ :%s/”/''/ge |
+ \ :%s/–/--/ge |
+ \ :%s/—/---/ge
+command UTF2Ascii
+ \ :%s/‘/'/ge |
+ \ :%s/’/'/ge |
+ \ :%s/“/"/ge |
+ \ :%s/”/"/ge |
+ \ :%s/–/--/ge |
+ \ :%s/—/---/ge
+
+" leader keybindings
+nnoremap <silent> <leader> :WhichKey '<space>'<CR>
+
+map <leader>vo <Plug>VimspectorContinue
+map <leader>vq <Plug>VimspectorStop
+map <leader>vr <Plug>VimspectorRestart
+map <leader>vp <Plug>VimspectorPause
+map <leader>vb <Plug>VimspectorToggleBreakpoint
+map <leader>vc <Plug>VimspectorToggleConditionalBreakpoint
+map <leader>vf <Plug>VimspectorAddFunctionBreakpoint
+map <leader>vn <Plug>VimspectorStepOver
+map <leader>vi <Plug>VimspectorStepInto
+map <leader>vu <Plug>VimspectorStepOut
+let g:which_key_map.v = {
+ \ 'name': '+vimspector',
+ \ 'o': 'continue',
+ \ 'q': 'stop',
+ \ 'r': 'restart',
+ \ 'p': 'pause',
+ \ 'b': 'toggle breakpoint',
+ \ 'c': 'toggle conditional breakpoint',
+ \ 'f': 'add function breakpoint',
+ \ 'n': 'step over',
+ \ 'i': 'step into',
+ \ 'u': 'step out'
+ \ }
+
+map <leader>p "+p
+map <leader>y "+y
+let g:which_key_map.p = 'x11 paste'
+let g:which_key_map.y = 'x11 yank'
+
+map <silent> <leader>w :w<cr>
+let g:which_key_map.w = 'write'
+
+map <silent> <leader>dv :VimtexView<cr>
+map <silent> <leader>dc :VimtexCompile<cr>
+map <silent> <leader>de :VimtexErrors<cr>
+map <silent> <leader>dt :VimtexTocToggle<cr>
+let g:which_key_map.d = {
+ \ 'name': '+document',
+ \ 'v': 'view',
+ \ 'c': 'compile',
+ \ 'e': 'errors',
+ \ 't': 'table of contents'
+ \ }
+
+map <silent> <leader>ts :sp term://zsh<cr>i
+map <silent> <leader>tv :vsp term://zsh<cr>i
+map <silent> <leader>tt :tabnew term://zsh<cr>i
+let g:which_key_map.t = {
+ \ 'name': '+term',
+ \ 's': 'split',
+ \ 'v': 'vsplit',
+ \ 't': 'tab'
+ \ }
+
+map <silent> <leader>.v :tabnew ~/.config/nvim/init.vim<cr>
+let g:which_key_map['.'] = {
+ \ 'name': '+config',
+ \ 'v': 'vim',
+ \ }
+
+map <silent> <leader>u :UndotreeToggle<cr>
+let g:which_key_map.u = 'toggle undo tree'
+
+nnoremap <silent> <leader>e 0f!xC<c-r>=system(@-)<cr><esc>ddk$
+let g:which_key_map.e = 'read and execute after !'
+
+nnoremap <leader>] <c-w>v<c-]>zt
+let g:which_key_map[']'] = 'open tag in split'
+
+nnoremap <silent> <leader>[ :call jobstart(['sdk10-dox-open', expand("<cword>")], {'detach': v:true})<enter>
+
+" cmd maps
+cnoreabbrev W w
+cnoreabbrev sudow w !sudo tee %
+
+" emacs bindings in vim command-line
+cnoremap <A-b> <S-Left>
+cnoremap <A-f> <S-Right>
+cnoremap <C-a> <Home>
+cnoremap <C-e> <End>
+cnoremap <A-backspace> <C-w>
+
+" hexokinase
+let g:Hexokinase_termDisabled = 1
+let g:Hexokinase_optOutPatterns = [ 'colour_names' ]
+
+" lightline
+let g:lightline = {
+ \ 'colorscheme': 'auto',
+ \ 'mode_map': {
+ \ 'n' : 'norm',
+ \ 'i' : 'ins',
+ \ 'R' : 'rep',
+ \ 'v' : 'vis',
+ \ 'V' : 'v-l',
+ \ "\<C-v>": 'v-b',
+ \ 'c' : 'cmd',
+ \ 's' : 'sel',
+ \ 'S' : 's-l',
+ \ "\<C-s>": 's-b',
+ \ 't': 'term',
+ \ },
+ \ 'active': {
+ \ 'left': [
+ \ [ 'mode', 'paste' ],
+ \ [ 'readonly', 'filename', 'modified'],
+ \ ],
+ \ 'right': [ [ 'lineinfo' ] ],
+ \ },
+ \ 'inactive': {
+ \ 'left': [
+ \ [ 'readonly', 'filename', 'modified'],
+ \ ],
+ \ 'right': [ [ 'lineinfo' ] ],
+ \ },
+ \ 'tabline': {
+ \ 'left': [ [ 'tabs' ] ],
+ \ 'right': [ ],
+ \ },
+ \ 'subseparator': {
+ \ 'left': '',
+ \ 'right': '',
+ \ },
+ \ }
+call lightline#init()
+
+" vimtex config
+let g:tex_flavor = 'latex'
+let g:vimtex_quickfix_open_on_warning = 0
+let g:vimtex_imaps_enabled = 0
+let g:vimtex_compiler_method = 'latexmk'
+let g:vimtex_compiler_latexmk_engines = { '_': '' }
+
+" TeX quotes
+autocmd FileType tex let b:surround_{char2nr("q")} = "`\r'"
+autocmd FileType tex let b:surround_{char2nr('Q')} = "``\r''"
+autocmd FileType tex let b:AutoPairs = {'(':')', '[':']', '{':'}', "``":"''", "`":"'", '$':'$', '"':'"'}
+
+" AutoPairs for plantuml
+autocmd FileType plantuml let b:AutoPairs = {'(':')', '[':']', '{':'}', '`':'`'}
+
+" coc.vim <tab> completion and <cr> stuff
+function! CheckBackspace() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~# '\s'
+endfunction
+inoremap <silent><expr> <TAB>
+ \ coc#pum#visible() ? coc#pum#next(1) :
+ \ CheckBackspace() ? "\<Tab>" :
+ \ coc#refresh()
+inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
+
+function! s:check_back_space() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~# '\s'
+endfunction
+
+if has("patch-8.1.1564")
+ set signcolumn=number
+else
+ set signcolumn=yes
+endif
+
+inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
+
+" coc code navigation
+map <silent> <leader>cd <Plug>(coc-definition)
+map <silent> <leader>cy <Plug>(coc-type-definition)
+map <silent> <leader>ci <Plug>(coc-implementation)
+map <silent> <leader>cr <Plug>(coc-references)
+map <leader>cn <Plug>(coc-rename)
+let g:which_key_map.c = {
+ \ 'name': '+coc',
+ \ 'd': 'definition',
+ \ 'y': 'type definition',
+ \ 'i': 'implementation',
+ \ 'r': 'references',
+ \ 'n': 'rename'
+ \ }
+
+" use <c-space>for trigger completion
+inoremap <silent><expr> <c-space> coc#refresh()
+
+" auto-comment uit
+" autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
+
+" which key register dict
+call which_key#register('<Space>', "g:which_key_map")
+
+" no line numbers in terminal
+augroup TerminalStuff
+ " Clear old autocommands
+ au!
+ autocmd TermOpen * setlocal nonumber norelativenumber
+ autocmd TermOpen * set signcolumn=no
+augroup END
+
+" python-syntax
+" let g:python_highlight_all = 1
+let g:python_recommended_style = 0
+" autocmd FileType python setlocal noexpandtab
+au BufRead,BufNewFile *.py set expandtab
+
+function! SynStack()
+ if !exists("*synstack")
+ return
+ endif
+ echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
+endfunc
+
+" markdown
+let g:markdown_enable_spell_checking = 0
+au FileType markdown set expandtab
+
+" asciidoc
+au FileType asciidoctor set expandtab
+
+" binary files
+augroup Binary
+ au!
+ au BufReadPre *.bin let &bin=1
+ au BufReadPost *.bin if &bin | %!xxd
+ au BufReadPost *.bin set ft=xxd | endif
+ au BufWritePre *.bin if &bin | %!xxd -r
+ au BufWritePre *.bin endif
+ au BufWritePost *.bin if &bin | %!xxd
+ au BufWritePost *.bin set nomod | endif
+ au BufWritePost *.bin set noeol
+augroup END
+
+" highlight Zephyr .overlay files as devicetree source (dts)
+augroup devicetree_ft
+ au!
+ au BufRead,BufNewFile *.overlay set syntax=dts
+ au BufRead,BufNewFile *.dtsi set syntax=dts
+augroup END
+
+augroup BibLaTeX
+ " add allowed characters in biblatex labels to word delimiters
+ autocmd!
+ autocmd FileType bib setlocal iskeyword+=:,-
+augroup END
+
+" sneak
+let g:sneak#use_ic_scs = 0
+
+" fcitx5
+autocmd InsertEnter * call system("fcitx5-temp-restore &")
+autocmd InsertLeave * call system("fcitx5-temp-off &")
+
+" colorscheme
+source $XDG_CONFIG_HOME/nvim/mode.vim
+
+" use .exrc files
+set exrc
+set secure
+
+" file-line
+let g:file_line_crosshairs = v:false
diff --git a/home/dot_config/nvim/mode.vim b/home/dot_config/nvim/mode.vim
new file mode 100644
index 0000000..e1deaca
--- /dev/null
+++ b/home/dot_config/nvim/mode.vim
@@ -0,0 +1,9 @@
+" this file should only contain colorscheme information, and sourcing it
+" should cause colors set by `mode` to update in an existing neovim session
+source $XDG_CONFIG_HOME/nvim/mode/colorscheme.vim
+source $XDG_CONFIG_HOME/nvim/mode/termcolors.vim
+source $XDG_CONFIG_HOME/nvim/mode/lightline.vim
+call lightline#colorscheme()
+
+source $XDG_CONFIG_HOME/nvim/color-tweaks.vim
+
diff --git a/home/dot_config/pam-gnupg.tmpl b/home/dot_config/pam-gnupg.tmpl
new file mode 100644
index 0000000..710dc91
--- /dev/null
+++ b/home/dot_config/pam-gnupg.tmpl
@@ -0,0 +1,2 @@
+{{ env "GNUPGHOME" }}
+D8D22B94C13557BF2B5A0DCF4AF5A972E2FAF84F
diff --git a/home/dot_config/picom.conf b/home/dot_config/picom.conf
new file mode 100644
index 0000000..372806a
--- /dev/null
+++ b/home/dot_config/picom.conf
@@ -0,0 +1,132 @@
+# do not touch, shit finally works w/ gpu
+# backend = "xrender";
+backend = "glx";
+vsync = true;
+
+corner-radius = 10;
+
+shadow = true;
+shadow-radius = 48;
+shadow-opacity = 0.2;
+shadow-offset-y = -36;
+shadow-offset-x = -48;
+
+fade = false;
+fade-in-step = 0.3;
+fade-out-step = 0.18;
+fade-delta = 16;
+
+rules = (
+ {
+ match = "class_i *= 'scrcpy'";
+ corner-radius = 32;
+ },
+ {
+ match = "!I3_FLOATING_WINDOW@ = 1";
+ shadow = false;
+ corner-radius = 0;
+ },
+ {
+ match = "window_type *= 'desktop'";
+ shadow = false;
+ },
+ {
+ match = "window_type *= 'splash'";
+ shadow = false;
+ },
+ {
+ match = "window_type *= 'notification'";
+ fade = true;
+ corner-radius = 12;
+ shadow = true;
+ },
+ {
+ match = "_NET_WM_STATE@[*] = '_NET_WM_STATE_ABOVE'";
+ shadow = true;
+ corner-radius = 10;
+ },
+ {
+ match = "window_type *= 'menu' && override_redirect";
+ corner-radius = 0;
+ full-shadow = true;
+ shadow = true;
+ },
+ {
+ match = "window_type *= 'tooltip'";
+ fade = true;
+ shadow = false;
+ corner-radius = 0;
+ },
+ {
+ match = "window_type *= 'dock'";
+ shadow = false;
+ corner-radius = 0;
+ animations = (
+ {
+ triggers = [ "open" ];
+ preset = "slide-in";
+ direction = "up";
+ duration = 0.200;
+ },
+ {
+ triggers = [ "close" ];
+ preset = "slide-out";
+ direction = "up";
+ duration = 0.175;
+ },
+ );
+ },
+ {
+ match = "window_type *= 'combo'";
+ shadow = true;
+ corner-radius = 10;
+ },
+ {
+ match = "window_type *= 'popup'";
+ shadow = true;
+ corner-radius = 10;
+ },
+ {
+ match = "class_i *= 'RAIL'";
+ corner-radius = 0;
+ },
+ {
+ match = "_NET_WM_STATE@[*] = '_NET_WM_STATE_FULLSCREEN'";
+ shadow = false;
+ },
+)
+
+animations = (
+ {
+ triggers = [ "geometry" ];
+ offset-x = {
+ curve = "cubic-bezier(0.05, 0, 0, 1)";
+ duration = 0.250;
+ start = "window-x-before - window-x";
+ end = 0;
+ };
+ offset-y = {
+ curve = "cubic-bezier(0.05, 0, 0, 1)";
+ duration = 0.250;
+ start = "window-y-before - window-y";
+ end = 0;
+ };
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ saved-image-blend = 0;
+ },
+ {
+ triggers = [ "open" ];
+ preset = "appear";
+ scale = 0.95;
+ duration = 0.075;
+ },
+ {
+ triggers = [ "close" ];
+ preset = "disappear";
+ scale = 0.95;
+ duration = 0.075;
+ },
+);
+
+# vim: ft=conf
diff --git a/home/dot_config/pipewire/pipewire.conf.d/50-bitrate.conf b/home/dot_config/pipewire/pipewire.conf.d/50-bitrate.conf
new file mode 100644
index 0000000..bbf2c92
--- /dev/null
+++ b/home/dot_config/pipewire/pipewire.conf.d/50-bitrate.conf
@@ -0,0 +1,5 @@
+context.properties = {
+ default.clock.rate = 96000
+ default.clock.allowed-rates = [ 96000 ]
+}
+
diff --git a/home/dot_config/poke/pokerc.conf b/home/dot_config/poke/pokerc.conf
new file mode 100644
index 0000000..90a320f
--- /dev/null
+++ b/home/dot_config/poke/pokerc.conf
@@ -0,0 +1,7 @@
+.set obase 16
+.set omode tree
+.set pretty-print yes
+.set oacutoff 32
+
+pk_dump_cluster_by = 4
+
diff --git a/home/dot_config/polybar/config.ini.tmpl b/home/dot_config/polybar/config.ini.tmpl
new file mode 100644
index 0000000..4af32e6
--- /dev/null
+++ b/home/dot_config/polybar/config.ini.tmpl
@@ -0,0 +1,169 @@
+[barsettings]
+padding = 1.9
+include-file = ./colors.ini
+
+[global/wm]
+margin-bottom = 50
+margin-top = 0
+
+[bar/main]
+tray-position = right
+tray-padding = ${barsettings.padding}
+tray-background = ${color.bg}
+tray-margin = 8
+
+monitor =
+monitor-fallback =
+monitor-strict = false
+
+override-redirect = false
+
+bottom = false
+fixed-center = true
+
+width = 100%
+height = 20
+offset-x = 0
+offset-y = 0
+
+background = ${color.bg}
+foreground = ${color.fg}
+
+radius-top = 0.0
+radius-bottom = 0.0
+
+padding = 5
+module-margin-left = 1
+module-margin-right = 1
+
+font-0 = "sans-serif:pixelsize=8:weight=regular:size=0;2"
+font-1 = "sans-serif:pixelsize=8:weight=bold:size=0;2"
+
+font-2 = "Hiragino Kaku Gothic ProN W3:pixelsize=8:weight=medium:size=0;1"
+font-3 = "Hiragino Kaku Gothic ProN W6:pixelsize=8:weight=medium:size=0;1"
+font-4 = "Noto Sans KR:pixelsize=8:weight=medium:size=0;2"
+font-5 = "Noto Sans CJK SC:pixelsize=8:weight=medium:size=0;2"
+
+modules-left = time date
+modules-center = mpd
+modules-right = wacomtouch keyboard volume
+
+separator =
+
+spacing = 0
+
+dim-value = 1.0
+
+wm-name =
+
+locale = {{ env "LANG" }}
+
+wm-restack = i3
+
+enable-ipc = true
+
+click-left =
+click-middle =
+click-right =
+scroll-up =
+scroll-down =
+double-click-left =
+double-click-middle =
+double-click-right =
+
+cursor-click =
+cursor-scroll =
+
+[settings]
+screenchange-reload = false
+
+compositing-background = source
+compositing-foreground = over
+compositing-overline = over
+compositing-underline = over
+compositing-border = over
+
+format-foreground = ${color.fg}
+format-background = ${color.bg}
+format-padding = ${barsettings.padding}
+
+pseudo-transparency = false
+
+[module/volume]
+type = internal/pulseaudio
+format-volume = <label-volume>
+label-volume = %percentage%%
+label-muted = "muted"
+
+[module/date]
+type = internal/date
+interval = 1.0
+time = %m月%d日 (%a)
+format = <label>
+label = %time%
+
+[module/time]
+type = internal/date
+interval = 1.0
+time = %H:%M
+format = <label>
+label = %time%
+label-font = 2
+
+[module/keyboard]
+type = custom/script
+exec = kbindicator
+tail = true
+
+[module/mpd]
+type = internal/mpd
+format-online = <label-song>
+format-offline =
+format-stopped =
+label-song = %artist% - %title%
+label-song-maxlen = 50
+label-song-ellipsis = true
+
+[module/wacomtouch]
+type = custom/script
+exec = wacomtouch
+interval = 1
+
+[module/battery1]
+type = internal/battery
+battery = BAT0
+adapter = AC
+poll-interval = 5
+format-charging = <label-charging>
+format-charging-foreground = ${color.fg-half}
+format-full = 100%
+format-discharging = <label-discharging>
+label-charging = %percentage%%
+label-discharging = %percentage%%
+
+[module/battery2]
+type = internal/battery
+battery = BAT1
+adapter = AC
+poll-interval = 5
+format-charging = <label-charging>
+format-charging-foreground = ${color.fg-half}
+format-full = 100%
+format-discharging = <label-discharging>
+label-charging = %percentage%%
+label-discharging = %percentage%%
+
+[module/brightness]
+type = internal/backlight
+card = intel_backlight
+format = <label>
+
+[module/wireless]
+type = internal/network
+interface = wlan0
+format-connected = <label-connected>
+format-disconnected = <label-disconnected>
+label-connected = %essid%
+label-disconnected = no network
+
+; vim:ft=dosini
diff --git a/home/dot_config/ranger/rc.conf b/home/dot_config/ranger/rc.conf
new file mode 100644
index 0000000..c38471a
--- /dev/null
+++ b/home/dot_config/ranger/rc.conf
@@ -0,0 +1,8 @@
+set preview_images true
+set preview_images_method ueberzug
+
+else = xdg-open "$1"
+label editor = "$EDITOR" -- "$@"
+
+map <space> shell dragon-drag-and-drop -a -x %p
+map <C-h> set show_hidden true
diff --git a/home/dot_config/rofi-pass/config b/home/dot_config/rofi-pass/config
new file mode 100644
index 0000000..3c8ff00
--- /dev/null
+++ b/home/dot_config/rofi-pass/config
@@ -0,0 +1,25 @@
+#!/bin/sh
+# make sure the filename is used as the account name
+default_user=':filename'
+type_delay=0
+
+# pass custom rofi flags
+_rofi() {
+ rofi \
+ -i \
+ -no-auto-select \
+ -config "$XDG_CONFIG_HOME/rofi-pass/rofi.rasi" \
+ "$@"
+}
+
+_do_type_xdotool() {
+ fcitx5-temp-off # see ~/.local/share/bin
+
+ # tr -d required because the "path" variable ends in a newline character
+ tr -d '\n' |\
+ xdotool type --delay ${type_delay} --clearmodifiers --file -
+ # xdotool command is otherwise not modified
+
+ fcitx5-temp-restore
+}
+
diff --git a/home/dot_config/rofi-pass/rofi.rasi b/home/dot_config/rofi-pass/rofi.rasi
new file mode 100644
index 0000000..829bcb0
--- /dev/null
+++ b/home/dot_config/rofi-pass/rofi.rasi
@@ -0,0 +1,16 @@
+// this import automatically resolves to ${XDG_CONFIG_HOME}/rofi/config.rasi
+// (see section on 'Multiple file handling' in man rofi-theme(5))
+@import "config.rasi"
+
+configuration {
+ matching: "prefix";
+}
+
+listview {
+ lines: 12;
+}
+
+prompt {
+ enabled: false;
+}
+
diff --git a/home/dot_config/rofi/config.rasi.tmpl b/home/dot_config/rofi/config.rasi.tmpl
new file mode 100644
index 0000000..23bbf45
--- /dev/null
+++ b/home/dot_config/rofi/config.rasi.tmpl
@@ -0,0 +1,69 @@
+configuration {
+ modi: "drun,run";
+ font: "sans-serif 8";
+ matching: "fuzzy";
+ separator-style: "none";
+ hide-scrollbar: true;
+
+ drun-match-fields: "name,generic,categories,keywords";
+ drun-display-format: "{name}";
+
+ filebrowser {
+ directory: "{{ env "HOME" }}/docs";
+ }
+
+ kb-remove-to-eol: "Control+Shift+e";
+ kb-accept-entry: "Control+m,Return,KP_Enter";
+ kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab";
+ kb-row-down: "Down,Control+j";
+}
+
+window {
+ padding: 2px;
+ background-color: ${bg};
+ text-color: ${fg};
+ width: 350px;
+ border-radius: 10px;
+}
+
+* {
+ spacing: 0;
+ line-padding: 0;
+ line-margin: 0;
+ background-color: inherit;
+ text-color: inherit;
+}
+
+message {
+ margin: 8px;
+}
+
+inputbar {
+ children: [entry];
+}
+
+entry {
+ padding: 10px 10px 8px 10px;
+ cursor-width: 1px;
+}
+
+listview {
+ cycle: false;
+ scrollbar: false;
+ lines: 6;
+ fixed-height: false;
+ padding: 2px 0px;
+}
+
+element {
+ margin: -2px 0px;
+ padding: 6px 10px 2px 10px;
+ background-color: transparent;
+ text-color: ${fg};
+}
+
+element selected {
+ border-radius: 8px;
+ background-color: ${accent};
+ text-color: ${accent_text};
+}
diff --git a/home/dot_config/sxiv/exec/executable_image-info b/home/dot_config/sxiv/exec/executable_image-info
new file mode 100644
index 0000000..7683c3a
--- /dev/null
+++ b/home/dot_config/sxiv/exec/executable_image-info
@@ -0,0 +1,6 @@
+#!/bin/sh
+printf '%s %s %s' \
+ "$(basename "$1")" \
+ "$(date -r "$1")" \
+ "$2x$3 ($(du -Hh "$1" | cut -f 1))"
+
diff --git a/home/dot_config/systemd/user/default.target.wants/symlink_goimapnotify@pipeframe.service b/home/dot_config/systemd/user/default.target.wants/symlink_goimapnotify@pipeframe.service
new file mode 100644
index 0000000..8797972
--- /dev/null
+++ b/home/dot_config/systemd/user/default.target.wants/symlink_goimapnotify@pipeframe.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/goimapnotify@.service
diff --git a/home/dot_config/systemd/user/default.target.wants/symlink_mpd.service b/home/dot_config/systemd/user/default.target.wants/symlink_mpd.service
new file mode 100644
index 0000000..f94f6ef
--- /dev/null
+++ b/home/dot_config/systemd/user/default.target.wants/symlink_mpd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/mpd.service
diff --git a/home/dot_config/systemd/user/default.target.wants/symlink_pipewire-pulse.service b/home/dot_config/systemd/user/default.target.wants/symlink_pipewire-pulse.service
new file mode 100644
index 0000000..a72afa4
--- /dev/null
+++ b/home/dot_config/systemd/user/default.target.wants/symlink_pipewire-pulse.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/pipewire-pulse.service
diff --git a/home/dot_config/systemd/user/default.target.wants/symlink_pipewire.service b/home/dot_config/systemd/user/default.target.wants/symlink_pipewire.service
new file mode 100644
index 0000000..06933ea
--- /dev/null
+++ b/home/dot_config/systemd/user/default.target.wants/symlink_pipewire.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/pipewire.service
diff --git a/home/dot_config/systemd/user/mbsync.service b/home/dot_config/systemd/user/mbsync.service
new file mode 100644
index 0000000..892b701
--- /dev/null
+++ b/home/dot_config/systemd/user/mbsync.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Mailbox synchronization service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/mbsync --verbose --all --config "${XDG_CONFIG_HOME}/mbsyncrc"
+
diff --git a/home/dot_config/systemd/user/mbsync.timer b/home/dot_config/systemd/user/mbsync.timer
new file mode 100644
index 0000000..980eb22
--- /dev/null
+++ b/home/dot_config/systemd/user/mbsync.timer
@@ -0,0 +1,11 @@
+[Unit]
+Description=Mailbox synchronization timer
+
+[Timer]
+OnBootSec=2m
+OnUnitActiveSec=5m
+Unit=mbsync.service
+
+[Install]
+WantedBy=timers.target
+
diff --git a/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber.service b/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber.service
new file mode 100644
index 0000000..3111543
--- /dev/null
+++ b/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/wireplumber.service
diff --git a/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber@loek.service b/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber@loek.service
new file mode 100644
index 0000000..3beaddd
--- /dev/null
+++ b/home/dot_config/systemd/user/pipewire.service.wants/symlink_wireplumber@loek.service
@@ -0,0 +1 @@
+/usr/lib/systemd/user/wireplumber@.service
diff --git a/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire-pulse.socket b/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire-pulse.socket
new file mode 100644
index 0000000..9930a8d
--- /dev/null
+++ b/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire-pulse.socket
@@ -0,0 +1 @@
+/usr/lib/systemd/user/pipewire-pulse.socket
diff --git a/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire.socket b/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire.socket
new file mode 100644
index 0000000..9a8dfc8
--- /dev/null
+++ b/home/dot_config/systemd/user/sockets.target.wants/symlink_pipewire.socket
@@ -0,0 +1 @@
+/usr/lib/systemd/user/pipewire.socket
diff --git a/home/dot_config/systemd/user/timers.target.wants/symlink_mbsync.timer b/home/dot_config/systemd/user/timers.target.wants/symlink_mbsync.timer
new file mode 100644
index 0000000..2b02041
--- /dev/null
+++ b/home/dot_config/systemd/user/timers.target.wants/symlink_mbsync.timer
@@ -0,0 +1 @@
+/home/loek/.config/systemd/user/mbsync.timer
diff --git a/home/dot_config/todoman/config.py b/home/dot_config/todoman/config.py
new file mode 100644
index 0000000..b50af25
--- /dev/null
+++ b/home/dot_config/todoman/config.py
@@ -0,0 +1,5 @@
+#!/bin/python3
+path = "$XDG_DATA_HOME/vdirsyncer/*/*"
+default_list = "タスク"
+default_priority = 9
+default_due = 0
diff --git a/home/dot_config/user-dirs.dirs b/home/dot_config/user-dirs.dirs
new file mode 100644
index 0000000..df754e6
--- /dev/null
+++ b/home/dot_config/user-dirs.dirs
@@ -0,0 +1,15 @@
+# This file is written by xdg-user-dirs-update
+# If you want to change or add directories, just edit the line you're
+# interested in. All local changes will be retained on the next run.
+# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
+# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
+# absolute path. No other format is supported.
+#
+XDG_DOWNLOAD_DIR="$HOME/dl"
+XDG_DOCUMENTS_DIR="$HOME/docs"
+XDG_MUSIC_DIR="$HOME/"
+XDG_DESKTOP_DIR="$HOME/"
+XDG_TEMPLATES_DIR="$HOME/"
+XDG_PUBLICSHARE_DIR="$HOME/"
+XDG_PICTURES_DIR="$HOME/"
+XDG_VIDEOS_DIR="$HOME/"
diff --git a/home/dot_config/vdirsyncer/config.sh.example b/home/dot_config/vdirsyncer/config.sh.example
new file mode 100644
index 0000000..0c7d81a
--- /dev/null
+++ b/home/dot_config/vdirsyncer/config.sh.example
@@ -0,0 +1,31 @@
+#!/bin/sh
+# this file is included from .config/vdirsyncer/config_gen and
+# .config/khal/config_gen. The shims for `khal` and `vdirsyncer` automatically
+# run these scripts to update the configuration files. Note that you do still
+# need to set up a synchronization mechanism (e.g. systemd timer for running
+# `vdirsyncer sync`)
+
+# uncomment to convert true color calendar color (#RRGGBB) into 16-color (ANSI)
+# codes
+# export QUANTIZE_COLOR=y
+
+### CalDAV example
+# NOTE: color and display name are automatically downloaded from the server,
+# and can not be set manually
+caldav 'https://dav.example.com' 'username' "$(pass www/dav.example.com/username)"
+# `caldav` only syncs calendar items. you can replace `caldav` with `carddav`
+# to only sync address books, or replace it with `dav` to sync both
+
+### Web calendar example
+# NOTE: url should start with http(s)://, not webcal://
+ical 'https://example.com/calendar-1.ics'
+# COLOR and NAME can be overridden for ical URLs:
+COLOR='light magenta' NAME='Calendar 2' ical 'https://example.com/calendar-2.ics'
+# Comment a line to disable the calendar (temporarily)
+#ical 'https://example.com/calendar-3.ics'
+# iCal URL that requires HTTP authentication:
+ical 'https://example.com/calendar-1.ics' 'username' 'password'
+
+# Keep in mind that this file is just a POSIX sh script, and you can use
+# environment variables, control flow, etc.
+
diff --git a/home/dot_config/vdirsyncer/executable_config_gen b/home/dot_config/vdirsyncer/executable_config_gen
new file mode 100644
index 0000000..bf5d570
--- /dev/null
+++ b/home/dot_config/vdirsyncer/executable_config_gen
@@ -0,0 +1,111 @@
+#!/bin/sh
+CONFIG_FILE="$(dirname "$0")/config.sh"
+[ ! -e "$CONFIG_FILE" ] && {
+ echo "please create $CONFIG_FILE"
+ exit 1
+}
+
+VDIRSYNCER_PREFIX="$XDG_DATA_HOME/vdirsyncer"
+VDIRSYNCER_STATUS_PATH="$VDIRSYNCER_PREFIX/status"
+
+# generate a valid storage/pair name from an invalid one
+safeify() { echo "$1" | sha1sum | cut -c1-40 ; }
+# safeify() { echo "$1" | tr -c '0-9A-Za-z' '_' | sed 's/_\+/_/g' ; }
+
+[ -z "$EXPORT_LIB" ] && cat << EOF
+# THIS FILE IS AUTO-GENERATED AND SHOULD NOT BE SAVED TO DISK!!! Use with
+# vdirsyncer by piping the output of this script to a named pipe.
+
+[general]
+status_path = "$VDIRSYNCER_STATUS_PATH"
+
+EOF
+
+[ -n "$EXPORT_LIB" ] && _cfg_dav() { true ; }
+[ -z "$EXPORT_LIB" ] && _cfg_dav() {
+ cat << EOF
+[pair $ID]
+a = "${ID}_local"
+b = "${ID}_remote"
+collections = ["from a", "from b"]
+metadata = ["displayname", "color"]
+
+[storage ${ID}_local]
+type = "filesystem"
+path = "$VDIRSYNCER_PREFIX/$ID/"
+fileext = "$FILEEXT"
+
+[storage ${ID}_remote]
+type = "$DAV_TYPE"
+url = "$BASE_URL"
+EOF
+ [ -n "$USERNAME" ] && echo "username = \"$USERNAME\""
+ [ -n "$PASSWORD" ] && echo "password = \"$PASSWORD\""
+
+ echo # trailing blank line
+}
+
+[ -n "$EXPORT_LIB" ] && _cfg_ical() { true ; }
+[ -z "$EXPORT_LIB" ] && _cfg_ical() {
+ cat << EOF
+[pair $ID]
+a = "${ID}_remote"
+b = "${ID}_local"
+collections = null
+
+[storage ${ID}_local]
+type = "filesystem"
+path = "$VDIRSYNCER_PREFIX/$ID/"
+fileext = ".ics"
+
+[storage ${ID}_remote]
+type = "http"
+url = "${URL}"
+EOF
+
+ [ -n "$USERNAME" ] && echo "username = \"$USERNAME\""
+ [ -n "$PASSWORD" ] && echo "password = \"$PASSWORD\""
+
+ echo # trailing blank line
+}
+
+ical() {
+ URL="$1"
+ USERNAME="$2" # optional
+ PASSWORD="$3" # optional
+
+ NAME="${NAME-"$(basename "$URL")"}"
+ ID="$(safeify "$NAME")"
+
+ _cfg_ical
+}
+
+caldav() { DAV_TYPE="caldav" dav "$@" ; }
+carddav() { DAV_TYPE="carddav" dav "$@" ; }
+dav() {
+ BASE_URL="$1"
+ USERNAME="$2" # optional
+ PASSWORD="$3" # optional
+
+ ID="$(safeify "$(echo "$BASE_URL$DAV_TYPE" | sed -e 's#^https\?://##' -e 's#/.*##')")"
+
+ [ "$DAV_TYPE" = "caldav" ] && FILEEXT=".ics"
+ [ "$DAV_TYPE" = "carddav" ] && FILEEXT=".vcf"
+
+ # only generate specific DAV config if explicitly defined
+ if [ -n "$DAV_TYPE" ] ; then
+ _cfg_dav
+ return
+ fi
+
+ # else generate both
+ caldav "$@"
+ carddav "$@"
+}
+
+# load "actual" config file
+[ -z "$EXPORT_LIB" ] && . "$CONFIG_FILE"
+
+# make inspecting output easier
+[ -z "$EXPORT_LIB" ] && printf '# %s:%s=%s\n' vim ft dosini
+
diff --git a/home/dot_config/wgetrc.tmpl b/home/dot_config/wgetrc.tmpl
new file mode 100644
index 0000000..3d9d4fe
--- /dev/null
+++ b/home/dot_config/wgetrc.tmpl
@@ -0,0 +1 @@
+hsts-file = {{ env "XDG_CACHE_HOME" }}/wget-hsts
diff --git a/home/dot_config/winapps/winapps.conf b/home/dot_config/winapps/winapps.conf
new file mode 100644
index 0000000..5977f06
--- /dev/null
+++ b/home/dot_config/winapps/winapps.conf
@@ -0,0 +1,15 @@
+RDP_USER="$(id -un)"
+RDP_PASS="$(pass etc/rdpwin)"
+VM_NAME="rdpwin"
+WAFLAVOR="libvirt"
+RDP_SCALE="100"
+REMOVABLE_MEDIA="/mnt"
+RDP_FLAGS="/cert:ignore /sound /microphone +home-drive -decorations +span /kbd:remap:0x3a=0x1d"
+DEBUG="true"
+AUTOPAUSE="off"
+AUTOPAUSE_TIME="300"
+PORT_TIMEOUT="5"
+RDP_TIMEOUT="30"
+APP_SCAN_TIMEOUT="30"
+BOOT_TIMEOUT="0"
+HIDEF="off"
diff --git a/home/dot_config/wireplumber/wireplumber.conf.d/50-bluez.conf b/home/dot_config/wireplumber/wireplumber.conf.d/50-bluez.conf
new file mode 100644
index 0000000..c957f73
--- /dev/null
+++ b/home/dot_config/wireplumber/wireplumber.conf.d/50-bluez.conf
@@ -0,0 +1,5 @@
+monitor.bluez.properties = {
+ bluez5.enable-msbc = false
+ bluez5.enable-cvsd = false
+ bluez5.default.rate = 96000
+}
diff --git a/home/dot_config/wireplumber/wireplumber.conf.d/50-disable-suspend.conf b/home/dot_config/wireplumber/wireplumber.conf.d/50-disable-suspend.conf
new file mode 100644
index 0000000..212afe6
--- /dev/null
+++ b/home/dot_config/wireplumber/wireplumber.conf.d/50-disable-suspend.conf
@@ -0,0 +1,30 @@
+monitor.alsa.rules = [
+ {
+ matches = [
+ { node.name = "~alsa_input.*" }
+ { node.name = "~alsa_output.*" }
+ ]
+ actions = {
+ update-props = {
+ session.suspend-timeout-seconds = 0
+ }
+ }
+ }
+]
+
+monitor.bluez.rules = [
+ {
+ matches = [
+ { node.name = "~bluez_input.*" }
+ { node.name = "~bluez_output.*" }
+ ]
+ actions = {
+ update-props = {
+ audio.format = "S24_3LE"
+ audio.rate = 96000
+ session.suspend-timeout-seconds = 0
+ }
+ }
+ }
+]
+
diff --git a/home/dot_config/wireplumber/wireplumber.conf.d/50-mpv-fix.conf b/home/dot_config/wireplumber/wireplumber.conf.d/50-mpv-fix.conf
new file mode 100644
index 0000000..fa83de5
--- /dev/null
+++ b/home/dot_config/wireplumber/wireplumber.conf.d/50-mpv-fix.conf
@@ -0,0 +1,14 @@
+# <https://howthefu.cc/posts/04/index.html>
+stream.rules = [
+ {
+ matches = [
+ { application.name = "mpv" }
+ ]
+ actions = {
+ update-props = {
+ state.restore-props = false
+ }
+ }
+ }
+]
+
diff --git a/home/dot_config/xbindkeys/main b/home/dot_config/xbindkeys/main
new file mode 100644
index 0000000..47a89f6
--- /dev/null
+++ b/home/dot_config/xbindkeys/main
@@ -0,0 +1,128 @@
+"lock"
+ Mod4 + Escape
+"polybar-msg cmd toggle"
+ Mod4 + b
+"rofi -show drun"
+ Mod4 + space
+"rofi -modes window -show window -kb-accept-entry '!Alt-Tab' -kb-row-down 'Alt+Tab' -kb-row-up 'Alt+ISO_Left_Tab'"
+ Alt + Tab
+"st"
+ Mod4 + Return
+"st -T '[floating]'"
+ Mod4 + Mod1 + Return
+"panic"
+ Mod4 + Mod1 + p
+"rofi-pass"
+ Mod4 + p
+"maim -usb 4 -c 0,0,0 | xclip -selection clipboard -t image/png"
+ Print
+"addtoqueue"
+ Mod4 + a
+"dunstctl close-all"
+ Mod4 + c
+
+
+
+"pactl set-sink-volume @DEFAULT_SINK@ -1%"
+ Mod1+Mod4+minus
+"pactl set-sink-volume @DEFAULT_SINK@ -1%"
+ XF86AudioLowerVolume
+"pactl set-sink-volume @DEFAULT_SINK@ +1%"
+ Mod1+Mod4+equal
+"pactl set-sink-volume @DEFAULT_SINK@ +1%"
+ XF86AudioRaiseVolume
+
+"pactl set-sink-mute @DEFAULT_SINK@ toggle"
+ XF86AudioMute
+"pactl set-source-mute @DEFAULT_SOURCE@ toggle"
+ XF86AudioMicMute
+
+"brightness -10"
+ Shift+Mod4 + minus
+"brightness -10"
+ XF86MonBrightnessDown
+"brightness +10"
+ Shift+Mod4 + equal
+"brightness +10"
+ XF86MonBrightnessUp
+
+"playerctl play-pause"
+ XF86AudioPlay
+"playerctl next"
+ XF86AudioNext
+"playerctl previous"
+ XF86AudioPrev
+
+"mpc toggle"
+ Mod1+Mod4+k
+"mpc next"
+ Mod1+Mod4+l
+"mpc prev"
+ Mod1+Mod4+j
+
+
+
+"wacommode topleft"
+ Mod1 + Control + Mod4 + 1
+"wacommode bottomleft"
+ Mod1 + Control + Mod4 + 2
+"wacommode topright"
+ Mod1 + Control + Mod4 + 3
+"wacommode bottomright"
+ Mod1 + Control + Mod4 + 4
+
+
+
+"i3-msg focus left"
+ Mod4 + h
+"i3-msg focus down"
+ Mod4 + j
+"i3-msg focus up"
+ Mod4 + k
+"i3-msg focus right"
+ Mod4 + l
+
+"i3-msg move left"
+ Mod4 + Shift + h
+"i3-msg move down"
+ Mod4 + Shift + j
+"i3-msg move up"
+ Mod4 + Shift + k
+"i3-msg move right"
+ Mod4 + Shift + l
+
+"i3-msg move workspace to output left"
+ Mod1 + Mod4 + Shift + h
+"i3-msg move workspace to output down"
+ Mod1 + Mod4 + Shift + j
+"i3-msg move workspace to output up"
+ Mod1 + Mod4 + Shift + k
+"i3-msg move workspace to output right"
+ Mod1 + Mod4 + Shift + l
+
+"i3-msg resize grow width 10 px"
+ Mod4 + period
+"i3-msg resize shrink width 10 px"
+ Mod4 + comma
+"i3-msg resize grow height 10 px"
+ Mod4 + bracketright
+"i3-msg resize shrink height 10 px"
+ Mod4 + bracketleft
+
+"i3-msg kill"
+ Mod4 + q
+
+"i3-msg reload"
+ Mod4 + Shift + c
+"i3-msg restart"
+ Mod4 + Shift + r
+
+"fcitx5-remote -s keyboard-us"
+ XF86Launch5 + Release
+"fcitx5-remote -s keyboard-us-intl"
+ XF86Launch6 + Release
+"fcitx5-remote -s mozc"
+ XF86Launch7 + Release
+
+"autorandr --change"
+ XF86Display
diff --git a/home/dot_config/xsettingsd/xsettingsd.conf b/home/dot_config/xsettingsd/xsettingsd.conf
new file mode 100644
index 0000000..46d4730
--- /dev/null
+++ b/home/dot_config/xsettingsd/xsettingsd.conf
@@ -0,0 +1,4 @@
+Xft/Hinting 1
+Xft/HintStyle "hintslight"
+Xft/Antialias 1
+Xft/RGBA "rgb"
diff --git a/home/dot_config/yadm/config b/home/dot_config/yadm/config
new file mode 100644
index 0000000..b2f0cbb
--- /dev/null
+++ b/home/dot_config/yadm/config
@@ -0,0 +1,3 @@
+[yadm]
+ auto-private-dirs = false
+ auto-alt = false
diff --git a/home/dot_config/yadm/executable_bootstrap b/home/dot_config/yadm/executable_bootstrap
new file mode 100644
index 0000000..372735d
--- /dev/null
+++ b/home/dot_config/yadm/executable_bootstrap
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+cd "$(dirname "$0")"
+. "$HOME/.profile"
+. ./lib/bootstrap
+
+# never use custom locale in TTY/logs
+export LANG=C
+
+alias s=silent
+
+# ensure required packages are installed
+begintask "installing packages"
+"$XDG_CONFIG_HOME/yadm/install-arch" > pkgs.log 2>&1
+endtask
+[ $? -eq 0 ] && rm -f pkgs.log || echo " (saved output to pkgs.log)"
+
+begintask "render templated files"
+s yadm alt
+endtask
+
+begintask "ensure dynamic theme files"
+s ~/.local/share/bin/mode dark
+endtask
+
+begintask "tidy up repository files"
+s yadm reflog expire --expire-unreachable=now --all &&\
+s yadm gc --prune=now
+endtask
+
+# note: vim-plug is already installed system-wide (see ./packages-arch)
+begintask "installing vim plugins"
+COC_PLUGINS="$(jq --raw-output '.dependencies | keys | join(" ")' \
+ "$XDG_CONFIG_HOME/coc/extensions/package.json")"
+s nvim --headless +"PlugInstall --sync" +qa &&\
+s nvim --headless +"CocInstall -sync $COC_PLUGINS" +qa
+endtask
+
+[ -e "$HOME/readme.md" ] ||\
+[ $(yadm status -s "$HOME/readme.md" | wc -l) -gt 0 ] && (
+ begintask "removing readme.md from home"
+ cd
+ rm -f readme.md &&\
+ yadm update-index --skip-worktree readme.md
+ endtask
+)
+
+! command -v st > /dev/null && [ ! -e ~/.local/st ] && (
+ begintask "building st (terminal) from source"
+ mkdir -p ~/.local
+ cd ~/.local
+ s git clone --depth 1 https://git.pipeframe.xyz/fork/st
+ cd st
+ s make -j
+ endtask
+)
+
+[ "$(find ~/.ssh -name 'id*' 2>/dev/null | wc -l)" -eq 0 ] && (
+ begintask "generating ssh keys"
+ s ssh-keygen -q -N "" < /dev/zero
+ endtask
+)
+
+begintask "create XDG user directories"
+s xdg-user-dirs-update
+endtask
+
+# TODO: GTK themes
+# TODO: OpenZone_Black cursor theme
+# TODO: install from scratch and see what's missing
+
+cat << EOF
+
+bootstrap finished in $(finishtime)!
+
+follow-up steps to finish setup:
+ - install GPG keys
+ - install nonfree fonts
+ - clone the pass repository in ~/.local/share/pass
+ - run the system bootstrap script in ~/.config/yadm/root/bootstrap
+ - make the switch to microsoft edge
+
+EOF
+
diff --git a/home/dot_config/yadm/executable_install-arch b/home/dot_config/yadm/executable_install-arch
new file mode 100644
index 0000000..a2ed199
--- /dev/null
+++ b/home/dot_config/yadm/executable_install-arch
@@ -0,0 +1,12 @@
+#!/bin/sh
+# ensure we are running on arch linux
+[ ! -e /etc/os-release ] && exit 0
+. /etc/os-release
+[ "$ID" != 'arch' ] && exit 0
+
+# resolve files in this script relative to this script's location
+cd "$(dirname "$0")"
+
+# filter comments and pipe package name list to yay
+sed -e 's/#.*//g' -e 's/ //g' -e '/^$/d' packages-arch | yay --needed -Sy -
+
diff --git a/home/dot_config/yadm/hooks/executable_post_pull b/home/dot_config/yadm/hooks/executable_post_pull
new file mode 100644
index 0000000..c40a06b
--- /dev/null
+++ b/home/dot_config/yadm/hooks/executable_post_pull
@@ -0,0 +1,2 @@
+#!/bin/sh
+[ -n "$GPG_ID_PASSWORD_STORE" ] && pass git pull
diff --git a/home/dot_config/yadm/lib/bootstrap b/home/dot_config/yadm/lib/bootstrap
new file mode 100644
index 0000000..5dafb62
--- /dev/null
+++ b/home/dot_config/yadm/lib/bootstrap
@@ -0,0 +1,22 @@
+#!/bin/sh
+TIMESTART="$(date +%s)"
+
+begintask() {
+ printf '%s ...' "$1"
+}
+
+endtask() {
+ EXIT_CODE=$?
+ [ $EXIT_CODE -eq 0 ] && echo ' OK' || echo ' ERROR'
+ return $EXIT_CODE
+}
+
+silent() {
+ "$@" 1> /dev/null 2> /dev/null
+}
+
+finishtime() {
+ TIMESTOP="$(date +%s)"
+ echo "$(( $TIMESTOP - $TIMESTART ))s"
+}
+
diff --git a/home/dot_config/yadm/packages-arch b/home/dot_config/yadm/packages-arch
new file mode 100644
index 0000000..b9b9781
--- /dev/null
+++ b/home/dot_config/yadm/packages-arch
@@ -0,0 +1,125 @@
+# X11 core + window manager
+i3-wm
+xdg-user-dirs
+xf86-input-wacom
+xinit-xsession
+xorg-server
+xorg-xclipboard
+xorg-xev
+xorg-xhost
+xorg-xinit
+xorg-xprop
+xorg-xrandr
+xorg-xrdb
+xorg-xset
+
+# directly used in scripts / startup
+augeas
+autocutsel
+bat
+dbus
+dunst
+fcitx5
+flashfocus
+imagemagick
+jq
+libpulse # for pactl
+maim
+moreutils
+mpd
+neovim-remote
+nicotine+
+nodejs
+pastel
+picom
+pipewire
+playerctl
+polkit-gnome
+polybar
+python
+python-pip
+python-pipx
+redshift
+rofi
+xbanish
+xbindkeys
+xclip
+xorg-xrdb
+xsettingsd
+
+# system stuff
+cups
+lightdm
+lightdm-gtk-greeter
+ntfs-3g
+ntp
+openssh
+openssl
+sshfs
+usb_modeswitch # required for android usb tethering
+networkmanager
+
+# applications
+anki-bin
+brave-bin
+curl
+feh
+fzf
+gnupg
+helvum
+htop
+khal
+mpc
+mpv
+ncmpcpp
+neovim
+nmap
+pam-gnupg
+pandoc
+pass
+pass-otp
+pavucontrol
+pinentry
+qt5-tools
+ranger
+restic
+rofi-pass-git
+scrcpy
+scrot
+slock
+sudo
+sxiv
+unarchiver
+unzip
+vdirsyncer
+vim-plug
+wget
+which
+zathura
+zathura-pdf-mupdf
+zip
+zsh
+
+# audio
+alsa-lib
+alsa-plugins
+alsa-utils
+libpipewire
+libpulse
+pipewire
+pipewire-alsa
+pipewire-audio
+pipewire-jack
+pipewire-pulse
+
+# bluetooth
+bluez
+bluez-utils
+
+# fonts
+inter-font # Inter (default sans serif)
+texlive-fontsrecommended # TeX Gyre Schola + Math (default serif)
+ttf-jetbrains-mono # JetBrains Mono (monospace in documents)
+ttf-jetbrains-mono-nerd # JetBrains Mono Nerd Font (default monospace)
+ttf-times-new-roman # Times New Roman (instead of ugly liberation serif)
+
diff --git a/home/dot_config/yadm/root/etc/NetworkManager/dispatcher.d/executable_70-auto-wifi.sh b/home/dot_config/yadm/root/etc/NetworkManager/dispatcher.d/executable_70-auto-wifi.sh
new file mode 100644
index 0000000..4680626
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/NetworkManager/dispatcher.d/executable_70-auto-wifi.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+export LANG=C
+
+interface="$1"
+action="$2"
+
+connectivity="$(nmcli networking connectivity)"
+interface_type="$(nmcli -g GENERAL.TYPE device show "$interface")"
+interface_state="$(nmcli -g GENERAL.STATE device show "$interface" | grep -o '^[0-9]\+')"
+
+if [ "$action" = "down" ] && [ "$connectivity" = "none" ]; then
+ nmcli radio wifi on
+ exit
+fi
+
+if [ "$action" = "up" ] && [ "$interface_type" == "ethernet" ] && [ "$interface_state" = "100" ]; then
+ nmcli radio wifi off
+ exit
+fi
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/00-keyboard.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/00-keyboard.conf
new file mode 100644
index 0000000..d4f95ff
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/00-keyboard.conf
@@ -0,0 +1,9 @@
+Section "InputClass"
+ Identifier "system-keyboard"
+ MatchIsKeyboard "on"
+ Option "XkbLayout" "us"
+ Option "XkbModel" "pc105"
+ Option "XkbOptions" "ctrl:nocaps"
+ Option "AutoRepeat" "250 40"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/40-trackpad.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/40-trackpad.conf
new file mode 100644
index 0000000..f390b93
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/40-trackpad.conf
@@ -0,0 +1,9 @@
+Section "InputClass"
+ Identifier "Trackpad preferences"
+ MatchIsTouchpad "on"
+ Driver "libinput"
+ Option "NaturalScrolling" "1"
+ Option "Tapping" "1"
+ Option "ScrollPixelDistance" "40"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/50-mouse-acceleration.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/50-mouse-acceleration.conf
new file mode 100644
index 0000000..199635d
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/50-mouse-acceleration.conf
@@ -0,0 +1,8 @@
+Section "InputClass"
+ Identifier "default mouse acceleration"
+ Driver "libinput"
+ MatchIsPointer "yes"
+ Option "AccelProfile" "flat"
+ Option "AccelSpeed" "0"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/72-wacom-options.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/72-wacom-options.conf
new file mode 100644
index 0000000..81aaf60
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/72-wacom-options.conf
@@ -0,0 +1,11 @@
+Section "InputClass"
+ Identifier "default wacom pen area + double click interval"
+ MatchDriver "wacom"
+ MatchProduct "Pen"
+ NoMatchProduct "eraser"
+ NoMatchProduct "cursor"
+ Option "Area" "0 0 15200 4275"
+ Option "MapToOutput" "1920x1080+0+0"
+ Option "TapTime" "100"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-logitech.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-logitech.conf
new file mode 100644
index 0000000..a1071b0
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-logitech.conf
@@ -0,0 +1,8 @@
+Section "InputClass"
+ Identifier "Logitech MX Master 3S High res scrolling"
+ MatchUSBID "046d:c548"
+ MatchDevicePath "/dev/input/event*"
+ Driver "libinput"
+ Option "HighResolutionWheelScrolling" "false"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-wacom.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-wacom.conf
new file mode 100644
index 0000000..26643b8
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-libinput-wacom.conf
@@ -0,0 +1,9 @@
+Section "InputClass"
+ Identifier "force libinput as driver for wacom tablet touchpad"
+ MatchUSBID "056a:*"
+ MatchDevicePath "/dev/input/event*"
+ MatchIsTouchpad "true"
+ Driver "libinput"
+ Option "NaturalScrolling" "true"
+EndSection
+
diff --git a/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-wacom-overrides.conf b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-wacom-overrides.conf
new file mode 100644
index 0000000..f2e2bbf
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/X11/xorg.conf.d/90-wacom-overrides.conf
@@ -0,0 +1,7 @@
+Section "InputClass"
+ Identifier "Wacom Tablet Overrides"
+ MatchDriver "wacom"
+ Option "AccelerationProfile" "5"
+ Option "ConstantDeceleration" "2"
+ Option "AdaptiveDeceleration" "3"
+EndSection
diff --git a/home/dot_config/yadm/root/etc/containers/empty_nodocker b/home/dot_config/yadm/root/etc/containers/empty_nodocker
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/containers/empty_nodocker
diff --git a/home/dot_config/yadm/root/etc/default/earlyoom b/home/dot_config/yadm/root/etc/default/earlyoom
new file mode 100644
index 0000000..53ddf8b
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/default/earlyoom
@@ -0,0 +1 @@
+EARLYOOM_ARGS="-M 102400 -r 3600 -n --avoid '(^|/)(init|systemd|Xorg|sshd)$'"
diff --git a/home/dot_config/yadm/root/etc/kernel/cmdline b/home/dot_config/yadm/root/etc/kernel/cmdline
new file mode 100644
index 0000000..2448b2c
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/kernel/cmdline
@@ -0,0 +1 @@
+quiet
diff --git a/home/dot_config/yadm/root/etc/libinput/local-overrides.quirks b/home/dot_config/yadm/root/etc/libinput/local-overrides.quirks
new file mode 100644
index 0000000..9a897c2
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/libinput/local-overrides.quirks
@@ -0,0 +1,4 @@
+[Logitech MX Master 3S]
+MatchVendor=0x046D
+MatchProduct=0xC548
+AttrEventCode=-REL_WHEEL_HI_RES;-REL_HWHEEL_HI_RES;
diff --git a/home/dot_config/yadm/root/etc/lightdm/executable_autorandr-change b/home/dot_config/yadm/root/etc/lightdm/executable_autorandr-change
new file mode 100644
index 0000000..f181fe8
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/lightdm/executable_autorandr-change
@@ -0,0 +1,5 @@
+#!/bin/sh
+autorandr --change
+
+# make sure this script exits happily
+exit 0
diff --git a/home/dot_config/yadm/root/etc/lightdm/lightdm-gtk-greeter.conf b/home/dot_config/yadm/root/etc/lightdm/lightdm-gtk-greeter.conf
new file mode 100644
index 0000000..7ba729d
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/lightdm/lightdm-gtk-greeter.conf
@@ -0,0 +1,8 @@
+[greeter]
+font-name = Inter 9
+theme-name = adw-gtk3-dark
+indicators = ~clock;~spacer;~power
+hide-user-image = true
+screensaver-timeout = 15
+default-session = xinitrc
+clock-format = %t%H:%M
diff --git a/home/dot_config/yadm/root/etc/locale.conf b/home/dot_config/yadm/root/etc/locale.conf
new file mode 100644
index 0000000..abfaa52
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/locale.conf
@@ -0,0 +1,2 @@
+LANG=en_US.UTF-8
+LC_COLLATE=C
diff --git a/home/dot_config/yadm/root/etc/locale.gen b/home/dot_config/yadm/root/etc/locale.gen
new file mode 100644
index 0000000..6ab95e3
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/locale.gen
@@ -0,0 +1,3 @@
+en_US.UTF-8 UTF-8
+ja_JP.UTF-8 UTF-8
+nl_NL.UTF-8 UTF-8
diff --git a/home/dot_config/yadm/root/etc/logid.cfg b/home/dot_config/yadm/root/etc/logid.cfg
new file mode 100644
index 0000000..e98e048
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/logid.cfg
@@ -0,0 +1,13 @@
+devices: ({
+ name: "MX Master 3S";
+ smartshift: {
+ on: true;
+ threshold: 255;
+ torque: 255;
+ };
+ hiresscroll: {
+ hires: false;
+ invert: false;
+ target: false;
+ };
+});
diff --git a/home/dot_config/yadm/root/etc/sudoers.d/10-wheel-nopasswd b/home/dot_config/yadm/root/etc/sudoers.d/10-wheel-nopasswd
new file mode 100644
index 0000000..46208d6
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/sudoers.d/10-wheel-nopasswd
@@ -0,0 +1,4 @@
+# allow all users in `wheel` group to use sudo for all commands without prompt
+# for password
+%wheel ALL=(ALL) NOPASSWD: ALL
+
diff --git a/home/dot_config/yadm/root/etc/systemd/logind.conf.d/10-laptop-lid.conf b/home/dot_config/yadm/root/etc/systemd/logind.conf.d/10-laptop-lid.conf
new file mode 100644
index 0000000..c289779
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/systemd/logind.conf.d/10-laptop-lid.conf
@@ -0,0 +1,4 @@
+[Login]
+HandleLidSwitch=suspend
+HandleLidSwitchExternalPower=ignore
+HandleLidSwitchDocked=ignore
diff --git a/home/dot_config/yadm/root/etc/udev/hwdb.d/71-logitech-mx3.hwdb b/home/dot_config/yadm/root/etc/udev/hwdb.d/71-logitech-mx3.hwdb
new file mode 100644
index 0000000..3ccaa11
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/udev/hwdb.d/71-logitech-mx3.hwdb
@@ -0,0 +1,3 @@
+mouse:usb:v046dpc548:name:Logitech USB Receiver Mouse:*
+ MOUSE_WHEEL_CLICK_ANGLE=1
+ MOUSE_WHEEL_CLICK_COUNT=360
diff --git a/home/dot_config/yadm/root/etc/udev/rules.d/90-backlight.rules b/home/dot_config/yadm/root/etc/udev/rules.d/90-backlight.rules
new file mode 100644
index 0000000..23eedf8
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/udev/rules.d/90-backlight.rules
@@ -0,0 +1 @@
+SUBSYSTEM=="backlight", ACTION=="add", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
diff --git a/home/dot_config/yadm/root/etc/udev/rules.d/99-capture-card.rules b/home/dot_config/yadm/root/etc/udev/rules.d/99-capture-card.rules
new file mode 100644
index 0000000..b180639
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/udev/rules.d/99-capture-card.rules
@@ -0,0 +1,3 @@
+# set video controls
+SUBSYSTEM=="video4linux", KERNEL=="video[0-9]*", ATTR{index}=="0", ATTRS{idVendor}=="534d", ATTRS{idProduct}=="2109", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl=brightness=0,contrast=127,saturation=127,hue=0"
+
diff --git a/home/dot_config/yadm/root/etc/xdg/nvim/init.vim b/home/dot_config/yadm/root/etc/xdg/nvim/init.vim
new file mode 100644
index 0000000..f238fc6
--- /dev/null
+++ b/home/dot_config/yadm/root/etc/xdg/nvim/init.vim
@@ -0,0 +1,2 @@
+set notermguicolors
+colorscheme vim
diff --git a/home/dot_config/yadm/root/executable_bootstrap b/home/dot_config/yadm/root/executable_bootstrap
new file mode 100644
index 0000000..f8b59fb
--- /dev/null
+++ b/home/dot_config/yadm/root/executable_bootstrap
@@ -0,0 +1,95 @@
+#!/bin/sh
+cd "$(dirname "$0")"
+. ../lib/bootstrap
+
+# never use custom locale in TTY/logs
+export LANG=C
+
+alias s=silent
+
+
+wrong_call() {
+ cat << EOF
+run this script as root and with the username of your user account
+
+examples:
+ $ sudo $0 loek
+
+ $ sudo $0 "\$LOGNAME"
+
+ # $0 gert
+EOF
+ exit 1
+}
+
+# this script needs to run with root privileges
+[ $(id -u) -ne 0 ] && wrong_call
+# SETUP_USER must exist
+SETUP_USER="$1"
+s getent passwd "$SETUP_USER" || wrong_call
+# SETUP_USER can not be root
+[ $(id -u "$SETUP_USER") -eq 0 ] && wrong_call
+
+begintask "copy system config files"
+s cp -r --preserve=mode,timestamps etc/. /etc
+endtask
+
+PINENTRY="pinentry-gnome3"
+[ "$(command -v pinentry | xargs realpath | xargs basename)" != "$PINENTRY" ] && (
+ begintask "set pinentry program to $PINENTRY"
+ s ln -sf "$PINENTRY" "$(command -v pinentry)"
+ endtask
+)
+
+begintask "enabling services"
+s systemctl enable bluetooth ntpd cups
+endtask
+
+GROUPS_OK=1
+CURRENT_GROUPS="$(id -Gn "$SETUP_USER")"
+TARGET_GROUPS="users uucp optical lp audio wheel input"
+for group in $TARGET_GROUPS ; do
+ if ! echo "$CURRENT_GROUPS" | s grep "$group" ; then
+ GROUPS_OK=0
+ break
+ fi
+done
+[ "$GROUPS_OK" -ne 1 ] && (
+ begintask "adding $SETUP_USER to groups"
+ s usermod -aG "$(echo "$TARGET_GROUPS" | tr ' ' ',')" "$SETUP_USER"
+ endtask
+)
+
+PAM_GNUPG_FILE="/etc/pam.d/system-login"
+! s grep 'pam_gnupg' "$PAM_GNUPG_FILE" && (
+ begintask "adding pam-gnupg PAM module"
+ cat << EOF >> "$PAM_GNUPG_FILE"
+
+# https://github.com/cruegge/pam-gnupg
+auth optional pam_gnupg.so store-only
+session optional pam_gnupg.so
+EOF
+ endtask
+)
+
+s grep '^#\s*\<Color\>' /etc/pacman.conf && (
+ begintask "enabling color in /etc/pacman.conf"
+ s sed 's/^#\s*\(\<Color\>\)/\1/g' -i /etc/pacman.conf
+ endtask
+)
+
+begintask "set autorandr to run at lightdm display startup"
+s augtool set '/files/etc/lightdm/lightdm.conf/Seat:*/display-setup-script' '/etc/lightdm/autorandr-change'
+endtask
+
+[ "$(getent passwd "$SETUP_USER" | cut -d: -f7 | xargs basename)" != "zsh" ] && (
+ begintask "set user shell to zsh"
+ s chsh -s "$(command -v zsh)" "$SETUP_USER"
+ endtask
+)
+
+cat << EOF
+
+root bootstrap finished in $(finishtime)!
+
+EOF
diff --git a/home/dot_config/zathura/zathurarc b/home/dot_config/zathura/zathurarc
new file mode 100644
index 0000000..89ae535
--- /dev/null
+++ b/home/dot_config/zathura/zathurarc
@@ -0,0 +1,16 @@
+set scroll-page-aware true
+set scroll-full-overlap 0.01
+set scroll-step 100
+set selection-clipboard clipboard
+
+# recolor (dark mode)
+map <C-i> recolor
+set recolor true
+
+set recolor-reverse-video true
+set recolor-keephue true
+set guioptions ""
+set show-recent false
+
+include ./colors
+