diff options
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 @@ -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 |
