diff --git a/install.sh b/install.sh index 8fa92e3..f8993a0 100755 --- a/install.sh +++ b/install.sh @@ -3,8 +3,6 @@ # Automated script to install my dotfiles # Clone dotfiles -# TODO make ~/.dotfiles path arbitrary and make all other scripts conform to this -# using SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) nix-shell -p git --command "git clone https://gitlab.com/librephoenix/nixos-config ~/.dotfiles" # Generate hardware config for new system diff --git a/profiles/homelab/home.nix b/profiles/homelab/home.nix index cb76da8..723c102 100644 --- a/profiles/homelab/home.nix +++ b/profiles/homelab/home.nix @@ -10,6 +10,7 @@ imports = [ ../../user/shell/sh.nix # My zsh and bash config + ../../user/bin/phoenix.nix # My nix command wrapper ../../user/app/ranger/ranger.nix # My ranger file manager config ../../user/app/git/git.nix # My git config ]; diff --git a/profiles/work/home.nix b/profiles/work/home.nix index f99c628..15d24dd 100644 --- a/profiles/work/home.nix +++ b/profiles/work/home.nix @@ -14,6 +14,7 @@ (./. + "../../../user/wm"+("/"+userSettings.wm+"/"+userSettings.wm)+".nix") # My window manager selected from flake ../../user/shell/sh.nix # My zsh and bash config ../../user/shell/cli-collection.nix # Useful CLI apps + ../../user/bin/phoenix.nix # My nix command wrapper ../../user/app/doom-emacs/doom.nix # My doom emacs config ../../user/app/ranger/ranger.nix # My ranger file manager config ../../user/app/git/git.nix # My git config diff --git a/profiles/wsl/home.nix b/profiles/wsl/home.nix index 794d7e1..16c5048 100644 --- a/profiles/wsl/home.nix +++ b/profiles/wsl/home.nix @@ -13,6 +13,7 @@ stylix.homeManagerModules.stylix ../../user/shell/sh.nix # My zsh and bash config ../../user/shell/cli-collection.nix # Useful CLI apps + ../../user/bin/phoenix.nix # My nix command wrapper ../../user/app/doom-emacs/doom.nix # My doom emacs config ../../user/app/ranger/ranger.nix # My ranger file manager config ../../user/app/git/git.nix # My git config diff --git a/pull.sh b/pull.sh deleted file mode 100755 index de05b16..0000000 --- a/pull.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# Automated script to update my non-primary systems -# to be in sync with upstream git repo while -# preserving local edits to dotfiles via git stash - -# Relax permissions temporarily so git can work -sudo ~/.dotfiles/soften.sh ~/.dotfiles; - -# Stash local edits, pull changes, and re-apply local edits -pushd ~/.dotfiles; -git stash; -git pull; -git stash apply; -popd; - -# Permissions for files that should be owned by root -sudo ~/.dotfiles/harden.sh ~/.dotfiles; - -# Synchronize system -~/.dotfiles/sync.sh; diff --git a/sync-posthook.sh b/sync-posthook.sh deleted file mode 100755 index 220c2ca..0000000 --- a/sync-posthook.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# Post hooks to be called after a -# configuration sync - -# Mainly just to reload stylix - -# xmonad -pgrep xmobar &> /dev/null && echo "Killing old xmobar instances" && echo "Running killall xmobar" && killall xmobar &> /dev/null; # xmonad will restart xmobar -pgrep xmonad &> /dev/null && echo "Recompiling xmonad" && echo "Running xmonad --recompile && xmonad --restart" && xmonad --recompile && xmonad --restart; -pgrep .dunst-wrapped &> /dev/null && echo "Restarting dunst" && killall .dunst-wrapped && echo "Running dunst" && dunst &> /dev/null & disown; -pgrep xmonad &> /dev/null && echo "Reapplying background from stylix via feh" && echo "Running ~/.fehbg-stylix" && ~/.fehbg-stylix & disown; - -# hyprland -pgrep Hyprland &> /dev/null && echo "Reloading hyprland" && hyprctl reload -pgrep .waybar-wrapped &> /dev/null && echo "Restarting waybar" && killall .waybar-wrapped && echo "Running waybar" && waybar &> /dev/null & disown; -pgrep fnott &> /dev/null && echo "Restarting fnott" && killall fnott && echo "Running fnott" && fnott &> /dev/null & disown; -pgrep Hyprland &> /dev/null && echo "Reapplying background from stylix via swaybg" && echo "Running ~/.swaybg-stylix" && ~/.swaybg-stylix & disown; - -# emacs -pgrep emacs &> /dev/null && echo "Reloading emacs stylix theme" && echo "Running emacsclient --no-wait --eval \"(load-theme 'doom-stylix t nil)\"" && emacsclient --no-wait --eval "(load-theme 'doom-stylix t nil)"; diff --git a/sync.sh b/sync.sh deleted file mode 100755 index c984fd9..0000000 --- a/sync.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# Script to synchronize system state -# with configuration files for nixos system -# and home-manager - -# Rebuild system -sudo nixos-rebuild switch --flake ~/.dotfiles#system; - -# Install and build home-manager configuration -home-manager switch --flake ~/.dotfiles#user; - -~/.dotfiles/sync-posthook.sh diff --git a/update.sh b/update.sh index 129701b..8c890b6 100755 --- a/update.sh +++ b/update.sh @@ -1,7 +1,23 @@ #!/bin/sh -# Script to update my flake without -# synchronizing configuration +# Automated script to update my non-primary systems +# to be in sync with upstream git repo while +# preserving local edits to dotfiles via git stash + +# Relax permissions temporarily so git can work +sudo ~/.dotfiles/soften.sh ~/.dotfiles; + +# Stash local edits, pull changes, and re-apply local edits +git stash +git pull +git stash apply + +# Permissions for files that should be owned by root +sudo ~/.dotfiles/harden.sh ~/.dotfiles; + +# Rebuild system +sudo nixos-rebuild switch --flake ~/.dotfiles#system; + +# Install and build home-manager configuration +home-manager --extra-experimental-features nix-command --extra-experimental-features flakes -- switch --flake ~/.dotfiles#user; -# Update flake -sudo nix flake update ~/.dotfiles; diff --git a/upgrade.sh b/upgrade.sh deleted file mode 100755 index 005faff..0000000 --- a/upgrade.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# Script to update system and sync -# Does not pull changes from git - -# Update flake -~/.dotfiles/update.sh; - -# Synchronize system -~/.dotfiles/sync.sh; diff --git a/user/app/doom-emacs/config.el b/user/app/doom-emacs/config.el index 2779572..d3834b0 100644 --- a/user/app/doom-emacs/config.el +++ b/user/app/doom-emacs/config.el @@ -973,7 +973,6 @@ If FULL-MODE is not null, run full krita." org-agenda-skip-scheduled-if-deadline-is-shown t org-agenda-skip-timestamp-if-deadline-is-shown t) - ;; Custom styles for dates in agenda (custom-set-faces! '(org-agenda-date :inherit outline-1 :height 1.15) @@ -981,7 +980,7 @@ If FULL-MODE is not null, run full krita." '(org-agenda-date-weekend :ineherit outline-2 :height 1.15) '(org-agenda-date-weekend-today :inherit outline-4 :height 1.15) '(org-super-agenda-header :inherit custom-button :weight bold :height 1.05) - `(link :foreground unspecified :underline nil :background ,(nth 1 (nth 7 doom-themes--colors))) + '(link :foreground unspecified :underline nil :background "#46354a") '(org-link :foreground unspecified) ) diff --git a/user/app/doom-emacs/doom.org b/user/app/doom-emacs/doom.org index 38d81f1..0c2b6a1 100644 --- a/user/app/doom-emacs/doom.org +++ b/user/app/doom-emacs/doom.org @@ -1130,7 +1130,6 @@ On Wayland, EAF doesn't work. org-agenda-skip-scheduled-if-deadline-is-shown t org-agenda-skip-timestamp-if-deadline-is-shown t) - ;; Custom styles for dates in agenda (custom-set-faces! '(org-agenda-date :inherit outline-1 :height 1.15) @@ -1138,7 +1137,7 @@ On Wayland, EAF doesn't work. '(org-agenda-date-weekend :ineherit outline-2 :height 1.15) '(org-agenda-date-weekend-today :inherit outline-4 :height 1.15) '(org-super-agenda-header :inherit custom-button :weight bold :height 1.05) - `(link :foreground unspecified :underline nil :background ,(nth 1 (nth 7 doom-themes--colors))) + '(link :foreground unspecified :underline nil :background "#46354a") '(org-link :foreground unspecified) ) @@ -1181,6 +1180,17 @@ On Wayland, EAF doesn't work. #+END_SRC +#+RESULTS: +| Teaching.p | () | nil | nil | :ascent | center | +| Family.s | () | nil | nil | :ascent | center | +| Producer.p | () | nil | nil | :ascent | center | +| Bard.p | () | nil | nil | :ascent | center | +| Stories.s | () | nil | nil | :ascent | center | +| Author.p | () | nil | nil | :ascent | center | +| Gamedev.s | () | nil | nil | :ascent | center | +| Knowledge.p | () | nil | nil | :ascent | center | +| Personal.p | () | nil | nil | :ascent | center | + *** Org Agenda Convenience Functions #+BEGIN_SRC emacs-lisp :tangle config.el (defun org-categorize-by-roam-db-on-save () diff --git a/user/bin/phoenix.nix b/user/bin/phoenix.nix new file mode 100644 index 0000000..4814659 --- /dev/null +++ b/user/bin/phoenix.nix @@ -0,0 +1,212 @@ +{ pkgs, userSettings, ... }: + +let + # This sets up my "phoenix" script with my configuration paths + # =phoenix= is just my wrapper script for easier access to nix/nixos commands + myPhoenixScript = '' + RED='\033[0;31m' + GREEN='\033[0;32m' + ORANGE='\033[0;33m' + BLUE='\033[0;34m' + PURPLE='\033[0;35m' + CYAN='\033[0;36m' + NC='\033[0m' + FRAMES="/ | \\ -" + function non_blocking_wait { + PID=$1 + if [ ! -d "/proc/$PID" ]; then + wait $PID + CODE=$? + else + CODE=127 + fi + return $CODE + } + function animate_msg { + pid=$!; + while ps -p $pid > /dev/null; + do + for frame in $FRAMES; + do + printf "\r$frame $1"; + sleep 0.2; + done + non_blocking_wait $pid; + status=$?; + done + if [ $status = 0 ]; then + printf "\r$GREEN✓$NC $1$GREEN [Success!]$NC"; + else + printf "\r$RED×$NC $1$RED [Failed!]$NC"; + fi + printf "\n" + } + function sync_system { + echo -e "$ORANGE### Syncing system configuration ###$NC" + pushd ''+userSettings.dotfilesDir+'' &> /dev/null; + if [ "$1" = "verbose" ]; then + echo "Syncing system configuration (stack traces will be shown):" + sudo systemd-run --no-ask-password --uid=0 --system --scope -p MemoryLimit=16000M -p CPUQuota=60% nixos-rebuild switch --flake .#system --show-trace; + else + sudo bash -c ' + RED="\033[0;31m"; + GREEN="\033[0;32m"; + NC="\033[0m" + FRAMES="/ | \\ -"; + systemd-run --no-ask-password --uid=0 --system --scope -p MemoryLimit=16000M -p CPUQuota=60% nixos-rebuild switch --flake .#system &> /dev/null & + pid=$!; + while ps -p $pid > /dev/null; + do + for frame in $FRAMES; + do + printf "\r$frame Syncing system configuration..."; + sleep 0.2; + done + if [ ! -d "/proc/$pid" ]; then + wait $pid + status=$? + else + status=127 + fi + done + if [ $status = 0 ]; then + printf "\r$GREEN✓$NC Syncing system configuration...$GREEN [Success!]$NC"; + else + printf "\r$RED×$NC Syncing system configuration...$RED [Failed!]$NC"; + fi + printf "\n"' + fi + popd &> /dev/null; + echo -e "$ORANGE### System configuration sync finished ###$NC" + } + function sync_user { + echo -e "$BLUE### Syncing user configuration ###$NC" + pushd ''+userSettings.dotfilesDir+'' &> /dev/null; + if [ "$1" = "verbose" ]; then + echo "Syncing user configuration (stack traces will be shown):" + echo "Running home-manager switch --flake .#user --show-trace" + systemd-run --no-ask-password --uid=1000 --user --scope -p MemoryLimit=16000M -p CPUQuota=60% home-manager switch --flake .#user --show-trace; + which xmobar &> /dev/null && echo "Killing old xmobar instances" && echo "Running killall xmobar" && killall xmobar &> /dev/null; + which xmonad &> /dev/null && echo "Recompiling xmonad" && echo "Running xmonad --recompile && xmonad --restart" && xmonad --recompile && xmonad --restart; + which emacsclient &> /dev/null && echo "Reloading emacs stylix theme" && echo "Running emacsclient --no-wait --eval \"(load-theme 'doom-stylix t nil)\"" && emacsclient --no-wait --eval "(load-theme 'doom-stylix t nil)"; + [ -f ~/.fehbg-stylix ] &> /dev/null && echo "Reapplying background from stylix via feh" && echo "Running ~/.fehbg-stylix" && ~/.fehbg-stylix; + [ -f ~/.swaybg-stylix ] &> /dev/null && echo "Reapplying background from stylix via swaybg" && echo "Running ~/.swaybg-stylix" && ~/.swaybg-stylix; + else + systemd-run --no-ask-password --uid=1000 --user --scope -p MemoryLimit=16000M -p CPUQuota=60% home-manager switch --flake .#user &> /dev/null & + animate_msg "Syncing user configuration..." + which xmobar &> /dev/null && killall xmobar &> /dev/null & + which xmonad &> /dev/null && xmonad --recompile &> /dev/null & + animate_msg "Refreshing xmonad..." + which emacsclient &> /dev/null && emacsclient --no-wait --eval "(load-theme 'doom-stylix t nil)" &> /dev/null & + animate_msg "Reloading stylix theme..." + [ -f ~/.fehbg-stylix ] &> /dev/null && ~/.fehbg-stylix &> /dev/null & + [ -f ~/.swaybg-stylix ] &> /dev/null && ~/.swaybg-stylix &> /dev/null & + fi + popd &> /dev/null; + echo -e "$BLUE### User configuration sync finished ###$NC" + } + function update_flake { + echo -e "$CYAN### Updating flake and other package managers$NC"; + pushd ''+userSettings.dotfilesDir+'' &> /dev/null; + if [ "$1" = "verbose" ]; then + echo "Updating flake inputs"; + echo "Running nix flake update"; + nix flake update; + if [ -d ~/.emacs.d/eaf/app/browser ] &> /dev/null; + then + echo "Updating npm dependencies for eaf" + echo "Navigating to ~/.emacs.d/eaf/app/browser" + pushd ~/.emacs.d/eaf/app/browser; + echo "Running rm package*.json"; + rm package*.json; + echo "Running npm install darkreader @mozilla/readability"; + npm install darkreader @mozilla/readability; + echo "Running rm package*.json"; + rm package*.json; + echo "Returning to ''+userSettings.dotfilesDir+''" + popd &> /dev/null; + fi + echo "" + echo "Updating flatpaks"; + echo "Running sudo flatpak update -y"; + sudo flatpak update -y; + else + nix flake update &> /dev/null & + animate_msg "Updating flake inputs..." + if [ -d ~/.emacs.d/eaf/app/browser ] &> /dev/null; + then + pushd ~/.emacs.d/eaf/app/browser &> /dev/null; + rm package*.json &> /dev/null; + npm install darkreader @mozilla/readability &> /dev/null & + animate_msg "Updating npm dependencies for eaf..."; + rm package*.json &> /dev/null; + popd; + fi + echo "Reqesting authentication for flatpak update.." + sudo bash -c ' + RED="\033[0;31m"; + GREEN="\033[0;32m"; + NC="\033[0m" + FRAMES="/ | \\ -"; + flatpak update -y &> /dev/null & + pid=$!; + while ps -p $pid > /dev/null; + do + for frame in $FRAMES; + do + printf "\r$frame Updating flatpaks..."; + sleep 0.2; + done + if [ ! -d "/proc/$pid" ]; then + wait $pid + status=$? + else + status=127 + fi + done + if [ $status = 0 ]; then + printf "\r$GREEN✓$NC Updating flatpaks...$GREEN [Success!]$NC"; + else + printf "\r$RED×$NC Updating flatpaks...$RED [Failed!]$NC"; + fi + printf "\n"' + fi + popd &> /dev/null; + echo -e "$CYAN### Flake and other updates finished ###$NC"; + echo -e "Please run$GREEN git$NC diff HEAD flake.lock inside ''+userSettings.dotfilesDir+(" "+'' to see flake input changes";'')+ + ''} + if [ "$1" = "sync" ]; then + if [ "$#" = 1 ]; then + sync_system; + sync_user; + elif [ "$2" = "user" ]; then + sync_user; + elif [ "$2" = "system" ]; then + sync_system; + else + echo "Please pass 'system' or 'user' if supplying a second argument" + fi + elif [ "$1" = "update" ]; then + if [ "$#" -gt 1 ]; then + echo "Warning: The 'update' command has no subcommands (no $2 subcommand)" + fi + update_flake; + elif [ "$1" = "gc" ]; then + if [ "$2" = "full" ]; then + sudo nix-collect-garbage --delete-old; + nix-collect-garbage --delete-old; + elif [ "$2" ]; then + sudo nix-collect-garbage --delete-older-than $2; + nix-collect-garbage --delete-older-than $2; + else + sudo nix-collect-garbage --delete-older-than 30d; + nix-collect-garbage --delete-older-than 30d; + fi + fi + ''; +in +{ + home.packages = [ + (pkgs.writeScriptBin "phoenix" myPhoenixScript) + ]; +} diff --git a/user/shell/cli-collection.nix b/user/shell/cli-collection.nix index 468feed..ce93f72 100644 --- a/user/shell/cli-collection.nix +++ b/user/shell/cli-collection.nix @@ -37,4 +37,8 @@ '') vim neovim ]; + + imports = [ + ../bin/phoenix.nix # My nix command wrapper + ]; }