Merge branch 'master' of 192.168.1.126:TheCrazyInsanity/nixos-configv3

This commit is contained in:
2026-05-08 15:48:26 -04:00
3 changed files with 109 additions and 63 deletions

View File

@@ -6,6 +6,7 @@
config, config,
lib, lib,
pkgs, pkgs,
inputs,
... ...
}: }:
{ {
@@ -87,9 +88,9 @@
# List packages installed in system profile. # List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options). # You can use https://search.nixos.org/ to find more packages (and options).
#environment.systemPackages = with pkgs; [ environment.systemPackages = [
# cura-appimage # I want cura but not kicad so i dont pull in fabrication inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.pi
# ]; ];
# Some programs need SUID wrappers, can be configured further or are # Some programs need SUID wrappers, can be configured further or are
# started in user sessions. # started in user sessions.

View File

@@ -52,7 +52,6 @@ in
pkgs.wmenu pkgs.wmenu
pkgs.wl-clipboard pkgs.wl-clipboard
pkgs.mako pkgs.mako
pkgs.kdePackages.spectacle
pkgs.kdePackages.kate pkgs.kdePackages.kate
pkgs.kdePackages.filelight pkgs.kdePackages.filelight
inputs.glide.packages.${pkgs.stdenv.hostPlatform.system}.default inputs.glide.packages.${pkgs.stdenv.hostPlatform.system}.default
@@ -62,6 +61,7 @@ in
pkgs.dracula-theme # gtk theme pkgs.dracula-theme # gtk theme
pkgs.brightnessctl pkgs.brightnessctl
configure-gtk configure-gtk
pkgs.mpvpaper
]; ];
}; };

View File

@@ -85,6 +85,7 @@
"Mod4+j" = "[class=\"Jami\"] scratchpad show, resize set 90 ppt 90 ppt, move position center"; "Mod4+j" = "[class=\"Jami\"] scratchpad show, resize set 90 ppt 90 ppt, move position center";
"Print" = "exec flameshot gui";
}; };
bars = [ bars = [
{ {
@@ -140,72 +141,101 @@
} }
]; ];
}; };
extraConfig = ''
exec_always swaymsg output "*" bg ~/.background-image fill
'';
}; };
# yeah this was written by ai if it wasn't obvious
systemd.user.services.random-background = { systemd.user.services.random-background = {
Unit = { Unit = {
Description = "Update ~/.background_image with a random wallpaper"; Description = "Universal Wallpaper Rotator (Images, GIFs, Videos)";
After = [ "graphical-session.target" ];
PartOf = [ "graphical-session.target" ];
}; };
Service = {
Type = "oneshot";
# pkgs.writeShellScript creates an executable script in the nix store
ExecStart = "${pkgs.writeShellScript "random-bg-script" ''
# Nix uses 'set -e' by default, meaning any command failure kills the script.
# We use native bash features to safely handle finding the image and socket.
WALLPAPER_DIR="$HOME/wallpapers"
TARGET="$HOME/.background_image"
if [ ! -d "$WALLPAPER_DIR" ]; then
echo "Wallpaper directory not found."
exit 0
fi
# 1. Get a random image safely (|| true prevents set -e crashes if find returns nothing)
RANDOM_IMG=$(${pkgs.findutils}/bin/find "$WALLPAPER_DIR" -type f \( -iname \*.jpg -o -iname \*.png -o -iname \*.jpeg \) 2>/dev/null | ${pkgs.coreutils}/bin/shuf -n 1 || true)
if [ -n "$RANDOM_IMG" ]; then
# 2. Update symlink
${pkgs.coreutils}/bin/ln -sf "$RANDOM_IMG" "$TARGET"
# 3. Safely find the socket using native Bash globbing.
# systemd user services natively provide the correct $XDG_RUNTIME_DIR (/run/user/1000)
shopt -s nullglob
SOCKETS=("$XDG_RUNTIME_DIR"/sway-ipc.*.sock)
# 4. Check if the bash array found any socket files
if [ ''${#SOCKETS[@]} -gt 0 ]; then
export SWAYSOCK="''${SOCKETS[0]}"
echo "Using socket: $SWAYSOCK"
# 5. Execute swaymsg
${pkgs.sway}/bin/swaymsg output "*" bg "$RANDOM_IMG" fill
echo "Updated background to $RANDOM_IMG"
else
echo "Error: Could not find any sway socket in $XDG_RUNTIME_DIR"
exit 1
fi
else
echo "No images found in $WALLPAPER_DIR"
fi
''}";
};
};
systemd.user.timers.random-background = {
Unit = {
Description = "Run random-background service every hour";
};
Timer = {
OnCalendar = "minutely";
Persistent = true;
};
Install = { Install = {
WantedBy = [ "timers.target" ]; WantedBy = [ "graphical-session.target" ];
};
Service = {
Type = "simple";
Restart = "on-failure";
RestartSec = 5;
ExecStart = "${pkgs.writeShellScript "wallpaper-rotator" ''
WALLPAPER_DIR="$HOME/wallpapers"
INTERVAL=600 # Time in seconds between wallpaper changes (600 = 10 mins)
# 1. Safely find Wayland and Sway sockets
if [ -z "$WAYLAND_DISPLAY" ]; then
shopt -s nullglob
W_SOCKETS=("$XDG_RUNTIME_DIR"/wayland-[0-9]*)
if [ ''${#W_SOCKETS[@]} -gt 0 ]; then
export WAYLAND_DISPLAY=$(basename "''${W_SOCKETS[0]}")
fi
fi
if [ -z "$SWAYSOCK" ]; then
shopt -s nullglob
S_SOCKETS=("$XDG_RUNTIME_DIR"/sway-ipc.*.sock)
if [ ''${#S_SOCKETS[@]} -gt 0 ]; then
export SWAYSOCK="''${S_SOCKETS[0]}"
fi
fi
# State tracking for mpvpaper
MPV_PID=""
# Clean up mpvpaper gracefully if systemd stops the service
cleanup() {
if [ -n "$MPV_PID" ]; then
kill $MPV_PID 2>/dev/null || true
fi
exit 0
}
trap cleanup SIGINT SIGTERM
# 2. Infinite rotation loop
while true; do
if [ ! -d "$WALLPAPER_DIR" ]; then
echo "Wallpaper directory not found. Waiting..."
${pkgs.coreutils}/bin/sleep 60
continue
fi
# Find images, gifs, and videos
MEDIA=$(${pkgs.findutils}/bin/find "$WALLPAPER_DIR" -type f \( \
-iname \*.jpg -o -iname \*.jpeg -o -iname \*.png -o \
-iname \*.mp4 -o -iname \*.webm -o -iname \*.mkv -o -iname \*.gif \
\) 2>/dev/null | ${pkgs.coreutils}/bin/shuf -n 1 || true)
if [ -n "$MEDIA" ]; then
echo "Selected: $MEDIA"
EXT="''${MEDIA##*.}"
EXT=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') # Convert to lowercase
# If it's a static image, use Sway directly (saves battery/RAM)
if [[ "$EXT" == "jpg" || "$EXT" == "jpeg" || "$EXT" == "png" ]]; then
if [ -n "$MPV_PID" ]; then
kill $MPV_PID 2>/dev/null || true
MPV_PID=""
fi
${pkgs.sway}/bin/swaymsg output "*" bg "$MEDIA" fill
# If it's a video/gif, use mpvpaper
else
if [ -n "$MPV_PID" ]; then
kill $MPV_PID 2>/dev/null || true
fi
# Start mpvpaper in the background and record its process ID
${pkgs.mpvpaper}/bin/mpvpaper -o "loop no-audio" "*" "$MEDIA" &
MPV_PID=$!
fi
else
echo "No media found in $WALLPAPER_DIR."
fi
# Wait for the next rotation
${pkgs.coreutils}/bin/sleep $INTERVAL
done
''}";
}; };
}; };
@@ -293,6 +323,21 @@
}; };
}; };
services.flameshot = {
# Also installs/enables flameshot
enable = true;
settings = {
General = {
useGrimAdapter = true;
# Stops warnings for using Grim
disabledGrimWarning = true;
uiColor = "#00ff73";
contrastUiColor = "#002f01";
drawColor = "#ff0000";
};
};
};
# Install packages for better Qt support and kvantum themes # Install packages for better Qt support and kvantum themes
home.packages = with pkgs; [ home.packages = with pkgs; [
kdePackages.breeze kdePackages.breeze