summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseraphim <18ycm9tx@anonaddy.me>2026-08-23 13:48:20 +0700
committerseraphim <18ycm9tx@anonaddy.me>2026-08-23 13:48:20 +0700
commit9f12ea8a648fa6483b392dc9ba1d7dbf4e61057c (patch)
tree35ec7c12203114c9e47cebbdb634c174094913c8
parentb57f994aa7c74d1b4e17e3df31ddf94702a8f6de (diff)
-
-rw-r--r--config.toml8
-rw-r--r--fastfetch/.config/fastfetch/config.jsonc21
-rw-r--r--foot/.config/foot/foot.ini4
l---------gtk/.config/gtk-3.0/settings.ini2
-rw-r--r--matugen/.config/matugen/config.toml8
-rw-r--r--mpv/.config/mpv/mpv.conf4
-rwxr-xr-xniri/.config/niri/apply-colors.sh61
-rw-r--r--niri/.config/niri/config.kdl5
-rwxr-xr-xniri/.config/niri/theme-switcher.sh125
-rw-r--r--nvim/.config/nvim/.gitignore8
-rw-r--r--nvim/.config/nvim/.neoconf.json15
-rw-r--r--nvim/.config/nvim/LICENSE201
-rw-r--r--nvim/.config/nvim/README.md4
-rw-r--r--nvim/.config/nvim/init.lua6
-rw-r--r--nvim/.config/nvim/lazyvim.json10
-rw-r--r--nvim/.config/nvim/lua/caelus/init.lua100
-rw-r--r--nvim/.config/nvim/lua/config/autocmds.lua8
-rwxr-xr-x[-rw-r--r--]nvim/.config/nvim/lua/config/keymaps.lua16
-rw-r--r--nvim/.config/nvim/lua/config/lazy.lua53
-rwxr-xr-x[-rw-r--r--]nvim/.config/nvim/lua/config/options.lua43
-rw-r--r--nvim/.config/nvim/lua/config/plugins.lua97
-rw-r--r--nvim/.config/nvim/lua/plugins/example.lua197
-rw-r--r--nvim/.config/nvim/nvim-pack-lock.json116
-rw-r--r--nvim/.config/nvim/stylua.toml3
-rw-r--r--portage/etc/portage/package.accept_keywords/badwolf1
-rw-r--r--portage/etc/portage/package.accept_keywords/waypaper5
-rw-r--r--portage/etc/portage/package.use/libreoffice1
-rw-r--r--portage/etc/portage/package.use/qutebrowser1
-rw-r--r--portage/etc/portage/package.use/waypaper1
-rw-r--r--portage/etc/portage/package.use/zz-autounmask111
-rw-r--r--portage/etc/portage/savedconfig/www-client/badwolf-1.4.0-r2117
-rw-r--r--portage/etc/portage/savedconfig/www-client/surf-2.1-r3192
-rw-r--r--portage/etc/portage/savedconfig/x11-misc/dmenu-5.423
-rw-r--r--portage/etc/portage/savedconfig/x11-terms/st-0.9.3474
-rw-r--r--portage/var/lib/portage/world11
l---------templates/dbg.ini1
l---------templates/foot-colors-custom.ini1
l---------templates/niri.kdl1
l---------templates/nvim.lua1
l---------templates/shell-colors.sh1
l---------templates/vicinae-dark.toml1
l---------templates/vicinae-light.toml1
-rw-r--r--tmux/.config/tmux/tmux.conf74
-rwxr-xr-xupdate.sh38
-rw-r--r--vicinae/.config/vicinae/settings.json205
-rw-r--r--wallust/.config/wallust/templates/nvim.lua306
-rw-r--r--wallust/.config/wallust/wallust.toml1
l---------waybar/.config/waybar/theme.css2
-rw-r--r--zshrc/.zshrc4
49 files changed, 1988 insertions, 701 deletions
diff --git a/config.toml b/config.toml
deleted file mode 100644
index 1c1cad4..0000000
--- a/config.toml
+++ /dev/null
@@ -1,8 +0,0 @@
-[terminal]
-vt = 1
-
-[default_session]
-command = "tuigreet --cmd /home/seraphim/.local/bin/start-niri.sh"
-#command = "tuigreet --time --cmd 'dbus-run-session niri'"
-user = "greeter"
-DISPLAYMANAGER="greetd"
diff --git a/fastfetch/.config/fastfetch/config.jsonc b/fastfetch/.config/fastfetch/config.jsonc
deleted file mode 100644
index ac7674f..0000000
--- a/fastfetch/.config/fastfetch/config.jsonc
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "modules": [
- "title",
- "separator",
- "os",
- "kernel",
- "shell",
- "cpu",
- "gpu",
- "memory",
- { "type": "wm" },
- "uptime",
- "separator",
- {
- "type": "command",
- "text": "curl -s 'wttr.in/Bern?format=%c+%t'",
- "key": "Weather"
- },
- { "type": "packages" }
- ]
-}
diff --git a/foot/.config/foot/foot.ini b/foot/.config/foot/foot.ini
index fd03722..2a81398 100644
--- a/foot/.config/foot/foot.ini
+++ b/foot/.config/foot/foot.ini
@@ -1,7 +1,7 @@
[main]
include=~/.cache/wallust/foot-theme.ini
-font=JetBrainsMono Nerd Font:size=12
-pad=2x0
+font=JetBrainsMono Nerd Font:size=13
+pad=0x0
# paste the rest of your theme colors here
diff --git a/gtk/.config/gtk-3.0/settings.ini b/gtk/.config/gtk-3.0/settings.ini
index ef98ebb..4e1634f 120000
--- a/gtk/.config/gtk-3.0/settings.ini
+++ b/gtk/.config/gtk-3.0/settings.ini
@@ -1 +1 @@
-settings-dark.ini \ No newline at end of file
+settings-light.ini \ No newline at end of file
diff --git a/matugen/.config/matugen/config.toml b/matugen/.config/matugen/config.toml
index 338672f..9b72eee 100644
--- a/matugen/.config/matugen/config.toml
+++ b/matugen/.config/matugen/config.toml
@@ -1,10 +1,8 @@
-# matugen config — generates Material You / Material Design 3 colors.
-# matugen is installed via portage (x11-misc/matugen).
-
[config]
# Disable caching so the -m light/dark mode flag is always respected.
caching = false
+version_check = false
[templates.niri]
-input_path = '~/.config/matugen/templates/niri.kdl'
-output_path = '~/.cache/matugen/theme.kdl'
+input_path = './templates/niri.kdl'
+output_path = '/home/seraphim/.cache/matugen/theme.kdl'
diff --git a/mpv/.config/mpv/mpv.conf b/mpv/.config/mpv/mpv.conf
index 8802c79..8311c18 100644
--- a/mpv/.config/mpv/mpv.conf
+++ b/mpv/.config/mpv/mpv.conf
@@ -1,6 +1,6 @@
volume=30
-#ytdl-raw-options-append=cookies=/home/seraphim/Documents/yt-dlp-things/cookies.txt
-ytdl-raw-options-append=cookies-from-browser=chromium+gnomekeyring
+ytdl-raw-options-append=cookies=/home/seraphim/Documents/yt-dlp-things/cookies.txt
+#ytdl-raw-options-append=cookies-from-browser=chromium+gnomekeyring
ytdl-raw-options-append=write-subs=
ytdl-raw-options-append=write-auto-subs=
ytdl-raw-options-append=sub-langs=en,en-US,en-GB
diff --git a/niri/.config/niri/apply-colors.sh b/niri/.config/niri/apply-colors.sh
index 339e134..505578c 100755
--- a/niri/.config/niri/apply-colors.sh
+++ b/niri/.config/niri/apply-colors.sh
@@ -22,46 +22,59 @@ if [ -z "$IMG" ] || [ ! -f "$IMG" ]; then
exit 1
fi
+# wait for the awww daemon to be ready (it is spawned next to this script at login)
+log "awww img $IMG"
+for _ in $(seq 1 10); do
+ if awww query >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+
+# set the wallpaper FIRST and unconditionally — this is the critical, must-work
+# step. Color generation below is best-effort: a failure there must never block
+# the wallpaper from changing (that coupling is what froze the wallpaper before).
+awww img "$IMG" || { log "awww img FAILED ($IMG)"; exit 1; }
+
+# blurred copy for the Overview backdrop (sibling or on-the-fly generation)
+"$SCRIPT_DIR/set-backdrop.sh" "$IMG" || log "set-backdrop FAILED ($IMG)"
+
# wallust: classic 16-color palette (foot, btop, ...)
# fastresize (the config default) is flaky on some images — always use resized.
-# A single attempt with honest error handling: the old retry loop swallowed
-# failures (case && break defeats set -e) and kept the stale light theme.
+# Best-effort: a wallust failure must not prevent the wallpaper from sticking.
log "wallust palette=$MODE $IMG"
case "$MODE" in
light|dark) WALLUST_PALETTE=("--palette" "$MODE") ;;
*) WALLUST_PALETTE=() ;;
esac
-if ! wallust run -b resized "${WALLUST_PALETTE[@]}" "$IMG"; then
- log "wallust FAILED ($IMG, mode=$MODE)"
- exit 1
+# wallust's `resized` backend is intermittently flaky on some images; retry a
+# few times, but ultimately tolerate failure.
+ok=0
+for attempt in 1 2 3; do
+ if wallust run -b resized "${WALLUST_PALETTE[@]}" "$IMG"; then
+ ok=1
+ break
+ fi
+ log "wallust attempt $attempt FAILED ($IMG, mode=$MODE)"
+ [ "$attempt" -lt 3 ] && sleep 2
+done
+if [ "$ok" -ne 1 ]; then
+ log "wallust FAILED after 3 attempts ($IMG, mode=$MODE) — continuing without wallust colors"
+else
+ # foot needs bare RRGGBB, not #RRGGBB — strip the leading '#'
+ sed -i 's/#\([0-9a-fA-F]\)/\1/g' ~/.cache/wallust/foot-theme.ini 2>/dev/null || true
fi
-# foot needs bare RRGGBB, not #RRGGBB — strip the leading '#'
-sed -i 's/#\([0-9a-fA-F]\)/\1/g' ~/.cache/wallust/foot-theme.ini 2>/dev/null || true
-
# matugen: Material You / M3 colors (niri focus ring, ...)
# --prefer is required for non-interactive runs (multiple source colors).
+# Best-effort: a matugen failure (e.g. bad config after an upgrade) must not
+# block the wallpaper.
log "matugen mode=$MODE $IMG"
case "$MODE" in
light) matugen image "$IMG" -m "light" --prefer saturation ;;
dark) matugen image "$IMG" -m "dark" --prefer saturation ;;
*) matugen image "$IMG" --prefer saturation ;;
-esac
-
-# wait for the awww daemon to be ready (it is spawned next to this script at login)
-log "awww img $IMG"
-for _ in $(seq 1 10); do
- if awww query >/dev/null 2>&1; then
- break
- fi
- sleep 1
-done
-
-# set the wallpaper
-awww img "$IMG"
-
-# blurred copy for the Overview backdrop (sibling or on-the-fly generation)
-"$SCRIPT_DIR/set-backdrop.sh" "$IMG"
+esac || log "matugen FAILED ($IMG, mode=$MODE) — continuing without matugen colors"
# reload consumers
killall -SIGUSR2 waybar 2>/dev/null || true
diff --git a/niri/.config/niri/config.kdl b/niri/.config/niri/config.kdl
index 05b2240..24b0896 100644
--- a/niri/.config/niri/config.kdl
+++ b/niri/.config/niri/config.kdl
@@ -1,4 +1,3 @@
-// Material You / Material Design 3 colors, generated by matugen (see theme-switcher.sh / apply-colors.sh)
include optional=true "/home/seraphim/.cache/matugen/theme.kdl"
spawn-at-startup "mako"
spawn-at-startup "xrdb" "-merge" "/home/seraphim/.Xresources"
@@ -11,7 +10,7 @@ spawn-at-startup "awww-daemon" "--namespace" "backdrop"
spawn-at-startup "/usr/libexec/hyprpolkitagent"
spawn-at-startup "dbus-update-activation-environment" "WAYLAND_DISPLAY" "DISPLAY" "XDG_CURRENT_DESKTOP"
spawn-at-startup "darkman" "run"
-spawn-at-startup "/home/seraphim/dotfiles-gentoo/niri/.config/niri/theme-switcher.sh"
+spawn-at-startup "/home/seraphim/dotfiles-gentoo/niri/.config/niri/theme-switcher.sh" "--daemon"
spawn-at-startup "sh" "-c" "NO_AT_BRIDGE=1 waybar"
spawn-at-startup "/usr/bin/Throne"
spawn-at-startup "mpd"
@@ -37,7 +36,7 @@ layer-rule {
place-within-backdrop true
}
input {
-// focus-follows-mouse max-scroll-amount="30%"
+ focus-follows-mouse max-scroll-amount="100%"
keyboard {
xkb {
diff --git a/niri/.config/niri/theme-switcher.sh b/niri/.config/niri/theme-switcher.sh
index 6b3b6e9..6d1f548 100755
--- a/niri/.config/niri/theme-switcher.sh
+++ b/niri/.config/niri/theme-switcher.sh
@@ -1,12 +1,19 @@
#!/bin/bash
+# Day/night theme switcher + wallpaper/color applier.
# Two wallpapers: day.jpg (9:00-18:00) and night.jpg (18:00-9:00).
-# To switch, just rename the files in ~/Pictures/wallpapers/.
+#
+# Usage:
+# ./theme-switcher.sh one-shot: apply based on current time, then exit
+# ./theme-switcher.sh day|light force light theme, then exit
+# ./theme-switcher.sh night|dark force dark theme, then exit
+# ./theme-switcher.sh --daemon continuous time-based loop (used at login)
WALLPAPERS="$HOME/Pictures/wallpapers"
STATE_FILE="/tmp/current_theme_state"
WALLPAPER_STATE_FILE="/tmp/current_wallpaper_state"
BACKDROP_STATE_FILE="/tmp/current_backdrop_state"
+PID_FILE="/tmp/theme-switcher.daemon.pid"
LOG="/tmp/theme-switcher.log"
SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)"
SET_BACKDROP="$SCRIPT_DIR/set-backdrop.sh"
@@ -15,58 +22,114 @@ log() {
printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$LOG"
}
-while true; do
- HOUR=$(date +%H)
- HOUR=$((10#$HOUR))
-
- if [ "$HOUR" -ge 9 ] && [ "$HOUR" -lt 18 ]; then
+# Resolve TARGET_STATE / MODE / WALLPAPER. Optional $1 forces day|night.
+resolve_target() {
+ local force="${1:-}"
+ if [ "$force" = "day" ] || [ "$force" = "light" ]; then
TARGET_STATE="light"
MODE="light"
WALLPAPER="$WALLPAPERS/day.jpg"
- else
+ elif [ "$force" = "night" ] || [ "$force" = "dark" ]; then
TARGET_STATE="dark"
MODE="dark"
WALLPAPER="$WALLPAPERS/night.jpg"
+ else
+ local HOUR
+ HOUR=$(date +%H)
+ HOUR=$((10#$HOUR))
+ if [ "$HOUR" -ge 9 ] && [ "$HOUR" -lt 18 ]; then
+ TARGET_STATE="light"
+ MODE="light"
+ WALLPAPER="$WALLPAPERS/day.jpg"
+ else
+ TARGET_STATE="dark"
+ MODE="dark"
+ WALLPAPER="$WALLPAPERS/night.jpg"
+ fi
fi
+}
+# Apply the resolved target once. Returns 0 on success.
+apply_target() {
if [ ! -f "$WALLPAPER" ]; then
- sleep 60
- continue
+ log "wallpaper missing: $WALLPAPER"
+ return 1
fi
+ local CURRENT_THEME CURRENT_WALLPAPER EXPECTED_BACKDROP ACTUAL_BACKDROP
+
CURRENT_THEME=$(cat "$STATE_FILE" 2>/dev/null || true)
+ # Already in the correct theme: don't re-run wallust/matugen every loop tick.
+ # Still self-heal a drifted backdrop below, then bail out.
+ if [ "$CURRENT_THEME" = "$TARGET_STATE" ]; then
+ EXPECTED_BACKDROP=$(cat "$BACKDROP_STATE_FILE" 2>/dev/null || true)
+ ACTUAL_BACKDROP=$(awww query -n backdrop -j 2>/dev/null | jq -r '.["backdrop"][0].displaying.image // empty')
+ if [ -n "$EXPECTED_BACKDROP" ] && [ "$ACTUAL_BACKDROP" != "$EXPECTED_BACKDROP" ]; then
+ "$SET_BACKDROP" "$WALLPAPER"
+ fi
+ return 0
+ fi
CURRENT_WALLPAPER=$(cat "$WALLPAPER_STATE_FILE" 2>/dev/null || true)
- # Self-heal the Overview backdrop
+ # Self-heal the Overview backdrop if it drifted from the expected image.
EXPECTED_BACKDROP=$(cat "$BACKDROP_STATE_FILE" 2>/dev/null || true)
ACTUAL_BACKDROP=$(awww query -n backdrop -j 2>/dev/null | jq -r '.["backdrop"][0].displaying.image // empty')
if [ -n "$EXPECTED_BACKDROP" ] && [ "$ACTUAL_BACKDROP" != "$EXPECTED_BACKDROP" ]; then
"$SET_BACKDROP" "$WALLPAPER"
fi
- if [ "$CURRENT_WALLPAPER" != "$WALLPAPER" ] || [ "$CURRENT_THEME" != "$TARGET_STATE" ]; then
- log "switching to $TARGET_STATE ($WALLPAPER)"
- if sh "$SCRIPT_DIR/apply-colors.sh" "$WALLPAPER" "$MODE"; then
- if [ "$CURRENT_THEME" != "$TARGET_STATE" ]; then
- darkman set "$TARGET_STATE"
- fi
+ log "switching to $TARGET_STATE ($WALLPAPER)"
+ if sh "$SCRIPT_DIR/apply-colors.sh" "$WALLPAPER" "$MODE"; then
+ if [ "$CURRENT_THEME" != "$TARGET_STATE" ]; then
+ darkman set "$TARGET_STATE"
+ fi
- ln -sf \
- "theme-${TARGET_STATE}.css" \
- "$HOME/dotfiles-gentoo/waybar/.config/waybar/theme.css"
+ ln -sf \
+ "theme-${TARGET_STATE}.css" \
+ "$HOME/dotfiles-gentoo/waybar/.config/waybar/theme.css"
- ln -sf \
- "settings-${TARGET_STATE}.ini" \
- "$HOME/dotfiles-gentoo/gtk/.config/gtk-3.0/settings.ini"
+ ln -sf \
+ "settings-${TARGET_STATE}.ini" \
+ "$HOME/dotfiles-gentoo/gtk/.config/gtk-3.0/settings.ini"
- echo "$TARGET_STATE" >"$STATE_FILE"
- echo "$WALLPAPER" >"$WALLPAPER_STATE_FILE"
- log "switched to $TARGET_STATE ($WALLPAPER)"
- else
- # State is intentionally NOT written so the next loop iteration retries.
- log "FAILED to apply $TARGET_STATE ($WALLPAPER), will retry"
- fi
+ echo "$TARGET_STATE" >"$STATE_FILE"
+ echo "$WALLPAPER" >"$WALLPAPER_STATE_FILE"
+ log "switched to $TARGET_STATE ($WALLPAPER)"
+ return 0
+ else
+ log "FAILED to apply $TARGET_STATE ($WALLPAPER)"
+ return 1
+ fi
+}
+
+daemon_loop() {
+ # Refuse to run a second daemon instance (e.g. manual run while one is alive).
+ if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE" 2>/dev/null)" 2>/dev/null; then
+ log "daemon already running (pid $(cat "$PID_FILE")), exiting"
+ exit 0
fi
+ echo $$ >"$PID_FILE"
+
+ while true; do
+ resolve_target
+ apply_target || true # failure is retried on the next loop, state is left untouched
+ sleep 60
+ done
+}
- sleep 60
-done
+case "${1:-}" in
+--daemon | -d) daemon_loop ;;
+"" | day | light | night | dark)
+ resolve_target "${1:-}"
+ apply_target
+ exit $?
+ ;;
+-h | --help)
+ echo "usage: $0 [day|night|--daemon]" >&2
+ exit 0
+ ;;
+*)
+ echo "usage: $0 [day|night|--daemon]" >&2
+ exit 1
+ ;;
+esac
diff --git a/nvim/.config/nvim/.gitignore b/nvim/.config/nvim/.gitignore
deleted file mode 100644
index cc5457a..0000000
--- a/nvim/.config/nvim/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-tt.*
-.tests
-doc/tags
-debug
-.repro
-foo.*
-*.log
-data
diff --git a/nvim/.config/nvim/.neoconf.json b/nvim/.config/nvim/.neoconf.json
deleted file mode 100644
index 7c48087..0000000
--- a/nvim/.config/nvim/.neoconf.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "neodev": {
- "library": {
- "enabled": true,
- "plugins": true
- }
- },
- "neoconf": {
- "plugins": {
- "lua_ls": {
- "enabled": true
- }
- }
- }
-}
diff --git a/nvim/.config/nvim/LICENSE b/nvim/.config/nvim/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/nvim/.config/nvim/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/nvim/.config/nvim/README.md b/nvim/.config/nvim/README.md
deleted file mode 100644
index 185280b..0000000
--- a/nvim/.config/nvim/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# 💤 LazyVim
-
-A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
-Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua
index 2514f9e..6bf6f8e 100644
--- a/nvim/.config/nvim/init.lua
+++ b/nvim/.config/nvim/init.lua
@@ -1,2 +1,4 @@
--- bootstrap lazy.nvim, LazyVim and your plugins
-require("config.lazy")
+require("caelus.init").colorscheme()
+require("config.keymaps")
+require("config.options")
+require("config.plugins")
diff --git a/nvim/.config/nvim/lazyvim.json b/nvim/.config/nvim/lazyvim.json
deleted file mode 100644
index d8bcaf6..0000000
--- a/nvim/.config/nvim/lazyvim.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extras": [
-
- ],
- "install_version": 8,
- "news": {
- "NEWS.md": "11866"
- },
- "version": 8
-} \ No newline at end of file
diff --git a/nvim/.config/nvim/lua/caelus/init.lua b/nvim/.config/nvim/lua/caelus/init.lua
new file mode 100644
index 0000000..dec0a41
--- /dev/null
+++ b/nvim/.config/nvim/lua/caelus/init.lua
@@ -0,0 +1,100 @@
+local M = {};
+
+local colors = {
+ bg = "#0f0f0f",
+ gray0 = "#141514";
+ gray1 = "#1e1f1e";
+ gray2 = "#272a28";
+ gray3 = "#3b403c";
+ gray4 = "#585f5b";
+ gray5 = "#6c756f";
+ gray6 = "#888e7b";
+ gray7 = "#9a9c8b";
+ gray8 = "#b6b69a";
+ gray9 = "#d9cdb5";
+ gray10 = "#e3d6c9";
+ fg = "#f4decd",
+ red = "#f16e65";
+ lred = "#ef968f";
+ orange = "#ef934d";
+ yellow = "#efbf71";
+ green = "#7ec97e";
+ lgreen = "#a4daa4";
+ cyan = "#7ec9a3";
+ lcyan = "#abd4bf";
+ blue = "#71b4d6";
+ lblue = "#b0d4e8";
+ magenta = "#e28dc6";
+ lmagenta = "#ebadd6";
+}
+
+function M.colorscheme()
+ vim.cmd("highlight clear")
+ vim.cmd("syntax reset")
+
+ vim.o.background = "dark";
+ vim.g.colors_name = "caelus";
+
+ local set = vim.api.nvim_set_hl
+
+ -- ui
+ set(0, "Normal", { fg = colors.fg, bg = colors.bg })
+ set(0, "NormalFloat", { fg = colors.fg, bg = colors.bg })
+ set(0, "FloatBorder", { fg = colors.fg, bg = colors.bg })
+ set(0, "CursorLine", { bg = colors.gray2 })
+ set(0, "Visual", { bg = colors.gray3 })
+ set(0, "Search", { fg = colors.bg, bg = colors.orange })
+ set(0, "IncSearch", { fg = colors.bg, bg = colors.orange })
+ set(0, "StatusLine", { bg = colors.gray2 })
+ set(0, "StatusLineNC", { bg = colors.orange })
+ set(0, "VertSplit", { fg = colors.gray8 })
+ set(0, "WinSeparator", { fg = colors.gray8 })
+ set(0, "LineNr", { fg = colors.gray6 })
+ set(0, "CursorLineNr", { fg = colors.orange, bold = true })
+ set(0, "SignColumn", { bg = colors.bg })
+ set(0, "Folded", { fg = colors.gray8, bg = colors.gray3 })
+
+ -- popup
+ set(0, "Pmenu", { fg = colors.fg, bg = colors.gray10 })
+ set(0, "PmenuSel", { fg = colors.bg, bg = colors.orange })
+ set(0, "PmenuSbar", { bg = colors.gray10 })
+ set(0, "PmenuThumb", { bg = colors.orange })
+
+ -- syntax
+ set(0, "Comment", { fg = colors.gray8, italic = true })
+ set(0, "Constant", { fg = colors.magenta })
+ set(0, "String", { fg = colors.green })
+ set(0, "Identifier", { fg = colors.blue })
+ set(0, "Function", { fg = colors.yellow })
+ set(0, "Statement", { fg = colors.red })
+ set(0, "Type", { fg = colors.cyan, bold = true })
+ set(0, "Special", { fg = colors.yellow })
+ set(0, "Error", { fg = colors.red, bold = true })
+ set(0, "Keyword", { fg = colors.red })
+ set(0, "Variable", { fg = colors.fg })
+ set(0, "TSKeyword", { fg = colors.red })
+ set(0, "TSFunction", { fg = colors.yellow })
+ set(0, "TSVariable", { fg = colors.fg })
+ set(0, "TSType", { fg = colors.cyan })
+
+ -- blink
+ set(0, "BlinkCmpMenu", { bg = colors.gray1 })
+ set(0, "BlinkCmpMenuBorder", { fg = colors.gray6, bg = colors.gray1 })
+ set(0, "BlinkCmpMenuSelection", { fg = colors.bg, bg = colors.orange })
+ set(0, "BlinkCmpLabel", { fg = colors.fg })
+ set(0, "BlinkCmpLabelDetail", { fg = colors.gray7 })
+ set(0, "BlinkCmpLabelDescription",{ fg = colors.gray8 })
+ set(0, "BlinkCmpLabelMatch", { fg = colors.orange, bold = true })
+ set(0, "BlinkCmpKind", { fg = colors.cyan })
+ set(0, "BlinkCmpDoc", { fg = colors.fg, bg = colors.gray2 })
+ set(0, "BlinkCmpDocBorder", { fg = colors.gray5, bg = colors.gray2 })
+
+ if package.loaded['lualine'] then
+ require('lualine').setup({
+ options = { theme = 'auto' },
+ })
+ end
+
+end
+
+return M
diff --git a/nvim/.config/nvim/lua/config/autocmds.lua b/nvim/.config/nvim/lua/config/autocmds.lua
deleted file mode 100644
index 4221e75..0000000
--- a/nvim/.config/nvim/lua/config/autocmds.lua
+++ /dev/null
@@ -1,8 +0,0 @@
--- Autocmds are automatically loaded on the VeryLazy event
--- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
---
--- Add any additional autocmds here
--- with `vim.api.nvim_create_autocmd`
---
--- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
--- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
diff --git a/nvim/.config/nvim/lua/config/keymaps.lua b/nvim/.config/nvim/lua/config/keymaps.lua
index 2c134f7..e2987bc 100644..100755
--- a/nvim/.config/nvim/lua/config/keymaps.lua
+++ b/nvim/.config/nvim/lua/config/keymaps.lua
@@ -1,3 +1,13 @@
--- Keymaps are automatically loaded on the VeryLazy event
--- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
--- Add any additional keymaps here
+localopts = { noremap = true, silent = true }
+
+vim.g.mapleader = " "
+vim.g.maplocalleader = " "
+
+vim.keymap.set({"n", "v"}, "y", '"+y', { noremap = true, silent = true })
+
+vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = "moves lines down in visual selection" })
+vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = "moves lines up in visual selection" })
+
+vim.keymap.set("n", "<leader>al", "<CMD>term<CR>", { desc = "Open terminal" })
+
+vim.keymap.set("n", "<leader>f", vim.lsp.buf.format)
diff --git a/nvim/.config/nvim/lua/config/lazy.lua b/nvim/.config/nvim/lua/config/lazy.lua
deleted file mode 100644
index d73bfa1..0000000
--- a/nvim/.config/nvim/lua/config/lazy.lua
+++ /dev/null
@@ -1,53 +0,0 @@
-local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
-if not (vim.uv or vim.loop).fs_stat(lazypath) then
- local lazyrepo = "https://github.com/folke/lazy.nvim.git"
- local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
- if vim.v.shell_error ~= 0 then
- vim.api.nvim_echo({
- { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
- { out, "WarningMsg" },
- { "\nPress any key to exit..." },
- }, true, {})
- vim.fn.getchar()
- os.exit(1)
- end
-end
-vim.opt.rtp:prepend(lazypath)
-
-require("lazy").setup({
- spec = {
- -- add LazyVim and import its plugins
- { "LazyVim/LazyVim", import = "lazyvim.plugins" },
- -- import/override with your plugins
- { import = "plugins" },
- },
- defaults = {
- -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
- -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
- lazy = false,
- -- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
- -- have outdated releases, which may break your Neovim install.
- version = false, -- always use the latest git commit
- -- version = "*", -- try installing the latest stable version for plugins that support semver
- },
- install = { colorscheme = { "tokyonight", "habamax" } },
- checker = {
- enabled = true, -- check for plugin updates periodically
- notify = false, -- notify on update
- }, -- automatically check for plugin updates
- performance = {
- rtp = {
- -- disable some rtp plugins
- disabled_plugins = {
- "gzip",
- -- "matchit",
- -- "matchparen",
- -- "netrwPlugin",
- "tarPlugin",
- "tohtml",
- "tutor",
- "zipPlugin",
- },
- },
- },
-})
diff --git a/nvim/.config/nvim/lua/config/options.lua b/nvim/.config/nvim/lua/config/options.lua
index 3ea1454..dac7c76 100644..100755
--- a/nvim/.config/nvim/lua/config/options.lua
+++ b/nvim/.config/nvim/lua/config/options.lua
@@ -1,3 +1,40 @@
--- Options are automatically loaded before lazy.nvim startup
--- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
--- Add any additional options here
+vim.cmd("let g:netrw_banner = 0")
+vim.cmd("set termguicolors")
+
+vim.opt.guicursor = ""
+vim.opt.nu = true
+vim.opt.relativenumber = false
+
+vim.opt.tabstop = 2
+vim.opt.softtabstop = 2
+vim.opt.shiftwidth = 2
+vim.opt.expandtab = true
+vim.opt.autoindent = true
+vim.opt.smartindent = true
+vim.opt.wrap = true
+
+vim.opt.swapfile = false
+vim.opt.backup = false
+vim.opt.undofile = true
+
+vim.opt.incsearch = true
+vim.opt.inccommand = "split"
+vim.opt.ignorecase = true
+vim.opt.smartcase = true
+
+vim.opt.termguicolors = true
+vim.opt.background = "dark"
+vim.opt.scrolloff = 8
+vim.opt.signcolumn = "yes"
+
+vim.opt.backspace = { "start", "eol", "indent" }
+
+vim.opt.splitright = true
+vim.opt.splitbelow = true
+
+vim.opt.hlsearch = true
+
+vim.opt.mouse = "a"
+vim.g.editorconfig = true
+
+vim.g.markdown_folding = 1
diff --git a/nvim/.config/nvim/lua/config/plugins.lua b/nvim/.config/nvim/lua/config/plugins.lua
new file mode 100644
index 0000000..f0b7619
--- /dev/null
+++ b/nvim/.config/nvim/lua/config/plugins.lua
@@ -0,0 +1,97 @@
+vim.pack.add {
+ 'https://github.com/ollykel/v-vim',
+ 'https://github.com/hrsh7th/nvim-cmp',
+ 'https://github.com/saghen/blink.cmp',
+ 'https://github.com/alaviss/nim.nvim',
+ 'https://github.com/stevearc/oil.nvim',
+ 'https://github.com/folke/trouble.nvim',
+ 'https://github.com/nvim-mini/mini.nvim',
+ 'https://github.com/jiaoshijie/undotree',
+ 'https://github.com/thePrimeagen/harpoon',
+ 'https://github.com/hrsh7th/cmp-nvim-lsp',
+ 'https://github.com/mason-org/mason.nvim',
+ 'https://github.com/nvim-orgmode/orgmode',
+ 'https://github.com/windwp/nvim-autopairs',
+ 'https://github.com/neovim/nvim-lspconfig',
+ 'https://github.com/nvim-lua/plenary.nvim',
+ 'https://github.com/mfussenegger/nvim-lint',
+ 'https://github.com/akinsho/org-bullets.nvim',
+ 'https://github.com/nvim-lualine/lualine.nvim',
+ 'https://github.com/norcalli/nvim-colorizer.lua',
+ 'https://github.com/nvim-tree/nvim-web-devicons',
+ 'https://github.com/rafamadriz/friendly-snippets',
+ 'https://github.com/nvim-telescope/telescope.nvim',
+ 'https://github.com/mason-org/mason-lspconfig.nvim',
+ 'https://github.com/nvim-treesitter/nvim-treesitter',
+ 'https://github.com/brenoprata10/nvim-highlight-colors',
+ 'https://github.com/antosha417/nvim-lsp-file-operations',
+ 'https://github.com/nvim-telescope/telescope-ui-select.nvim',
+ 'https://github.com/MeanderingProgrammer/render-markdown.nvim',
+}
+
+-- vlang
+--vim.lsp.config.vlang.setup({})
+
+-- oil
+require("oil").setup({ default_file_explorer = true,
+ columns = {},
+ keymaps = {
+ ["q"] = "actions.close",
+ },
+ delete_to_trash = true,
+ view_options = {
+ show_hidden = true,
+ },
+ skip_confirm_for_simple_edits = true,
+})
+vim.keymap.set("n", "<leader>fm", "<CMD>Oil<CR>", { desc = "Open parent directory" })
+
+-- harpoon
+vim.keymap.set("n", "<leader>ad", function()
+ harpoon:list():add()
+end, { desc = "Harpoon add file" })
+vim.keymap.set("n", "<C-e>", function()
+ harpoon.ui:toggle_quick_menu(harpoon:list())
+end)
+
+-- mason
+require("mason").setup({
+ opts = {
+ ui = {
+ icons = {
+ package_installed = "*",
+ package_pending = ">",
+ package_uninstalled = "x"
+ }
+ }
+ }
+})
+
+-- autopairs
+require("nvim-autopairs").setup({
+ check_ts = true,
+ ts_config = {
+ lua = { "string" },
+ javascript = { "template_string" },
+ java = false,
+ },
+})
+
+-- lspconfig
+vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
+vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts)
+vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
+
+-- lualine
+require('lualine').setup {
+ options = {
+ icons_enabled = true,
+ theme = 'auto',
+ }
+}
+
+-- colorizer
+require("colorizer").setup()
+
+-- mason-lspconfig
+require("mason-lspconfig").setup()
diff --git a/nvim/.config/nvim/lua/plugins/example.lua b/nvim/.config/nvim/lua/plugins/example.lua
deleted file mode 100644
index 17f53d6..0000000
--- a/nvim/.config/nvim/lua/plugins/example.lua
+++ /dev/null
@@ -1,197 +0,0 @@
--- since this is just an example spec, don't actually load anything here and return an empty spec
--- stylua: ignore
-if true then return {} end
-
--- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
---
--- In your plugin files, you can:
--- * add extra plugins
--- * disable/enabled LazyVim plugins
--- * override the configuration of LazyVim plugins
-return {
- -- add gruvbox
- { "ellisonleao/gruvbox.nvim" },
-
- -- Configure LazyVim to load gruvbox
- {
- "LazyVim/LazyVim",
- opts = {
- colorscheme = "gruvbox",
- },
- },
-
- -- change trouble config
- {
- "folke/trouble.nvim",
- -- opts will be merged with the parent spec
- opts = { use_diagnostic_signs = true },
- },
-
- -- disable trouble
- { "folke/trouble.nvim", enabled = false },
-
- -- override nvim-cmp and add cmp-emoji
- {
- "hrsh7th/nvim-cmp",
- dependencies = { "hrsh7th/cmp-emoji" },
- ---@param opts cmp.ConfigSchema
- opts = function(_, opts)
- table.insert(opts.sources, { name = "emoji" })
- end,
- },
-
- -- change some telescope options and a keymap to browse plugin files
- {
- "nvim-telescope/telescope.nvim",
- keys = {
- -- add a keymap to browse plugin files
- -- stylua: ignore
- {
- "<leader>fp",
- function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
- desc = "Find Plugin File",
- },
- },
- -- change some options
- opts = {
- defaults = {
- layout_strategy = "horizontal",
- layout_config = { prompt_position = "top" },
- sorting_strategy = "ascending",
- winblend = 0,
- },
- },
- },
-
- -- add pyright to lspconfig
- {
- "neovim/nvim-lspconfig",
- ---@class PluginLspOpts
- opts = {
- ---@type lspconfig.options
- servers = {
- -- pyright will be automatically installed with mason and loaded with lspconfig
- pyright = {},
- },
- },
- },
-
- -- add tsserver and setup with typescript.nvim instead of lspconfig
- {
- "neovim/nvim-lspconfig",
- dependencies = {
- "jose-elias-alvarez/typescript.nvim",
- init = function()
- require("lazyvim.util").lsp.on_attach(function(_, buffer)
- -- stylua: ignore
- vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
- vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
- end)
- end,
- },
- ---@class PluginLspOpts
- opts = {
- ---@type lspconfig.options
- servers = {
- -- tsserver will be automatically installed with mason and loaded with lspconfig
- tsserver = {},
- },
- -- you can do any additional lsp server setup here
- -- return true if you don't want this server to be setup with lspconfig
- ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
- setup = {
- -- example to setup with typescript.nvim
- tsserver = function(_, opts)
- require("typescript").setup({ server = opts })
- return true
- end,
- -- Specify * to use this function as a fallback for any server
- -- ["*"] = function(server, opts) end,
- },
- },
- },
-
- -- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
- -- treesitter, mason and typescript.nvim. So instead of the above, you can use:
- { import = "lazyvim.plugins.extras.lang.typescript" },
-
- -- add more treesitter parsers
- {
- "nvim-treesitter/nvim-treesitter",
- opts = {
- ensure_installed = {
- "bash",
- "html",
- "javascript",
- "json",
- "lua",
- "markdown",
- "markdown_inline",
- "python",
- "query",
- "regex",
- "tsx",
- "typescript",
- "vim",
- "yaml",
- },
- },
- },
-
- -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
- -- would overwrite `ensure_installed` with the new value.
- -- If you'd rather extend the default config, use the code below instead:
- {
- "nvim-treesitter/nvim-treesitter",
- opts = function(_, opts)
- -- add tsx and treesitter
- vim.list_extend(opts.ensure_installed, {
- "tsx",
- "typescript",
- })
- end,
- },
-
- -- the opts function can also be used to change the default opts:
- {
- "nvim-lualine/lualine.nvim",
- event = "VeryLazy",
- opts = function(_, opts)
- table.insert(opts.sections.lualine_x, {
- function()
- return "😄"
- end,
- })
- end,
- },
-
- -- or you can return new options to override all the defaults
- {
- "nvim-lualine/lualine.nvim",
- event = "VeryLazy",
- opts = function()
- return {
- --[[add your custom lualine config here]]
- }
- end,
- },
-
- -- use mini.starter instead of alpha
- { import = "lazyvim.plugins.extras.ui.mini-starter" },
-
- -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
- { import = "lazyvim.plugins.extras.lang.json" },
-
- -- add any tools you want to have installed below
- {
- "williamboman/mason.nvim",
- opts = {
- ensure_installed = {
- "stylua",
- "shellcheck",
- "shfmt",
- "flake8",
- },
- },
- },
-}
diff --git a/nvim/.config/nvim/nvim-pack-lock.json b/nvim/.config/nvim/nvim-pack-lock.json
new file mode 100644
index 0000000..dc69b9a
--- /dev/null
+++ b/nvim/.config/nvim/nvim-pack-lock.json
@@ -0,0 +1,116 @@
+{
+ "plugins": {
+ "blink.cmp": {
+ "rev": "679a2ffad4bae720bb12e6bcdf57b0dd8b8a80f8",
+ "src": "https://github.com/saghen/blink.cmp"
+ },
+ "cmp-nvim-lsp": {
+ "rev": "cbc7b02bb99fae35cb42f514762b89b5126651ef",
+ "src": "https://github.com/hrsh7th/cmp-nvim-lsp"
+ },
+ "friendly-snippets": {
+ "rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9",
+ "src": "https://github.com/rafamadriz/friendly-snippets"
+ },
+ "harpoon": {
+ "rev": "1bc17e3e42ea3c46b33c0bbad6a880792692a1b3",
+ "src": "https://github.com/thePrimeagen/harpoon"
+ },
+ "lualine.nvim": {
+ "rev": "47f91c416daef12db467145e16bed5bbfe00add8",
+ "src": "https://github.com/nvim-lualine/lualine.nvim"
+ },
+ "mason-lspconfig.nvim": {
+ "rev": "25f609e7fca78af7cede4f9fa3af8a94b1c4950b",
+ "src": "https://github.com/mason-org/mason-lspconfig.nvim"
+ },
+ "mason.nvim": {
+ "rev": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65",
+ "src": "https://github.com/mason-org/mason.nvim"
+ },
+ "mini.nvim": {
+ "rev": "3923662bf3d6ca49a9503f8d7196ea0450983e6a",
+ "src": "https://github.com/nvim-mini/mini.nvim"
+ },
+ "nim.nvim": {
+ "rev": "9ee8fdc04ad3d7fcbd9679e0be3477543f17b9d9",
+ "src": "https://github.com/alaviss/nim.nvim"
+ },
+ "nvim-autopairs": {
+ "rev": "59bce2eef357189c3305e25bc6dd2d138c1683f5",
+ "src": "https://github.com/windwp/nvim-autopairs"
+ },
+ "nvim-cmp": {
+ "rev": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca",
+ "src": "https://github.com/hrsh7th/nvim-cmp"
+ },
+ "nvim-colorizer.lua": {
+ "rev": "a065833f35a3a7cc3ef137ac88b5381da2ba302e",
+ "src": "https://github.com/norcalli/nvim-colorizer.lua"
+ },
+ "nvim-highlight-colors": {
+ "rev": "e2cb22089cc2358b2b995c09578224f142de6039",
+ "src": "https://github.com/brenoprata10/nvim-highlight-colors"
+ },
+ "nvim-lint": {
+ "rev": "4b03656c09c1561f89b6aa0665c15d292ba9499d",
+ "src": "https://github.com/mfussenegger/nvim-lint"
+ },
+ "nvim-lsp-file-operations": {
+ "rev": "b9c795d3973e8eec22706af14959bc60c579e771",
+ "src": "https://github.com/antosha417/nvim-lsp-file-operations"
+ },
+ "nvim-lspconfig": {
+ "rev": "8e2084bf5e40c79c1f42210a6ef96a0a4793a763",
+ "src": "https://github.com/neovim/nvim-lspconfig"
+ },
+ "nvim-treesitter": {
+ "rev": "539abf6da5ee8702e37b82cc953131dadd570da2",
+ "src": "https://github.com/nvim-treesitter/nvim-treesitter"
+ },
+ "nvim-web-devicons": {
+ "rev": "d7462543c9e366c0d196c7f67a945eaaf5d99414",
+ "src": "https://github.com/nvim-tree/nvim-web-devicons"
+ },
+ "oil.nvim": {
+ "rev": "0fcc83805ad11cf714a949c98c605ed717e0b83e",
+ "src": "https://github.com/stevearc/oil.nvim"
+ },
+ "org-bullets.nvim": {
+ "rev": "503fe053550879cc202086a40454e46a87c41ddb",
+ "src": "https://github.com/akinsho/org-bullets.nvim"
+ },
+ "orgmode": {
+ "rev": "1ab7b456020de8bdaed7d8135b5376a0b4419b11",
+ "src": "https://github.com/nvim-orgmode/orgmode"
+ },
+ "plenary.nvim": {
+ "rev": "b9fd5226c2f76c951fc8ed5923d85e4de065e509",
+ "src": "https://github.com/nvim-lua/plenary.nvim"
+ },
+ "render-markdown.nvim": {
+ "rev": "c7188a8f9d2953696b6303caccbf39c51fa2c1b1",
+ "src": "https://github.com/MeanderingProgrammer/render-markdown.nvim"
+ },
+ "telescope-ui-select.nvim": {
+ "rev": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2",
+ "src": "https://github.com/nvim-telescope/telescope-ui-select.nvim"
+ },
+ "telescope.nvim": {
+ "rev": "cfb85dcf7f822b79224e9e6aef9e8c794211b20b",
+ "src": "https://github.com/nvim-telescope/telescope.nvim"
+ },
+ "trouble.nvim": {
+ "rev": "bd67efe408d4816e25e8491cc5ad4088e708a69a",
+ "src": "https://github.com/folke/trouble.nvim"
+ },
+ "undotree": {
+ "rev": "0e6d41d55ad147407e4ba00a292973de8db0b836",
+ "src": "https://github.com/jiaoshijie/undotree"
+ },
+ "v-vim": {
+ "rev": "1dc1388bafb89072f8349dbd96f9462ae22237cb",
+ "src": "https://github.com/ollykel/v-vim"
+ }
+ }
+}
diff --git a/nvim/.config/nvim/stylua.toml b/nvim/.config/nvim/stylua.toml
deleted file mode 100644
index 5d6c50d..0000000
--- a/nvim/.config/nvim/stylua.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-indent_type = "Spaces"
-indent_width = 2
-column_width = 120 \ No newline at end of file
diff --git a/portage/etc/portage/package.accept_keywords/badwolf b/portage/etc/portage/package.accept_keywords/badwolf
new file mode 100644
index 0000000..dcf5199
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/badwolf
@@ -0,0 +1 @@
+www-client/badwolf
diff --git a/portage/etc/portage/package.accept_keywords/waypaper b/portage/etc/portage/package.accept_keywords/waypaper
new file mode 100644
index 0000000..c8d3e43
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/waypaper
@@ -0,0 +1,5 @@
+gui-apps/waypaper ~amd64
+dev-python/imageio ~amd64
+dev-python/imageio-ffmpeg ~amd64
+dev-python/imageio-ffmpeg ~amd64
+dev-python/screeninfo ~amd64
diff --git a/portage/etc/portage/package.use/libreoffice b/portage/etc/portage/package.use/libreoffice
new file mode 100644
index 0000000..eda0a78
--- /dev/null
+++ b/portage/etc/portage/package.use/libreoffice
@@ -0,0 +1 @@
+app-office/libreoffice l10n_ru
diff --git a/portage/etc/portage/package.use/qutebrowser b/portage/etc/portage/package.use/qutebrowser
new file mode 100644
index 0000000..a4db9cf
--- /dev/null
+++ b/portage/etc/portage/package.use/qutebrowser
@@ -0,0 +1 @@
+>=dev-python/pyqt6-6.11.0-r1 webchannel
diff --git a/portage/etc/portage/package.use/waypaper b/portage/etc/portage/package.use/waypaper
new file mode 100644
index 0000000..eb72065
--- /dev/null
+++ b/portage/etc/portage/package.use/waypaper
@@ -0,0 +1 @@
+gui-apps/waypaper python_targets_python3_12
diff --git a/portage/etc/portage/package.use/zz-autounmask b/portage/etc/portage/package.use/zz-autounmask
index 4b6f92b..622a6b5 100644
--- a/portage/etc/portage/package.use/zz-autounmask
+++ b/portage/etc/portage/package.use/zz-autounmask
@@ -7,6 +7,7 @@
# required by dev-qt/qtmultimedia-6.11.1::gentoo[qml]
# required by kde-apps/dolphin-26.04.3::gentoo
# required by kde-apps/dolphin (argument)
+>=dev-python/pyqt6-6.11.0-r1 quick
>=sys-libs/zlib-1.3.2-r1 minizip
# required by x11-libs/cairo-1.18.4-r1::gentoo
# required by media-libs/harfbuzz-12.3.2::gentoo[cairo]
@@ -476,3 +477,113 @@ x11-libs/libX11 abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libGL abi_x86_32
media-libs/libglvnd abi_x86_32
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pygobject-3.56.3 python_targets_python3_12
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pillow-12.3.0 python_targets_python3_12
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/imageio-2.37.4 python_targets_python3_12
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/imageio-ffmpeg-0.6.0 python_targets_python3_12
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/screeninfo-0.8.1 python_targets_python3_12
+# required by dev-python/screeninfo-0.8.1::guru
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/poetry-core-2.4.1 python_targets_python3_12
+# required by dev-python/poetry-core-2.4.1::gentoo
+# required by dev-python/screeninfo-0.8.1::guru
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/fastjsonschema-2.21.2 python_targets_python3_12
+# required by dev-python/poetry-core-2.4.1::gentoo
+# required by dev-python/screeninfo-0.8.1::guru
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/lark-1.3.1 python_targets_python3_12
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/numpy-2.5.1 python_targets_python3_12
+# required by dev-python/numpy-2.5.1::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/cython-3.2.8 python_targets_python3_12
+# required by dev-python/numpy-2.5.1::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/meson-python-0.20.0 python_targets_python3_12
+# required by dev-python/meson-python-0.20.0::gentoo[-test]
+# required by dev-python/numpy-2.5.1::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pyproject-metadata-0.12.1 python_targets_python3_12
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/olefile-0.47 python_targets_python3_12
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pybind11-3.0.4 python_targets_python3_12
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/scikit-build-core-1.0.3 python_targets_python3_12
+# required by dev-python/scikit-build-core-1.0.3::gentoo
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pathspec-1.1.1 python_targets_python3_12
+# required by dev-python/scikit-build-core-1.0.3::gentoo
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/hatch-vcs-0.5.0 python_targets_python3_12
+# required by dev-python/hatch-vcs-0.5.0::gentoo
+# required by dev-python/scikit-build-core-1.0.3::gentoo
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/hatchling-1.31.0 python_targets_python3_12
+# required by dev-python/hatchling-1.31.0::gentoo
+# required by dev-python/hatch-vcs-0.5.0::gentoo
+# required by dev-python/scikit-build-core-1.0.3::gentoo
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/editables-0.6 python_targets_python3_12
+# required by dev-python/hatchling-1.31.0::gentoo
+# required by dev-python/hatch-vcs-0.5.0::gentoo
+# required by dev-python/scikit-build-core-1.0.3::gentoo
+# required by dev-python/pybind11-3.0.4::gentoo
+# required by dev-python/pillow-12.3.0::gentoo
+# required by dev-python/imageio-2.37.4::gentoo
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pluggy-1.6.0 python_targets_python3_12
+# required by dev-python/pygobject-3.56.3::gentoo[cairo]
+# required by gui-apps/waypaper-2.7-r1::guru
+# required by gui-apps/waypaper (argument)
+>=dev-python/pycairo-1.29.0-r1 python_targets_python3_12
diff --git a/portage/etc/portage/savedconfig/www-client/badwolf-1.4.0-r2 b/portage/etc/portage/savedconfig/www-client/badwolf-1.4.0-r2
new file mode 100644
index 0000000..c3d5177
--- /dev/null
+++ b/portage/etc/portage/savedconfig/www-client/badwolf-1.4.0-r2
@@ -0,0 +1,117 @@
+// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
+// SPDX-License-Identifier: BSD-3-Clause
+
+#ifndef CONFIG_H_INCLUDED
+#define CONFIG_H_INCLUDED
+/* BADWOLF_TAB_POSITION: Position of the tab listing, can be one of:
+ * - GTK_POS_TOP
+ * - GTK_POS_BOTTOM
+ * - GTK_POS_RIGHT
+ * - GTK_POS_LEFT
+ *
+ * See https://docs.gtk.org/gtk3/enum.PositionType.html
+ */
+#define BADWOLF_TAB_POSITION GTK_POS_TOP
+
+/* BADWOLF_TAB_LABEL_CHARWIDTH: Amount of characters the tab label text fits
+ * Quite conflicts with BADWOLF_TAB_BOX_WIDTH, recommended to only define one
+ */
+#define BADWOLF_TAB_LABEL_CHARWIDTH 26
+
+/* BADWOLF_TAB_BOX_WIDTH: Requested width (in pixels) for the whole tab
+ * Quite conflicts with BADWOLF_TAB_LABEL_CHARWIDTH, recommended to only define one
+ */
+//#define BADWOLF_TAB_BOX_WIDTH 120
+
+// BADWOLF_TAB_HEXPAND: Should the tab try to fill the available horizontal space?
+#define BADWOLF_TAB_HEXPAND FALSE
+
+/* BADWOLF_TAB_LABEL_ELLIPSIZE: pango ellipsize mode of the tab label text, can be one of:
+ * - PANGO_ELLIPSIZE_NONE
+ * - PANGO_ELLIPSIZE_START
+ * - PANGO_ELLIPSIZE_MIDDLE
+ * - PANGO_ELLIPSIZE_END
+ *
+ * See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
+ */
+#define BADWOLF_TAB_LABEL_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
+
+// BADWOLF_BOX_PADDING: Amount of padding between browser’s box (tab child) elements
+#define BADWOLF_BOX_PADDING 0
+
+// BADWOLF_TOOLBAR_PADDING: Amount of padding between toolbar elements
+#define BADWOLF_TOOLBAR_PADDING 0
+
+// BADWOLF_TOOLBAR_PADDING: Amount of padding between toolbar elements
+#define BADWOLF_TOOLBAR_SEPARATOR_PADDING 4
+
+// BADWOLF_STATUSBAR_PADDING: Amount of padding between statusbar elements
+#define BADWOLF_STATUSBAR_PADDING 0
+
+// BADWOLF_DOWNLOAD_PADDING: Amount of padding between download list row-elements
+#define BADWOLF_DOWNLOAD_PADDING 5
+
+/* BADWOLF_DEFAULT_WIDTH / BADWOLF_DEFAULT_HEIGHT:
+ * Used to define the default width/height of the window,
+ * useful for floating Window Managers, probably useless in tiling ones
+ *
+ * See https://docs.gtk.org/gtk3/method.Window.set_default_size.html
+ */
+#define BADWOLF_DEFAULT_WIDTH 800
+#define BADWOLF_DEFAULT_HEIGHT 600
+
+/* BADWOLF_WEBKIT_SETTINGS:
+ * Used when creating a new view with webkit_settings_new_with_settings the usage is:
+ * setting-name, setting-value, setting-name, …, NULL
+ *
+ * See: https://webkitgtk.org/reference/webkit2gtk/stable/class.Settings.html#properties
+ */
+// clang-format off
+#define BADWOLF_WEBKIT_SETTINGS \
+ "default-charset", "utf-8", \
+ "enable-caret-browsing", FALSE, \
+ "enable-developer-extras", TRUE, \
+ "enable-dns-prefetching", FALSE, \
+ "enable-hyperlink-auditing", FALSE, \
+ "enable-java", FALSE, \
+ "enable-javascript-markup", FALSE, \
+ "enable-javascript", TRUE, \
+ "enable-plugins", FALSE, \
+ "javascript-can-access-clipboard", FALSE, \
+ "javascript-can-open-windows-automatically", FALSE, \
+ "media-playback-requires-user-gesture", TRUE, \
+ "minimum-font-size", 9, \
+ "allow-top-navigation-to-data-urls", FALSE, \
+ NULL
+// clang-format on
+
+/* BADWOLF_STATUSLABEL_ELLIPSIZE: pango ellipsize mode of the status bar label text, can be one of:
+ * - PANGO_ELLIPSIZE_NONE
+ * - PANGO_ELLIPSIZE_START
+ * - PANGO_ELLIPSIZE_MIDDLE
+ * - PANGO_ELLIPSIZE_END
+ *
+ * See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
+ */
+#define BADWOLF_STATUSLABEL_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
+
+/* BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE: pango ellipsize mode of the download destination path,
+ * can be one of:
+ * - PANGO_ELLIPSIZE_NONE
+ * - PANGO_ELLIPSIZE_START
+ * - PANGO_ELLIPSIZE_MIDDLE
+ * - PANGO_ELLIPSIZE_END
+ *
+ * See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
+ */
+#define BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
+
+// BADWOLF_LOCATION_INLINE_SELECTION: show selected completion as a selection in location entry
+#define BADWOLF_LOCATION_INLINE_SELECTION TRUE
+
+// BADWOLF_MAN_HTML_CMD: Command to render manpages to HTML.
+// Needs to support `[section] name` as additional arguments.
+// Default one made for mandoc
+#define BADWOLF_MAN_HTML_CMD "man", "-Thtml", "-Oman=man:%N.%S", "-Otoc"
+
+#endif /* CONFIG_H_INCLUDED */
diff --git a/portage/etc/portage/savedconfig/www-client/surf-2.1-r3 b/portage/etc/portage/savedconfig/www-client/surf-2.1-r3
new file mode 100644
index 0000000..ef44721
--- /dev/null
+++ b/portage/etc/portage/savedconfig/www-client/surf-2.1-r3
@@ -0,0 +1,192 @@
+/* modifier 0 means no modifier */
+static int surfuseragent = 1; /* Append Surf version to default WebKit user agent */
+static char *fulluseragent = ""; /* Or override the whole user agent string */
+static char *scriptfile = "~/.surf/script.js";
+static char *styledir = "~/.surf/styles/";
+static char *certdir = "~/.surf/certificates/";
+static char *cachedir = "~/.surf/cache/";
+static char *cookiefile = "~/.surf/cookies.txt";
+
+/* Webkit default features */
+/* Highest priority value will be used.
+ * Default parameters are priority 0
+ * Per-uri parameters are priority 1
+ * Command parameters are priority 2
+ */
+static Parameter defconfig[ParameterLast] = {
+ /* parameter Arg value priority */
+ [AccessMicrophone] = { { .i = 0 }, },
+ [AccessWebcam] = { { .i = 0 }, },
+ [Certificate] = { { .i = 0 }, },
+ [CaretBrowsing] = { { .i = 0 }, },
+ [CookiePolicies] = { { .v = "@Aa" }, },
+ [DefaultCharset] = { { .v = "UTF-8" }, },
+ [DiskCache] = { { .i = 1 }, },
+ [DNSPrefetch] = { { .i = 0 }, },
+ [Ephemeral] = { { .i = 0 }, },
+ [FileURLsCrossAccess] = { { .i = 0 }, },
+ [FontSize] = { { .i = 12 }, },
+ [FrameFlattening] = { { .i = 0 }, },
+ [Geolocation] = { { .i = 0 }, },
+ [HideBackground] = { { .i = 0 }, },
+ [Inspector] = { { .i = 0 }, },
+ [Java] = { { .i = 1 }, },
+ [JavaScript] = { { .i = 1 }, },
+ [KioskMode] = { { .i = 0 }, },
+ [LoadImages] = { { .i = 1 }, },
+ [MediaManualPlay] = { { .i = 1 }, },
+ [PreferredLanguages] = { { .v = (char *[]){ NULL } }, },
+ [RunInFullscreen] = { { .i = 0 }, },
+ [ScrollBars] = { { .i = 1 }, },
+ [ShowIndicators] = { { .i = 1 }, },
+ [SiteQuirks] = { { .i = 1 }, },
+ [SmoothScrolling] = { { .i = 0 }, },
+ [SpellChecking] = { { .i = 0 }, },
+ [SpellLanguages] = { { .v = ((char *[]){ "en_US", NULL }) }, },
+ [StrictTLS] = { { .i = 1 }, },
+ [Style] = { { .i = 1 }, },
+ [WebGL] = { { .i = 0 }, },
+ [ZoomLevel] = { { .f = 1.0 }, },
+};
+
+static UriParameters uriparams[] = {
+ { "(://|\\.)suckless\\.org(/|$)", {
+ [JavaScript] = { { .i = 0 }, 1 },
+ }, },
+};
+
+/* default window size: width, height */
+static int winsize[] = { 800, 600 };
+
+static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
+ WEBKIT_FIND_OPTIONS_WRAP_AROUND;
+
+#define PROMPT_GO "Go:"
+#define PROMPT_FIND "Find:"
+
+/* SETPROP(readprop, setprop, prompt)*/
+#define SETPROP(r, s, p) { \
+ .v = (const char *[]){ "/bin/sh", "-c", \
+ "prop=\"$(printf '%b' \"$(xprop -id $1 $2 " \
+ "| sed \"s/^$2(STRING) = //;s/^\\\"\\(.*\\)\\\"$/\\1/\")\" " \
+ "| dmenu -p \"$4\" -w $1)\" && xprop -id $1 -f $3 8s -set $3 \"$prop\"", \
+ "surf-setprop", winid, r, s, p, NULL \
+ } \
+}
+
+/* DOWNLOAD(URI, referer) */
+#define DOWNLOAD(u, r) { \
+ .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
+ "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \
+ " -e \"$3\" \"$4\"; read", \
+ "surf-download", useragent, cookiefile, r, u, NULL \
+ } \
+}
+
+/* PLUMB(URI) */
+/* This called when some URI which does not begin with "about:",
+ * "http://" or "https://" should be opened.
+ */
+#define PLUMB(u) {\
+ .v = (const char *[]){ "/bin/sh", "-c", \
+ "xdg-open \"$0\"", u, NULL \
+ } \
+}
+
+/* VIDEOPLAY(URI) */
+#define VIDEOPLAY(u) {\
+ .v = (const char *[]){ "/bin/sh", "-c", \
+ "mpv --really-quiet \"$0\"", u, NULL \
+ } \
+}
+
+/* styles */
+/*
+ * The iteration will stop at the first match, beginning at the beginning of
+ * the list.
+ */
+static SiteSpecific styles[] = {
+ /* regexp file in $styledir */
+ { ".*", "default.css" },
+};
+
+/* certificates */
+/*
+ * Provide custom certificate for urls
+ */
+static SiteSpecific certs[] = {
+ /* regexp file in $certdir */
+ { "://suckless\\.org/", "suckless.org.crt" },
+};
+
+#define MODKEY GDK_CONTROL_MASK
+
+/* hotkeys */
+/*
+ * If you use anything else but MODKEY and GDK_SHIFT_MASK, don't forget to
+ * edit the CLEANMASK() macro.
+ */
+static Key keys[] = {
+ /* modifier keyval function arg */
+ { MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
+ { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+ { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+
+ { 0, GDK_KEY_Escape, stop, { 0 } },
+ { MODKEY, GDK_KEY_c, stop, { 0 } },
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .i = 1 } },
+ { MODKEY, GDK_KEY_r, reload, { .i = 0 } },
+
+ { MODKEY, GDK_KEY_l, navigate, { .i = +1 } },
+ { MODKEY, GDK_KEY_h, navigate, { .i = -1 } },
+
+ /* vertical and horizontal scrolling, in viewport percentage */
+ { MODKEY, GDK_KEY_j, scrollv, { .i = +10 } },
+ { MODKEY, GDK_KEY_k, scrollv, { .i = -10 } },
+ { MODKEY, GDK_KEY_space, scrollv, { .i = +50 } },
+ { MODKEY, GDK_KEY_b, scrollv, { .i = -50 } },
+ { MODKEY, GDK_KEY_i, scrollh, { .i = +10 } },
+ { MODKEY, GDK_KEY_u, scrollh, { .i = -10 } },
+
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_k, zoom, { .i = +1 } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_q, zoom, { .i = 0 } },
+ { MODKEY, GDK_KEY_minus, zoom, { .i = -1 } },
+ { MODKEY, GDK_KEY_plus, zoom, { .i = +1 } },
+
+ { MODKEY, GDK_KEY_p, clipboard, { .i = 1 } },
+ { MODKEY, GDK_KEY_y, clipboard, { .i = 0 } },
+
+ { MODKEY, GDK_KEY_n, find, { .i = +1 } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } },
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, print, { 0 } },
+ { MODKEY, GDK_KEY_t, showcert, { 0 } },
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_a, togglecookiepolicy, { 0 } },
+ { 0, GDK_KEY_F11, togglefullscreen, { 0 } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_o, toggleinspector, { 0 } },
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_c, toggle, { .i = CaretBrowsing } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_f, toggle, { .i = FrameFlattening } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_g, toggle, { .i = Geolocation } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_s, toggle, { .i = JavaScript } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_i, toggle, { .i = LoadImages } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = StrictTLS } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } },
+};
+
+/* button definitions */
+/* target can be OnDoc, OnLink, OnImg, OnMedia, OnEdit, OnBar, OnSel, OnAny */
+static Button buttons[] = {
+ /* target event mask button function argument stop event */
+ { OnLink, 0, 2, clicknewwindow, { .i = 0 }, 1 },
+ { OnLink, MODKEY, 2, clicknewwindow, { .i = 1 }, 1 },
+ { OnLink, MODKEY, 1, clicknewwindow, { .i = 1 }, 1 },
+ { OnAny, 0, 8, clicknavigate, { .i = -1 }, 1 },
+ { OnAny, 0, 9, clicknavigate, { .i = +1 }, 1 },
+ { OnMedia, MODKEY, 1, clickexternplayer, { 0 }, 1 },
+};
diff --git a/portage/etc/portage/savedconfig/x11-misc/dmenu-5.4 b/portage/etc/portage/savedconfig/x11-misc/dmenu-5.4
new file mode 100644
index 0000000..1edb647
--- /dev/null
+++ b/portage/etc/portage/savedconfig/x11-misc/dmenu-5.4
@@ -0,0 +1,23 @@
+/* See LICENSE file for copyright and license details. */
+/* Default settings; can be overriden by command line. */
+
+static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
+/* -fn option overrides fonts[0]; default X11 font or font set */
+static const char *fonts[] = {
+ "monospace:size=10"
+};
+static const char *prompt = NULL; /* -p option; prompt to the left of input field */
+static const char *colors[SchemeLast][2] = {
+ /* fg bg */
+ [SchemeNorm] = { "#bbbbbb", "#222222" },
+ [SchemeSel] = { "#eeeeee", "#005577" },
+ [SchemeOut] = { "#000000", "#00ffff" },
+};
+/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
+static unsigned int lines = 0;
+
+/*
+ * Characters not considered part of a word while deleting words
+ * for example: " /?\"&[]"
+ */
+static const char worddelimiters[] = " ";
diff --git a/portage/etc/portage/savedconfig/x11-terms/st-0.9.3 b/portage/etc/portage/savedconfig/x11-terms/st-0.9.3
new file mode 100644
index 0000000..2cd740a
--- /dev/null
+++ b/portage/etc/portage/savedconfig/x11-terms/st-0.9.3
@@ -0,0 +1,474 @@
+/* See LICENSE file for copyright and license details. */
+
+/*
+ * appearance
+ *
+ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+ */
+static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
+static int borderpx = 2;
+
+/*
+ * What program is execed by st depends of these precedence rules:
+ * 1: program passed with -e
+ * 2: scroll and/or utmp
+ * 3: SHELL environment variable
+ * 4: value of shell in /etc/passwd
+ * 5: value of shell in config.h
+ */
+static char *shell = "/bin/sh";
+char *utmp = NULL;
+/* scroll program: to enable use a string like "scroll" */
+char *scroll = NULL;
+char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
+
+/* identification sequence returned in DA and DECID */
+char *vtiden = "\033[?6c";
+
+/* Kerning / character bounding-box multipliers */
+static float cwscale = 1.0;
+static float chscale = 1.0;
+
+/*
+ * word delimiter string
+ *
+ * More advanced example: L" `'\"()[]{}"
+ */
+wchar_t *worddelimiters = L" ";
+
+/* selection timeouts (in milliseconds) */
+static unsigned int doubleclicktimeout = 300;
+static unsigned int tripleclicktimeout = 600;
+
+/* alt screens */
+int allowaltscreen = 1;
+
+/* allow certain non-interactive (insecure) window operations such as:
+ setting the clipboard text */
+int allowwindowops = 0;
+
+/*
+ * draw latency range in ms - from new content/keypress/etc until drawing.
+ * within this range, st draws when content stops arriving (idle). mostly it's
+ * near minlatency, but it waits longer for slow updates to avoid partial draw.
+ * low minlatency will tear/flicker more, as it can "detect" idle too early.
+ */
+static double minlatency = 2;
+static double maxlatency = 33;
+
+/*
+ * blinking timeout (set to 0 to disable blinking) for the terminal blinking
+ * attribute.
+ */
+static unsigned int blinktimeout = 800;
+
+/*
+ * thickness of underline and bar cursors
+ */
+static unsigned int cursorthickness = 2;
+
+/*
+ * bell volume. It must be a value between -100 and 100. Use 0 for disabling
+ * it
+ */
+static int bellvolume = 0;
+
+/* default TERM value */
+char *termname = "st-256color";
+
+/*
+ * spaces per tab
+ *
+ * When you are changing this value, don't forget to adapt the »it« value in
+ * the st.info and appropriately install the st.info in the environment where
+ * you use this st version.
+ *
+ * it#$tabspaces,
+ *
+ * Secondly make sure your kernel is not expanding tabs. When running `stty
+ * -a` »tab0« should appear. You can tell the terminal to not expand tabs by
+ * running following command:
+ *
+ * stty tabs
+ */
+unsigned int tabspaces = 8;
+
+/* Terminal colors (16 first used in escape sequence) */
+static const char *colorname[] = {
+ /* 8 normal colors */
+ "black",
+ "red3",
+ "green3",
+ "yellow3",
+ "blue2",
+ "magenta3",
+ "cyan3",
+ "gray90",
+
+ /* 8 bright colors */
+ "gray50",
+ "red",
+ "green",
+ "yellow",
+ "#5c5cff",
+ "magenta",
+ "cyan",
+ "white",
+
+ [255] = 0,
+
+ /* more colors can be added after 255 to use with DefaultXX */
+ "#cccccc",
+ "#555555",
+ "gray90", /* default foreground colour */
+ "black", /* default background colour */
+};
+
+
+/*
+ * Default colors (colorname index)
+ * foreground, background, cursor, reverse cursor
+ */
+unsigned int defaultfg = 258;
+unsigned int defaultbg = 259;
+unsigned int defaultcs = 256;
+static unsigned int defaultrcs = 257;
+
+/*
+ * Default shape of cursor
+ * 2: Block ("█")
+ * 4: Underline ("_")
+ * 6: Bar ("|")
+ * 7: Snowman ("☃")
+ */
+static unsigned int cursorshape = 2;
+
+/*
+ * Default columns and rows numbers
+ */
+
+static unsigned int cols = 80;
+static unsigned int rows = 24;
+
+/*
+ * Default colour and shape of the mouse cursor
+ */
+static unsigned int mouseshape = XC_xterm;
+static unsigned int mousefg = 7;
+static unsigned int mousebg = 0;
+
+/*
+ * Color used to display font attributes when fontconfig selected a font which
+ * doesn't match the ones requested.
+ */
+static unsigned int defaultattr = 11;
+
+/*
+ * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set).
+ * Note that if you want to use ShiftMask with selmasks, set this to an other
+ * modifier, set to 0 to not use it.
+ */
+static uint forcemousemod = ShiftMask;
+
+/*
+ * Internal mouse shortcuts.
+ * Beware that overloading Button1 will disable the selection.
+ */
+static MouseShortcut mshortcuts[] = {
+ /* mask button function argument release */
+ { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
+ { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
+ { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
+ { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} },
+ { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
+};
+
+/* Internal keyboard shortcuts. */
+#define MODKEY Mod1Mask
+#define TERMMOD (ControlMask|ShiftMask)
+
+static Shortcut shortcuts[] = {
+ /* mask keysym function argument */
+ { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
+ { ControlMask, XK_Print, toggleprinter, {.i = 0} },
+ { ShiftMask, XK_Print, printscreen, {.i = 0} },
+ { XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
+ { TERMMOD, XK_Prior, zoom, {.f = +1} },
+ { TERMMOD, XK_Next, zoom, {.f = -1} },
+ { TERMMOD, XK_Home, zoomreset, {.f = 0} },
+ { TERMMOD, XK_C, clipcopy, {.i = 0} },
+ { TERMMOD, XK_V, clippaste, {.i = 0} },
+ { TERMMOD, XK_Y, selpaste, {.i = 0} },
+ { ShiftMask, XK_Insert, selpaste, {.i = 0} },
+ { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
+};
+
+/*
+ * Special keys (change & recompile st.info accordingly)
+ *
+ * Mask value:
+ * * Use XK_ANY_MOD to match the key no matter modifiers state
+ * * Use XK_NO_MOD to match the key alone (no modifiers)
+ * appkey value:
+ * * 0: no value
+ * * > 0: keypad application mode enabled
+ * * = 2: term.numlock = 1
+ * * < 0: keypad application mode disabled
+ * appcursor value:
+ * * 0: no value
+ * * > 0: cursor application mode enabled
+ * * < 0: cursor application mode disabled
+ *
+ * Be careful with the order of the definitions because st searches in
+ * this table sequentially, so any XK_ANY_MOD must be in the last
+ * position for a key.
+ */
+
+/*
+ * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
+ * to be mapped below, add them to this array.
+ */
+static KeySym mappedkeys[] = { -1 };
+
+/*
+ * State bits to ignore when matching key or button events. By default,
+ * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
+ */
+static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
+
+/*
+ * This is the huge key array which defines all compatibility to the Linux
+ * world. Please decide about changes wisely.
+ */
+static Key key[] = {
+ /* keysym mask string appkey appcursor */
+ { XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
+ { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
+ { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
+ { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
+ { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
+ { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
+ { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
+ { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
+ { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
+ { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
+ { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
+ { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
+ { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
+ { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
+ { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
+ { XK_KP_End, ControlMask, "\033[J", -1, 0},
+ { XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_KP_End, ShiftMask, "\033[K", -1, 0},
+ { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
+ { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
+ { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
+ { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+ { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_KP_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
+ { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+ { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
+ { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
+ { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
+ { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
+ { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
+ { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
+ { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
+ { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
+ { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
+ { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
+ { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
+ { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
+ { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
+ { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
+ { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
+ { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
+ { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
+ { XK_Up, ShiftMask, "\033[1;2A", 0, 0},
+ { XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
+ { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
+ { XK_Up, ControlMask, "\033[1;5A", 0, 0},
+ { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0},
+ { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0},
+ { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0},
+ { XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
+ { XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
+ { XK_Down, ShiftMask, "\033[1;2B", 0, 0},
+ { XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
+ { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0},
+ { XK_Down, ControlMask, "\033[1;5B", 0, 0},
+ { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0},
+ { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0},
+ { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0},
+ { XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
+ { XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
+ { XK_Left, ShiftMask, "\033[1;2D", 0, 0},
+ { XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
+ { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0},
+ { XK_Left, ControlMask, "\033[1;5D", 0, 0},
+ { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0},
+ { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0},
+ { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0},
+ { XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
+ { XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
+ { XK_Right, ShiftMask, "\033[1;2C", 0, 0},
+ { XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
+ { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0},
+ { XK_Right, ControlMask, "\033[1;5C", 0, 0},
+ { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0},
+ { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0},
+ { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0},
+ { XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
+ { XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
+ { XK_Return, Mod1Mask, "\033\r", 0, 0},
+ { XK_Return, XK_ANY_MOD, "\r", 0, 0},
+ { XK_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_Insert, ControlMask, "\033[2;5~", +1, 0},
+ { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+ { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
+ { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+ { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
+ { XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
+ { XK_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_Home, ShiftMask, "\033[1;2H", 0, +1},
+ { XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
+ { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_End, ControlMask, "\033[J", -1, 0},
+ { XK_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_End, ShiftMask, "\033[K", -1, 0},
+ { XK_End, ShiftMask, "\033[1;2F", +1, 0},
+ { XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_Prior, ControlMask, "\033[5;5~", 0, 0},
+ { XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
+ { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_Next, ControlMask, "\033[6;5~", 0, 0},
+ { XK_Next, ShiftMask, "\033[6;2~", 0, 0},
+ { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
+ { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
+ { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
+ { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
+ { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
+ { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
+ { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0},
+ { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
+ { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
+ { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
+ { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
+ { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
+ { XK_F3, XK_NO_MOD, "\033OR" , 0, 0},
+ { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
+ { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
+ { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
+ { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
+ { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
+ { XK_F4, XK_NO_MOD, "\033OS" , 0, 0},
+ { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
+ { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
+ { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
+ { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
+ { XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
+ { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
+ { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
+ { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
+ { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
+ { XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
+ { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
+ { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
+ { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
+ { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
+ { XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
+ { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
+ { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
+ { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
+ { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
+ { XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
+ { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
+ { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
+ { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
+ { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
+ { XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
+ { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
+ { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
+ { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
+ { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
+ { XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
+ { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
+ { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
+ { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
+ { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
+ { XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
+ { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
+ { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
+ { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
+ { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
+ { XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
+ { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
+ { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
+ { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
+ { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
+ { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
+ { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
+ { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
+ { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
+ { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
+ { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
+ { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
+ { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
+ { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
+ { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
+ { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
+ { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
+ { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
+ { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
+ { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
+ { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
+ { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
+ { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
+ { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
+ { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
+ { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
+ { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
+ { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
+};
+
+/*
+ * Selection types' masks.
+ * Use the same masks as usual.
+ * Button1Mask is always unset, to make masks match between ButtonPress.
+ * ButtonRelease and MotionNotify.
+ * If no match is found, regular selection is used.
+ */
+static uint selmasks[] = {
+ [SEL_RECTANGULAR] = Mod1Mask,
+};
+
+/*
+ * Printable characters in ASCII, used to estimate the advance width
+ * of single wide characters.
+ */
+static char ascii_printable[] =
+ " !\"#$%&'()*+,-./0123456789:;<=>?"
+ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~";
diff --git a/portage/var/lib/portage/world b/portage/var/lib/portage/world
index 8c665fd..92e4c1c 100644
--- a/portage/var/lib/portage/world
+++ b/portage/var/lib/portage/world
@@ -7,14 +7,11 @@ app-admin/sudo
app-admin/testdisk
app-crypt/gcr
app-editors/emacs
-app-editors/fresh
app-editors/micro
app-editors/neovim
app-editors/vis
app-eselect/eselect-repository
app-misc/dragon
-app-misc/fastfetch
-app-misc/hyfetch
app-misc/jq
app-misc/tmux
app-misc/yazi
@@ -29,7 +26,9 @@ app-shells/zoxide
app-shells/zsh
app-shells/zsh-autocomplete
app-text/evince
+app-xemacs/emerge
dev-debug/strace
+dev-libs/libxml2
dev-util/android-tools
dev-util/opencode-bin
dev-vcs/git
@@ -59,11 +58,14 @@ kde-apps/dolphin
kde-apps/kio-extras
media-fonts/corefonts
media-fonts/dejavu
+media-fonts/iosevka
media-fonts/jetbrains-mono
media-fonts/liberation-fonts
media-fonts/nerdfonts
media-fonts/noto
+media-fonts/noto-cjk
media-fonts/noto-emoji
+media-fonts/roboto
media-fonts/unifont
media-gfx/imagemagick
media-gfx/imv
@@ -73,6 +75,7 @@ media-sound/mpc
media-sound/mpd
media-sound/playerctl
media-sound/rmpc
+media-sound/teamspeak-client
media-sound/wiremix
media-video/ffmpeg
media-video/mpv
@@ -85,6 +88,7 @@ net-im/vesktop-bin
net-misc/dhcpcd
net-misc/yt-dlp
net-p2p/nicotine+
+net-p2p/qbittorrent
net-p2p/syncthing
net-proxy/Throne
net-wireless/blueman
@@ -100,6 +104,7 @@ sys-kernel/installkernel
sys-kernel/linux-firmware
sys-process/btop
www-client/helium-bin
+www-client/librewolf
www-client/waterfox-bin
x11-apps/xrdb
x11-drivers/nvidia-drivers
diff --git a/templates/dbg.ini b/templates/dbg.ini
new file mode 120000
index 0000000..b28db24
--- /dev/null
+++ b/templates/dbg.ini
@@ -0,0 +1 @@
+../.config/wallust/templates/dbg.ini \ No newline at end of file
diff --git a/templates/foot-colors-custom.ini b/templates/foot-colors-custom.ini
new file mode 120000
index 0000000..7e89ea4
--- /dev/null
+++ b/templates/foot-colors-custom.ini
@@ -0,0 +1 @@
+../.config/wallust/templates/foot-colors-custom.ini \ No newline at end of file
diff --git a/templates/niri.kdl b/templates/niri.kdl
new file mode 120000
index 0000000..cb6700b
--- /dev/null
+++ b/templates/niri.kdl
@@ -0,0 +1 @@
+../.config/matugen/templates/niri.kdl \ No newline at end of file
diff --git a/templates/nvim.lua b/templates/nvim.lua
new file mode 120000
index 0000000..a98355a
--- /dev/null
+++ b/templates/nvim.lua
@@ -0,0 +1 @@
+../.config/wallust/templates/nvim.lua \ No newline at end of file
diff --git a/templates/shell-colors.sh b/templates/shell-colors.sh
new file mode 120000
index 0000000..2cf94f6
--- /dev/null
+++ b/templates/shell-colors.sh
@@ -0,0 +1 @@
+../.config/wallust/templates/shell-colors.sh \ No newline at end of file
diff --git a/templates/vicinae-dark.toml b/templates/vicinae-dark.toml
new file mode 120000
index 0000000..9910b55
--- /dev/null
+++ b/templates/vicinae-dark.toml
@@ -0,0 +1 @@
+../.config/wallust/templates/vicinae-dark.toml \ No newline at end of file
diff --git a/templates/vicinae-light.toml b/templates/vicinae-light.toml
new file mode 120000
index 0000000..8e185bd
--- /dev/null
+++ b/templates/vicinae-light.toml
@@ -0,0 +1 @@
+../.config/wallust/templates/vicinae-light.toml \ No newline at end of file
diff --git a/tmux/.config/tmux/tmux.conf b/tmux/.config/tmux/tmux.conf
deleted file mode 100644
index e4de091..0000000
--- a/tmux/.config/tmux/tmux.conf
+++ /dev/null
@@ -1,74 +0,0 @@
-# Enable 256 color support
-set -g default-terminal "tmux-256color"
-set -ga terminal-overrides ",*:RGB"
-
-# Enable mouse support
-set -g mouse on
-
-# Enable clipboard
-set -g set-clipboard on
-# Change prefix from Ctrl-b to Ctrl-a
-unbind C-b
-set -g prefix C-a
-bind-key C-a send-prefix
-
-# Vim-style pane navigation
-bind h select-pane -L
-bind j select-pane -D
-bind k select-pane -U
-bind l select-pane -R
-
-# Split windows (opens in same directory)
-unbind %
-bind | split-window -h -c "#{pane_current_path}"
-
-unbind '"'
-bind - split-window -v -c "#{pane_current_path}"
-
-# Reload config
-unbind r
-bind r source-file $HOME/.config/tmux/tmux.conf
-
-# Alt+hjkl to switch panes without prefix
-bind -n M-h select-pane -L
-bind -n M-j select-pane -D
-bind -n M-k select-pane -U
-bind -n M-l select-pane -R
-
-# Alt+number to select window
-bind -n M-1 select-window -t 1
-bind -n M-2 select-window -t 2
-bind -n M-3 select-window -t 3
-bind -n M-4 select-window -t 4
-bind -n M-5 select-window -t 5
-bind -n M-6 select-window -t 6
-bind -n M-7 select-window -t 7
-bind -n M-8 select-window -t 8
-bind -n M-9 select-window -t 9
-# Statusline - current window
-set -g window-status-current-format "#[fg=${thm_blue},bg=${thm_bg}] #I: #[fg=${thm_magenta},bg=${thm_bg}](✓) #[fg=${thm_cyan},bg=${thm_bg}]#(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) #[fg=${thm_magenta},bg=${thm_bg}]"
-
-# Statusline - other windows
-set -g window-status-format "#[fg=${thm_blue},bg=${thm_bg}] #I: #[fg=${thm_fg},bg=${thm_bg}]#W"
-
-# Statusline - right side
-set -g status-right "#[fg=${thm_blue},bg=${thm_bg},nobold,nounderscore,noitalics]#[fg=${thm_bg},bg=${thm_blue},nobold,nounderscore,noitalics] #[fg=${thm_fg},bg=${thm_gray}] #W #{?client_prefix,#[fg=${thm_magenta}],#[fg=${thm_cyan}]}#[bg=${thm_gray}]#{?client_prefix,#[bg=${thm_magenta}],#[bg=${thm_cyan}]}#[fg=${thm_bg}] #[fg=${thm_fg},bg=${thm_gray}] #S "
-
-# Statusline - left side (empty)
-set -g status-left ""
-
-# Change from 0 based to 1 based because keyboard layout
-set -g base-index 1
-set -g pane-base-index 1
-set-window-option -g pane-base-index 1
-set-option -g renumber-windows on
-
-# Vim-like copy/paste
-set-window-option -g mode-keys vi
-bind-key -T copy-mode-vi v send-keys -X begin-selection
-bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
-bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
-unbind -T copy-mode-vi MouseDragEnd1Pane
-
-
-
diff --git a/update.sh b/update.sh
index 8a7d108..1ead69b 100755
--- a/update.sh
+++ b/update.sh
@@ -23,17 +23,24 @@ EOF
while [[ $# -gt 0 ]]; do
case "$1" in
- -q|--quick) QUICK=yes ;;
- -c|--commit) DO_COMMIT=yes ;;
- -h|--hook-install) INSTALL_HOOK=yes ;;
- -n|--dry-run) DRY_RUN=yes ;;
- --help) usage; exit 0 ;;
- *) echo "unknown option: $1" >&2; usage >&2; exit 2 ;;
+ -q | --quick) QUICK=yes ;;
+ -c | --commit) DO_COMMIT=yes ;;
+ -h | --hook-install) INSTALL_HOOK=yes ;;
+ -n | --dry-run) DRY_RUN=yes ;;
+ --help)
+ usage
+ exit 0
+ ;;
+ *)
+ echo "unknown option: $1" >&2
+ usage >&2
+ exit 2
+ ;;
esac
shift
done
-log() { printf '\033[1;32m[sync]\033[0m %s\n' "$*"; }
+log() { printf '\033[1;32m[sync]\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m[warn]\033[0m %s\n' "$*"; }
root_cp() {
@@ -44,7 +51,7 @@ root_cp() {
if [[ $EUID -eq 0 ]]; then
cp "$1" "$2"
elif cp "$1" "$2" 2>/dev/null; then
- : # readable as current user — done
+ : # readable as current user — done
elif command -v sudo >/dev/null 2>&1; then
sudo cp "$1" "$2"
else
@@ -59,8 +66,8 @@ rsync_portage() {
# Broken symlinks are excluded (rsync -L aborts on dangling referents).
local exfile
exfile="$(mktemp)"
- printf '.gitkeep\nmake.profile\n' > "$exfile"
- find /etc/portage -type l ! -exec test -e {} \; -printf '%P\n' >> "$exfile"
+ printf '.gitkeep\nmake.profile\n' >"$exfile"
+ find /etc/portage -type l ! -exec test -e {} \; -printf '%P\n' >>"$exfile"
local -a opts=(-aL --delete "--exclude-from=$exfile")
[[ "$DRY_RUN" == "yes" ]] && opts+=(-n)
@@ -75,15 +82,15 @@ sync_portage() {
if [[ -e /etc/portage/make.profile ]]; then
log "profile: $(readlink /etc/portage/make.profile)"
if [[ "$DRY_RUN" != "yes" ]]; then
- printf '%s\n' "$(readlink /etc/portage/make.profile)" > "$REPO_DIR/portage/PROFILE"
+ printf '%s\n' "$(readlink /etc/portage/make.profile)" >"$REPO_DIR/portage/PROFILE"
else
log " would write: portage/PROFILE"
fi
fi
log "world /var/lib/portage/world -> repo"
- if [[ -L /var/lib/portage/world ]] \
- && [[ "$(readlink -f /var/lib/portage/world)" == "$REPO_DIR/portage/var/lib/portage/world" ]]; then
+ if [[ -L /var/lib/portage/world ]] &&
+ [[ "$(readlink -f /var/lib/portage/world)" == "$REPO_DIR/portage/var/lib/portage/world" ]]; then
log " already a symlink into the repo — no copy needed"
else
root_cp /var/lib/portage/world "$REPO_DIR/portage/var/lib/portage/world"
@@ -114,7 +121,7 @@ install_hook() {
log "writing $hook"
if [[ $EUID -eq 0 ]]; then
mkdir -p /etc/portage/postsync.d
- cat > "$hook" <<EOF
+ cat >"$hook" <<EOF
#!/usr/bin/env bash
# generated by update.sh --hook-install — keeps dotfiles fresh after each emerge
exec "$REPO_DIR/update.sh" --quick
@@ -164,4 +171,5 @@ main() {
fi
}
-main "$@" \ No newline at end of file
+main "$@"
+
diff --git a/vicinae/.config/vicinae/settings.json b/vicinae/.config/vicinae/settings.json
index 10ce861..b9a5a02 100644
--- a/vicinae/.config/vicinae/settings.json
+++ b/vicinae/.config/vicinae/settings.json
@@ -1,30 +1,82 @@
+// This configuration is merged with the default vicinae configuration file, which you can obtain by running the `vicinae config default` command.
+// Every item defined in this file takes precedence over the values defined in the default config or any other imported file.
+//
+// You can make manual edits to this file, however you should keep in mind that this file may be written to by vicinae when a configuration change is made through the GUI.
+// When that happens, any custom comments or formatting will be lost.
+//
+// If you want to maintain a configuration file with your own comments and formatting, you should create a separate file and add it to the 'imports' array.
+//
+// Learn more about configuration at https://docs.vicinae.com/config
+
{
"$schema": "https://vicinae.com/schemas/config.json",
+ "encrypt_sensitive_data": true,
+ "favicon_service": "google",
+ "font": {
+ "normal": {
+ "family": "JetBrains Mono ExtraBold"
+ }
+ },
"theme": {
- "dark": {
- "name": "vicinae-wallust-dark"
- },
"light": {
"name": "vicinae-wallust-light"
+ },
+ "dark": {
+ "name": "vicinae-wallust-dark",
+ "icon_theme": "Hicolor"
}
},
"telemetry": {
"system_info": false
},
+ "launcher_window": {
+ "rounding": 1,
+ "opacity": 1,
+ "client_side_decorations": {
+ "shadow_size": 0
+ },
+ "compact_mode": {
+ "enabled": true
+ }
+ },
"providers": {
"applications": {
"entrypoints": {
+ "PEAK": {
+ "enabled": false
+ },
"assistant": {
"enabled": false
},
+ "blueman-manager": {
+ "enabled": false
+ },
+ "btop": {
+ "enabled": false
+ },
+ "darkman": {
+ "enabled": false
+ },
+ "foot-server": {
+ "enabled": false
+ },
+ "footclient": {
+ "enabled": false
+ },
"linguist": {
"enabled": false
},
+ "nvidia-settings": {
+ "enabled": false
+ },
"qdbusviewer": {
"enabled": false
},
"qphotorec": {
"enabled": false
+ },
+ "rmpc": {
+ "enabled": false
}
}
},
@@ -32,6 +84,151 @@
"preferences": {
"monitoring": true
}
+ },
+ "core": {
+ "entrypoints": {
+ "about": {
+ "enabled": false
+ },
+ "documentation": {
+ "enabled": false
+ },
+ "keybind-settings": {
+ "enabled": false
+ },
+ "list-extensions": {
+ "enabled": false
+ },
+ "manage-fallback": {
+ "enabled": false
+ },
+ "oauth-token-store": {
+ "enabled": false
+ },
+ "open-config-file": {
+ "enabled": false
+ },
+ "open-default-config": {
+ "enabled": false
+ },
+ "prune-memory": {
+ "enabled": false
+ },
+ "refresh-apps": {
+ "enabled": false
+ },
+ "reload-scripts": {
+ "enabled": false
+ },
+ "report-bug": {
+ "enabled": false
+ },
+ "search-builtin-icons": {
+ "enabled": false
+ },
+ "search-emojis": {
+ "enabled": true
+ },
+ "settings": {
+ "enabled": false
+ },
+ "show-logs": {
+ "enabled": false
+ },
+ "sponsor": {
+ "enabled": false
+ },
+ "store": {
+ "enabled": true
+ }
+ }
+ },
+ "font": {
+ "enabled": false
+ },
+ "manage-shortcuts": {
+ "enabled": false
+ },
+ "power": {
+ "enabled": true,
+ "entrypoints": {
+ "hibernate": {
+ "enabled": false
+ },
+ "lock": {
+ "enabled": false
+ },
+ "logout": {
+ "enabled": false
+ },
+ "power-off": {
+ "enabled": true
+ },
+ "reboot": {
+ "enabled": true
+ },
+ "sleep": {
+ "enabled": false
+ },
+ "soft-reboot": {
+ "enabled": false
+ },
+ "suspend": {
+ "enabled": false
+ }
+ }
+ },
+ "snippets": {
+ "enabled": false
+ },
+ "system": {
+ "enabled": false,
+ "entrypoints": {
+ "run": {
+ "enabled": false
+ },
+ "toggle-mute": {
+ "enabled": false
+ },
+ "volume-0": {
+ "enabled": false
+ },
+ "volume-100": {
+ "enabled": false
+ },
+ "volume-25": {
+ "enabled": false
+ },
+ "volume-50": {
+ "enabled": false
+ },
+ "volume-75": {
+ "enabled": false
+ },
+ "volume-down": {
+ "enabled": false
+ },
+ "volume-up": {
+ "enabled": false
+ }
+ }
+ },
+ "wm": {
+ "enabled": false,
+ "entrypoints": {
+ "switch-windows": {
+ "enabled": false
+ },
+ "toggle-floating": {
+ "enabled": false
+ },
+ "toggle-fullscreen": {
+ "enabled": false
+ },
+ "toggle-overview": {
+ "enabled": false
+ }
+ }
}
}
-}
+} \ No newline at end of file
diff --git a/wallust/.config/wallust/templates/nvim.lua b/wallust/.config/wallust/templates/nvim.lua
new file mode 100644
index 0000000..be60dd7
--- /dev/null
+++ b/wallust/.config/wallust/templates/nvim.lua
@@ -0,0 +1,306 @@
+-- Generated by wallust from your system color scheme. Do not edit by hand.
+-- Source of truth: wallust/.config/wallust/templates/nvim.lua
+local bg = "{{background}}"
+local fg = "{{foreground}}"
+local cursor = "{{cursor}}"
+local c = {
+ "{{color0}}", "{{color1}}", "{{color2}}", "{{color3}}",
+ "{{color4}}", "{{color5}}", "{{color6}}", "{{color7}}",
+ "{{color8}}", "{{color9}}", "{{color10}}", "{{color11}}",
+ "{{color12}}", "{{color13}}", "{{color14}}", "{{color15}}",
+}
+
+-- Pick light/dark from the background luminance so plugins (diff, signs, …) behave.
+local function lum(hex)
+ hex = hex:gsub("#", "")
+ local r = tonumber(hex:sub(1, 2), 16) / 255
+ local g = tonumber(hex:sub(3, 4), 16) / 255
+ local b = tonumber(hex:sub(5, 6), 16) / 255
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b
+end
+
+vim.opt.background = lum(bg) < 0.5 and "dark" or "light"
+vim.g.colors_name = "wallust"
+
+local set = function(name, opts)
+ vim.api.nvim_set_hl(0, name, opts)
+end
+
+-- semantic aliases for the 16-color palette
+local black, red, green, yellow, blue, magenta, cyan, white =
+ c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8]
+local brblack, brred, brgreen, bryellow, brblue, brmagenta, brcyan, brwhite =
+ c[9], c[10], c[11], c[12], c[13], c[14], c[15], c[16]
+
+local panel = c[1] -- floating / panel background (near bg)
+local sel = brblack -- selection / visual background
+local muted = brblack -- dimmed / secondary text
+
+-- ── Editor ──────────────────────────────────────────────────────────────
+set("Normal", { fg = fg, bg = bg })
+set("NormalFloat", { fg = fg, bg = panel })
+set("NormalNC", { fg = fg, bg = bg })
+set("ColorColumn", { bg = panel })
+set("Conceal", { fg = muted })
+set("Cursor", { fg = bg, bg = cursor })
+set("CursorIM", { fg = bg, bg = cursor })
+set("CursorLine", { bg = panel })
+set("CursorColumn", { bg = panel })
+set("CursorLineNr", { fg = fg, bg = panel })
+set("LineNr", { fg = muted })
+set("SignColumn", { fg = muted, bg = bg })
+set("WinSeparator", { fg = muted })
+set("VertSplit", { fg = muted })
+set("Directory", { fg = blue })
+set("DiffAdd", { fg = green, bg = bg })
+set("DiffChange", { fg = yellow, bg = bg })
+set("DiffDelete", { fg = red, bg = bg })
+set("DiffText", { fg = yellow, bg = panel })
+set("ErrorMsg", { fg = red, bold = true })
+set("WarningMsg", { fg = yellow, bold = true })
+set("ModeMsg", { fg = fg })
+set("MsgArea", { fg = fg })
+set("MoreMsg", { fg = green })
+set("Question", { fg = green })
+set("NonText", { fg = muted })
+set("SpecialKey", { fg = muted })
+set("Whitespace", { fg = panel })
+set("Title", { fg = yellow, bold = true })
+set("Folded", { fg = muted, bg = panel })
+set("FoldColumn", { fg = muted, bg = bg })
+set("MatchParen", { fg = yellow, bg = panel, bold = true })
+set("Search", { fg = bg, bg = yellow })
+set("IncSearch", { fg = bg, bg = magenta })
+set("CurSearch", { fg = bg, bg = magenta })
+set("QuickFixLine", { fg = bg, bg = blue })
+set("Visual", { bg = sel })
+set("VisualNOS", { bg = sel })
+set("StatusLine", { fg = fg, bg = panel })
+set("StatusLineNC", { fg = muted, bg = bg })
+set("TabLine", { fg = muted, bg = bg })
+set("TabLineFill", { fg = muted, bg = bg })
+set("TabLineSel", { fg = bg, bg = blue })
+set("WildMenu", { fg = bg, bg = blue })
+set("Winbar", { fg = fg, bg = panel })
+set("WinbarNC", { fg = muted, bg = bg })
+set("Pmenu", { fg = fg, bg = panel })
+set("PmenuSel", { fg = bg, bg = blue })
+set("PmenuSbar", { bg = panel })
+set("PmenuThumb", { bg = muted })
+set("FloatBorder", { fg = muted })
+set("FloatTitle", { fg = yellow, bg = panel })
+set("FloatFooter", { fg = muted, bg = panel })
+set("SpellBad", { undercurl = true, sp = red })
+set("SpellCap", { undercurl = true, sp = yellow })
+set("SpellLocal", { undercurl = true, sp = cyan })
+set("SpellRare", { undercurl = true, sp = magenta })
+
+-- ── Legacy syntax groups ────────────────────────────────────────────────
+set("Comment", { fg = muted, italic = true })
+set("Constant", { fg = cyan })
+set("String", { fg = green })
+set("Character", { fg = green })
+set("Number", { fg = red })
+set("Boolean", { fg = red })
+set("Float", { fg = red })
+set("Identifier", { fg = brcyan })
+set("Function", { fg = blue })
+set("Statement", { fg = magenta })
+set("Conditional", { fg = magenta })
+set("Repeat", { fg = magenta })
+set("Label", { fg = magenta })
+set("Operator", { fg = fg })
+set("Keyword", { fg = magenta })
+set("Exception", { fg = magenta })
+set("PreProc", { fg = brblue })
+set("Include", { fg = brblue })
+set("Define", { fg = brblue })
+set("Macro", { fg = brblue })
+set("PreCondit", { fg = brblue })
+set("Type", { fg = yellow })
+set("StorageClass", { fg = yellow })
+set("Structure", { fg = yellow })
+set("Typedef", { fg = yellow })
+set("Special", { fg = brgreen })
+set("SpecialChar", { fg = brgreen })
+set("Tag", { fg = red })
+set("Delimiter", { fg = muted })
+set("SpecialComment", { fg = muted, italic = true })
+set("Debug", { fg = red })
+set("Underlined", { fg = blue, underline = true })
+set("Ignore", { fg = muted })
+set("Error", { fg = red, bold = true })
+set("Todo", { fg = bg, bg = yellow, bold = true })
+
+-- ── Treesitter ──────────────────────────────────────────────────────────
+set("@comment", { fg = muted, italic = true })
+set("@comment.lua", { fg = muted, italic = true })
+set("@error", { fg = red, undercurl = true, sp = red })
+set("@none", {})
+set("@preproc", { fg = brblue })
+set("@define", { fg = brblue })
+set("@operator", { fg = fg })
+
+set("@string", { fg = green })
+set("@string.escape", { fg = red })
+set("@string.special", { fg = brgreen })
+set("@character", { fg = green })
+set("@character.special", { fg = brgreen })
+
+set("@number", { fg = red })
+set("@float", { fg = red })
+set("@boolean", { fg = red })
+set("@constant", { fg = cyan })
+set("@constant.builtin", { fg = brcyan })
+set("@constant.macro", { fg = brblue })
+
+set("@variable", { fg = fg })
+set("@variable.builtin", { fg = red })
+set("@variable.parameter", { fg = fg })
+set("@variable.parameter.builtin", { fg = fg })
+set("@field", { fg = fg })
+set("@property", { fg = fg })
+
+set("@function", { fg = blue })
+set("@function.builtin", { fg = blue })
+set("@function.macro", { fg = brblue })
+set("@method", { fg = blue })
+set("@constructor", { fg = yellow })
+
+set("@parameter", { fg = fg })
+set("@keyword", { fg = magenta })
+set("@keyword.function", { fg = magenta })
+set("@keyword.operator", { fg = magenta })
+set("@keyword.modifier", { fg = magenta })
+set("@storageclass", { fg = yellow })
+set("@structure", { fg = yellow })
+set("@namespace", { fg = blue })
+
+set("@type", { fg = yellow })
+set("@type.builtin", { fg = bryellow })
+set("@type.definition", { fg = yellow })
+
+set("@punctuation.delimiter", { fg = muted })
+set("@punctuation.bracket", { fg = fg })
+set("@punctuation.special", { fg = magenta })
+
+set("@text", { fg = fg })
+set("@text.strong", { bold = true })
+set("@text.emphasis", { italic = true })
+set("@text.underline", { underline = true })
+set("@text.strike", { strikethrough = true })
+set("@text.title", { fg = blue, bold = true })
+set("@text.title.1", { fg = blue, bold = true })
+set("@text.title.2", { fg = cyan, bold = true })
+set("@text.title.3", { fg = green, bold = true })
+set("@text.title.4", { fg = yellow, bold = true })
+set("@text.title.5", { fg = magenta, bold = true })
+set("@text.title.6", { fg = red, bold = true })
+set("@text.literal", { fg = green })
+set("@text.uri", { fg = cyan, underline = true })
+set("@text.todo", { fg = bg, bg = yellow, bold = true })
+set("@text.note", { fg = bg, bg = blue, bold = true })
+set("@text.warning", { fg = bg, bg = yellow, bold = true })
+set("@text.danger", { fg = bg, bg = red, bold = true })
+
+set("@tag", { fg = red })
+set("@tag.attribute", { fg = yellow })
+set("@tag.delimiter", { fg = muted })
+
+set("@markup.heading", { fg = blue, bold = true })
+set("@markup.strong", { bold = true })
+set("@markup.italic", { italic = true })
+set("@markup.link", { fg = cyan, underline = true })
+set("@markup.link.url", { fg = cyan, underline = true })
+set("@markup.raw", { fg = green })
+set("@markup.list", { fg = magenta })
+set("@markup.quote", { fg = muted, italic = true })
+
+set("@diff.add", { fg = green })
+set("@diff.delete", { fg = red })
+set("@diff.change", { fg = yellow })
+
+set("@conceal", { fg = muted })
+
+-- ── LSP / Diagnostics ───────────────────────────────────────────────────
+set("DiagnosticError", { fg = red })
+set("DiagnosticWarn", { fg = yellow })
+set("DiagnosticInfo", { fg = blue })
+set("DiagnosticHint", { fg = cyan })
+set("DiagnosticOk", { fg = green })
+set("DiagnosticVirtualTextError", { fg = red })
+set("DiagnosticVirtualTextWarn", { fg = yellow })
+set("DiagnosticVirtualTextInfo", { fg = blue })
+set("DiagnosticVirtualTextHint", { fg = cyan })
+set("DiagnosticUnderlineError", { undercurl = true, sp = red })
+set("DiagnosticUnderlineWarn", { undercurl = true, sp = yellow })
+set("DiagnosticUnderlineInfo", { undercurl = true, sp = blue })
+set("DiagnosticUnderlineHint", { undercurl = true, sp = cyan })
+set("DiagnosticSignError", { fg = red })
+set("DiagnosticSignWarn", { fg = yellow })
+set("DiagnosticSignInfo", { fg = blue })
+set("DiagnosticSignHint", { fg = cyan })
+set("DiagnosticFloatingError", { fg = red })
+set("DiagnosticFloatingWarn", { fg = yellow })
+set("DiagnosticFloatingInfo", { fg = blue })
+set("DiagnosticFloatingHint", { fg = cyan })
+set("DiagnosticUnnecessary", { undercurl = true, sp = muted })
+
+set("LspReferenceText", { bg = sel })
+set("LspReferenceRead", { bg = sel })
+set("LspReferenceWrite", { bg = sel })
+set("LspCodeLens", { fg = muted })
+set("LspCodeLensSeparator", { fg = muted })
+set("LspSignatureActiveParameter", { fg = yellow, bold = true })
+set("LspInlayHint", { fg = muted, italic = true })
+
+-- ── Git / signs ─────────────────────────────────────────────────────────
+set("GitSignsAdd", { fg = green })
+set("GitSignsChange", { fg = yellow })
+set("GitSignsDelete", { fg = red })
+set("GitSignsAddLn", { fg = green })
+set("GitSignsChangeLn", { fg = yellow })
+set("GitSignsDeleteLn", { fg = red })
+set("GitSignsCurrentLineBlame", { fg = muted })
+set("SignAdd", { fg = green })
+set("SignChange", { fg = yellow })
+set("SignDelete", { fg = red })
+
+-- ── Misc plugin UI ──────────────────────────────────────────────────────
+set("TelescopeNormal", { fg = fg, bg = panel })
+set("TelescopeBorder", { fg = muted })
+set("TelescopePromptBorder", { fg = muted })
+set("TelescopeResultsBorder", { fg = muted })
+set("TelescopeTitle", { fg = yellow, bold = true })
+set("TelescopeSelection", { fg = bg, bg = blue })
+set("TelescopeMatching", { fg = yellow, bold = true })
+
+set("WhichKey", { fg = fg })
+set("WhichKeyGroup", { fg = blue })
+set("WhichKeyDesc", { fg = fg })
+set("WhichKeySeparator", { fg = muted })
+set("WhichKeyFloat", { bg = panel })
+set("WhichKeyValue", { fg = muted })
+
+set("CmpItemAbbr", { fg = fg })
+set("CmpItemAbbrDeprecated", { fg = muted, strikethrough = true })
+set("CmpItemAbbrMatch", { fg = yellow, bold = true })
+set("CmpItemKind", { fg = blue })
+set("CmpItemMenu", { fg = muted })
+
+set("NvimTreeNormal", { fg = fg, bg = bg })
+set("NvimTreeIndentMarker", { fg = panel })
+set("NvimTreeFolderIcon", { fg = blue })
+set("NvimTreeOpenedFile", { fg = blue })
+set("NvimTreeGitDirty", { fg = yellow })
+set("NvimTreeGitNew", { fg = green })
+set("NvimTreeGitDeleted", { fg = red })
+
+set("BufferLineFill", { bg = bg })
+set("BufferLineBackground", { fg = muted })
+set("BufferLineBufferSelected", { fg = fg, bold = true })
+set("BufferLineIndicatorSelected", { fg = blue })
+set("BufferLineTabSelected", { fg = blue, bold = true })
+set("BufferLineModified", { fg = yellow })
+
+set("NeoTreeNormal", { fg = fg, bg = bg })
diff --git a/wallust/.config/wallust/wallust.toml b/wallust/.config/wallust/wallust.toml
index c8fdbdb..d1e8925 100644
--- a/wallust/.config/wallust/wallust.toml
+++ b/wallust/.config/wallust/wallust.toml
@@ -1,6 +1,7 @@
backend = "fastresize"
[templates]
+nvim = { template = "nvim.lua", target = "~/.cache/wallust/colors/wallust.lua" }
foottheme = { template = "foot-colors-custom.ini", target = "~/.cache/wallust/foot-theme.ini" }
vicinae_dark = { template = "vicinae-dark.toml", target = "~/.cache/wallust/vicinae-dark.toml" }
vicinae_light = { template = "vicinae-light.toml", target = "~/.cache/wallust/vicinae-light.toml" }
diff --git a/waybar/.config/waybar/theme.css b/waybar/.config/waybar/theme.css
index aea3c67..1882049 120000
--- a/waybar/.config/waybar/theme.css
+++ b/waybar/.config/waybar/theme.css
@@ -1 +1 @@
-theme-dark.css \ No newline at end of file
+theme-light.css \ No newline at end of file
diff --git a/zshrc/.zshrc b/zshrc/.zshrc
index 44cf283..1663488 100644
--- a/zshrc/.zshrc
+++ b/zshrc/.zshrc
@@ -12,6 +12,9 @@ source $ZSH/oh-my-zsh.sh
# Autosuggest config
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
# Aliases
+alias wllpprsw='~/dotfiles-gentoo/niri/.config/niri/theme-switcher.sh'
+alias drksw='darkman toggle'
+alias bft='~/git-cloned/bfetch/bfetch --no-kernel'
alias open='xdg-open'
alias ls="eza -lha --icons"
alias ll="eza -lh --icons"
@@ -39,6 +42,7 @@ selected_fg="#$(grep -m1 '^color0' ~/.cache/wallust/colors.sh | grep -oE '#[0-9a
selected_bg="#$(grep -m1 '^color4' ~/.cache/wallust/colors.sh | grep -oE '#[0-9a-fA-F]{6}')"
EOF
}
+export MOZ_ENABLE_WAYLAND=1
# Walllust installation
export PATH="$HOME/.cargo/bin:$PATH"
# Swing Music installation