summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.toml4
-rw-r--r--fstab/etc/fstab15
-rwxr-xr-xinstall.sh7
-rw-r--r--portage/PROFILE1
-rw-r--r--portage/etc/portage/package.accept_keywords/bibata-xcursors1
-rw-r--r--portage/etc/portage/package.accept_keywords/darkman1
-rw-r--r--portage/etc/portage/package.accept_keywords/dragon1
-rw-r--r--portage/etc/portage/package.accept_keywords/fresh1
-rw-r--r--portage/etc/portage/package.accept_keywords/matugen1
-rw-r--r--portage/etc/portage/package.accept_keywords/micro1
-rw-r--r--portage/etc/portage/package.accept_keywords/rmpc1
-rw-r--r--portage/etc/portage/package.accept_keywords/vicinae2
-rw-r--r--portage/etc/portage/package.accept_keywords/wallust1
-rw-r--r--portage/etc/portage/package.accept_keywords/waterfox-bin1
-rw-r--r--portage/etc/portage/package.accept_keywords/wiremix1
-rw-r--r--portage/etc/portage/package.accept_keywords/yazi1
-rw-r--r--portage/etc/portage/package.accept_keywords/zoxide1
-rw-r--r--portage/etc/portage/package.use/gvfs1
-rw-r--r--portage/etc/portage/package.use/kio-extras1
-rwxr-xr-xportage/etc/portage/postsync.d/50-eix-postsync42
-rw-r--r--portage/etc/portage/repos.conf/eselect-repo.conf5
-rwxr-xr-xupdate.sh167
22 files changed, 248 insertions, 9 deletions
diff --git a/config.toml b/config.toml
index 491b45a..1c1cad4 100644
--- a/config.toml
+++ b/config.toml
@@ -2,5 +2,7 @@
vt = 1
[default_session]
-command = "tuigreet --cmd /home/seraphim/.local/bin/start-niri.sh --theme 'border=yellow;>
+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/fstab/etc/fstab b/fstab/etc/fstab
index b2cc265..a6ab264 100644
--- a/fstab/etc/fstab
+++ b/fstab/etc/fstab
@@ -1,8 +1,7 @@
-/dev/nvme0n1p1 /efi vfat umask=0077 0 0
-/dev/nvme0n1p2 none swap sw 0 0
-/dev/nvme0n1p3 / btrfs subvol=@,compress=zstd:3 0 0
-/dev/nvme0n1p3 /home btrfs subvol=@home,compress=zstd:3 0 0
-/dev/nvme0n1p3 /.snapshots btrfs subvol=@snapshots,compress=zstd:3 0 0
-/dev/nvme0n1p3 /var/db/repos/gentoo btrfs subvol=@portage,compress=zstd:3 0 0
-tmpfs /var/tmp/portage tmpfs size=20G,uid=portage,gid=portage,mode=775,nosuid,noatime,nodev 0 0
-# UUID=bfcd3a37-05e1-465b-a4b7-d74cd31bf937 /mnt/giga ext4 defaults,nofail 0 2
+/dev/nvme0n1p1 /efi vfat umask=0077 0 0
+/dev/nvme0n1p2 none swap sw 0 0
+/dev/nvme0n1p3 / btrfs subvol=@,compress=zstd:3 0 0
+/dev/nvme0n1p3 /home btrfs subvol=@home,compress=zstd:3 0 0
+/dev/nvme0n1p3 /.snapshots btrfs subvol=@snapshots,compress=zstd:3 0 0
+/dev/nvme0n1p3 /var/db/repos/gentoo btrfs subvol=@portage,compress=zstd:3 0 0
+tmpfs /var/tmp/portage tmpfs size=20G,uid=portage,gid=portage,mode=775,nosuid,noatime,nodev 0 0
diff --git a/install.sh b/install.sh
index 86435cf..94d4e27 100755
--- a/install.sh
+++ b/install.sh
@@ -73,6 +73,13 @@ restore_portage() {
for d in "${PORTAGE_EMPTY_DIRS[@]}"; do
run_root mkdir -p "/etc/portage/$d"
done
+
+ if [[ -f "$REPO_DIR/portage/PROFILE" ]]; then
+ local prof
+ prof="$(cat "$REPO_DIR/portage/PROFILE")"
+ log "linking /etc/portage/make.profile -> $prof"
+ run_root ln -snf "$prof" /etc/portage/make.profile
+ fi
}
restore_system_configs() {
diff --git a/portage/PROFILE b/portage/PROFILE
new file mode 100644
index 0000000..9013501
--- /dev/null
+++ b/portage/PROFILE
@@ -0,0 +1 @@
+../../var/db/repos/gentoo/profiles/default/linux/amd64/23.0/desktop
diff --git a/portage/etc/portage/package.accept_keywords/bibata-xcursors b/portage/etc/portage/package.accept_keywords/bibata-xcursors
new file mode 100644
index 0000000..ebe279d
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/bibata-xcursors
@@ -0,0 +1 @@
+x11-themes/bibata-xcursors ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/darkman b/portage/etc/portage/package.accept_keywords/darkman
new file mode 100644
index 0000000..f75a663
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/darkman
@@ -0,0 +1 @@
+gui-apps/darkman ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/dragon b/portage/etc/portage/package.accept_keywords/dragon
new file mode 100644
index 0000000..9991df3
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/dragon
@@ -0,0 +1 @@
+app-misc/dragon ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/fresh b/portage/etc/portage/package.accept_keywords/fresh
new file mode 100644
index 0000000..30a86df
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/fresh
@@ -0,0 +1 @@
+app-editors/fresh ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/matugen b/portage/etc/portage/package.accept_keywords/matugen
new file mode 100644
index 0000000..452612f
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/matugen
@@ -0,0 +1 @@
+x11-misc/matugen ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/micro b/portage/etc/portage/package.accept_keywords/micro
new file mode 100644
index 0000000..d248263
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/micro
@@ -0,0 +1 @@
+app-editors/micro ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/rmpc b/portage/etc/portage/package.accept_keywords/rmpc
new file mode 100644
index 0000000..e4e2d30
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/rmpc
@@ -0,0 +1 @@
+media-sound/rmpc ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/vicinae b/portage/etc/portage/package.accept_keywords/vicinae
new file mode 100644
index 0000000..a0a902a
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/vicinae
@@ -0,0 +1,2 @@
+gui-apps/vicinae ~amd64
+dev-cpp/glaze ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/wallust b/portage/etc/portage/package.accept_keywords/wallust
new file mode 100644
index 0000000..f57c886
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/wallust
@@ -0,0 +1 @@
+x11-misc/wallust ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/waterfox-bin b/portage/etc/portage/package.accept_keywords/waterfox-bin
new file mode 100644
index 0000000..f7e06b4
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/waterfox-bin
@@ -0,0 +1 @@
+www-client/waterfox-bin
diff --git a/portage/etc/portage/package.accept_keywords/wiremix b/portage/etc/portage/package.accept_keywords/wiremix
new file mode 100644
index 0000000..9b4e61c
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/wiremix
@@ -0,0 +1 @@
+media-sound/wiremix ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/yazi b/portage/etc/portage/package.accept_keywords/yazi
new file mode 100644
index 0000000..6c2118e
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/yazi
@@ -0,0 +1 @@
+app-misc/yazi ~amd64
diff --git a/portage/etc/portage/package.accept_keywords/zoxide b/portage/etc/portage/package.accept_keywords/zoxide
new file mode 100644
index 0000000..3e558eb
--- /dev/null
+++ b/portage/etc/portage/package.accept_keywords/zoxide
@@ -0,0 +1 @@
+app-shells/zoxide ~amd64
diff --git a/portage/etc/portage/package.use/gvfs b/portage/etc/portage/package.use/gvfs
new file mode 100644
index 0000000..ab5553e
--- /dev/null
+++ b/portage/etc/portage/package.use/gvfs
@@ -0,0 +1 @@
+gnome-base/gvfs mtp
diff --git a/portage/etc/portage/package.use/kio-extras b/portage/etc/portage/package.use/kio-extras
new file mode 100644
index 0000000..3eef415
--- /dev/null
+++ b/portage/etc/portage/package.use/kio-extras
@@ -0,0 +1 @@
+kde-apps/kio-extras mtp
diff --git a/portage/etc/portage/postsync.d/50-eix-postsync b/portage/etc/portage/postsync.d/50-eix-postsync
new file mode 100755
index 0000000..88ef2ac
--- /dev/null
+++ b/portage/etc/portage/postsync.d/50-eix-postsync
@@ -0,0 +1,42 @@
+#!/bin/sh
+# This script is part of the eix project and distributed under the
+# terms of the GNU General Public License v2.
+#
+# Author and Copyright (c):
+# Martin V\"ath <martin@mvath.de>
+#
+set -u
+[ -z "${EIX_SYNC_RUNNING:++}" ] || exit 0
+if [ "${1-}" != '--self' ]
+then prg='/usr/bin/eix-drop-permissions'
+ me='/usr/bin/eix-postsync'
+ exec "$prg" -- "$me" '--self' ${1+"$@"}
+ exit
+fi
+shift
+if eix_funcs=`cat "/usr/share/eix/eix-functions" 2>/dev/null`
+then eval "$eix_funcs"
+else echo "${0##*/}: cannot find eix-functions.sh" >&2
+ exit 1
+fi
+ReadFunctions
+ReadVar eixcache EIX_CACHEFILE
+ReadVar eixprevious EIX_PREVIOUS
+CopyToPrevious() {
+ test -e "$eixcache" || return 0
+ StatusInfo "`eval_pgettext 'eix-sync' \
+ 'Copying old database to ${eixprevious}'`" \
+ "`eval_pgettext 'Statusline eix-sync' \
+ 'Copying old database to ${eixprevious}'`"
+ cp -p -- "$eixcache" "$eixprevious" || \
+ die "`eval_pgettext 'eix-sync' \
+ 'Could not copy database to ${eixprevious}'`"
+}
+EixUpdate() {
+ StatusInfo "`eval_pgettext 'eix-sync' 'Running eix-update'`" \
+ "`eval_pgettext 'Statusline eix-sync' 'Running eix-update'`"
+ eix-update || die "`eval_pgettext 'eix-sync' 'eix-update failed'`"
+}
+CopyToPrevious
+EixUpdate
+Exit 0
diff --git a/portage/etc/portage/repos.conf/eselect-repo.conf b/portage/etc/portage/repos.conf/eselect-repo.conf
index 002daad..40f8956 100644
--- a/portage/etc/portage/repos.conf/eselect-repo.conf
+++ b/portage/etc/portage/repos.conf/eselect-repo.conf
@@ -19,3 +19,8 @@ sync-uri = https://github.com/anyc/steam-overlay.git
location = /var/db/repos/librewolf
sync-type = git
sync-uri = https://codeberg.org/librewolf/gentoo.git
+
+[jaredallard]
+location = /var/db/repos/jaredallard-overlay
+sync-type = git
+sync-uri = https://github.com/jaredallard/overlay.git
diff --git a/update.sh b/update.sh
new file mode 100755
index 0000000..8a7d108
--- /dev/null
+++ b/update.sh
@@ -0,0 +1,167 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+QUICK=no
+DO_COMMIT=no
+INSTALL_HOOK=no
+DRY_RUN=no
+
+usage() {
+ cat <<EOF
+Sync live system state back into the dotfiles repo.
+
+Usage: $0 [options]
+
+ -q, --quick non-interactive, minimal output (used by postsync hook)
+ -c, --commit git add -A && git commit after syncing
+ -h, --hook-install write /etc/portage/postsync.d hook (auto after each emerge)
+ -n, --dry-run show what would change without copying
+ --help show this help
+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 ;;
+ esac
+ shift
+done
+
+log() { printf '\033[1;32m[sync]\033[0m %s\n' "$*"; }
+warn() { printf '\033[1;33m[warn]\033[0m %s\n' "$*"; }
+
+root_cp() {
+ if [[ "$DRY_RUN" == "yes" ]]; then
+ log " would copy $1 -> $2"
+ return 0
+ fi
+ if [[ $EUID -eq 0 ]]; then
+ cp "$1" "$2"
+ elif cp "$1" "$2" 2>/dev/null; then
+ : # readable as current user — done
+ elif command -v sudo >/dev/null 2>&1; then
+ sudo cp "$1" "$2"
+ else
+ warn "need root to copy $1"
+ return 1
+ fi
+}
+
+rsync_portage() {
+ # -L: dereference symlinks so /etc/portage symlinks back into the repo
+ # are copied as content, never re-created as self-referencing symlinks.
+ # 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"
+
+ local -a opts=(-aL --delete "--exclude-from=$exfile")
+ [[ "$DRY_RUN" == "yes" ]] && opts+=(-n)
+ log "portage /etc/portage -> repo/portage/etc/portage"
+ rsync "${opts[@]}" /etc/portage/ "$REPO_DIR/portage/etc/portage/"
+ rm -f "$exfile"
+}
+
+sync_portage() {
+ rsync_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"
+ 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
+ log " already a symlink into the repo — no copy needed"
+ else
+ root_cp /var/lib/portage/world "$REPO_DIR/portage/var/lib/portage/world"
+ fi
+
+ if [[ -s /var/lib/portage/world_sets ]]; then
+ log "world_sets /var/lib/portage/world_sets -> repo"
+ root_cp /var/lib/portage/world_sets "$REPO_DIR/portage/var/lib/portage/world_sets"
+ fi
+}
+
+sync_system() {
+ log "fstab /etc/fstab -> repo/fstab/etc/fstab"
+ root_cp /etc/fstab "$REPO_DIR/fstab/etc/fstab"
+
+ if [[ -f /etc/greetd/config.toml ]]; then
+ log "greetd /etc/greetd/config.toml -> repo/config.toml"
+ root_cp /etc/greetd/config.toml "$REPO_DIR/config.toml"
+ fi
+}
+
+install_hook() {
+ local hook=/etc/portage/postsync.d/update-dotfiles
+ if [[ "$DRY_RUN" == "yes" ]]; then
+ log " would write: $hook"
+ return 0
+ fi
+ log "writing $hook"
+ if [[ $EUID -eq 0 ]]; then
+ mkdir -p /etc/portage/postsync.d
+ 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
+EOF
+ chmod +x "$hook"
+ elif command -v sudo >/dev/null 2>&1; then
+ sudo tee "$hook" >/dev/null <<EOF
+#!/usr/bin/env bash
+# generated by update.sh --hook-install — keeps dotfiles fresh after each emerge
+exec "$REPO_DIR/update.sh" --quick
+EOF
+ sudo chmod +x "$hook"
+ else
+ warn "need root to write $hook"
+ fi
+}
+
+commit() {
+ cd "$REPO_DIR"
+ if [[ -n "$(git status --porcelain)" ]]; then
+ git add -A
+ git commit -q -m "sync system state: $(date '+%Y-%m-%d %H:%M')"
+ log "committed."
+ else
+ log "nothing to commit."
+ fi
+}
+
+main() {
+ if [[ "$DRY_RUN" == "yes" ]]; then
+ log "dry-run mode — showing changes, nothing written"
+ fi
+ sync_portage
+ sync_system
+ [[ "$INSTALL_HOOK" == "yes" ]] && install_hook
+
+ if [[ "$DO_COMMIT" == "yes" ]]; then
+ commit
+ elif [[ "$DRY_RUN" != "yes" && "$QUICK" != "yes" ]]; then
+ cd "$REPO_DIR"
+ if [[ -n "$(git status --porcelain)" ]]; then
+ warn "dotfiles changed — review and commit (or rerun with --commit)."
+ git status --short
+ else
+ log "repo is up to date."
+ fi
+ fi
+}
+
+main "$@" \ No newline at end of file