omnixient/packages/scripts.nix
2026-06-28 09:59:05 +02:00

549 lines
14 KiB
Nix
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ pkgs, lib, ... }:
# Omnixient utility scripts as a Nix package
pkgs.stdenv.mkDerivation rec {
pname = "omni-scripts";
version = "1.0.0";
# No source needed for script-only package
dontUnpack = true;
buildInputs = with pkgs; [
bash
coreutils
gnugrep
gnused
gawk
jq
curl
wget
git
fzf
ripgrep
];
installPhase = ''
mkdir -p $out/bin
# Theme management
cat > $out/bin/omni-theme-set << 'EOF'
#!/usr/bin/env bash
set -e
THEME="$1"
AVAILABLE_THEMES="tokyo-night catppuccin gruvbox nord everforest rose-pine kanagawa catppuccin-latte matte-black osaka-jade ristretto"
if [ -z "$THEME" ]; then
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
exit 1
fi
echo "Usage: omni theme set <theme>" >&2
echo "Available themes: $AVAILABLE_THEMES" >&2
exit 1
fi
if ! echo "$AVAILABLE_THEMES" | grep -qw "$THEME"; then
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
exit 1
fi
echo "Error: Unknown theme '$THEME'" >&2
echo "Available themes: $AVAILABLE_THEMES" >&2
exit 1
fi
# Update configuration
sudo sed -i "s/currentTheme = \".*\"/currentTheme = \"$THEME\"/" /etc/nixos/configuration.nix
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "Switching to theme: $THEME"
fi
# Rebuild system
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
sudo nixos-rebuild switch --flake /etc/nixos#omni >/dev/null 2>&1
else
sudo nixos-rebuild switch --flake /etc/nixos#omni
echo "Theme switched to $THEME successfully!"
fi
EOF
chmod +x $out/bin/omni-theme-set
cat > $out/bin/omni-theme-list << 'EOF'
#!/usr/bin/env bash
THEMES="tokyo-night catppuccin gruvbox nord everforest rose-pine kanagawa catppuccin-latte matte-black osaka-jade ristretto"
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
echo "$THEMES" | tr ' ' '\n'
exit 0
fi
if [[ "''${OMNI_JSON:-}" == "1" ]]; then
current=$(grep currentTheme /etc/nixos/configuration.nix 2>/dev/null | cut -d'"' -f2 || echo "tokyo-night")
echo '{'
echo ' "available": ["'$(echo "$THEMES" | sed 's/ /", "/g')'"],'
echo ' "current": "'$current'"'
echo '}'
exit 0
fi
echo "Available Omnixient themes:"
echo "========================"
echo " tokyo-night (default)"
echo " catppuccin"
echo " gruvbox"
echo " nord"
echo " everforest"
echo " rose-pine"
echo " kanagawa"
echo " catppuccin-latte"
echo " matte-black"
echo " osaka-jade"
echo " ristretto"
echo ""
echo "Current theme: $(grep currentTheme /etc/nixos/configuration.nix 2>/dev/null | cut -d'"' -f2 || echo "tokyo-night")"
echo ""
echo "To change theme, run: omni theme set <theme-name>"
EOF
chmod +x $out/bin/omni-theme-list
# Get current theme command
cat > $out/bin/omni-theme-get << 'EOF'
#!/usr/bin/env bash
current=$(grep currentTheme /etc/nixos/configuration.nix 2>/dev/null | cut -d'"' -f2 || echo "tokyo-night")
if [[ "''${OMNI_JSON:-}" == "1" ]]; then
echo '{"current": "'$current'"}'
else
echo "$current"
fi
EOF
chmod +x $out/bin/omni-theme-get
# System management
cat > $out/bin/omni-update << 'EOF'
#!/usr/bin/env bash
set -e
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "🔄 Updating Omnixient system..."
echo ""
fi
# Update flake inputs
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "📦 Updating flake inputs..."
fi
cd /etc/nixos
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
sudo nix flake update >/dev/null 2>&1
else
sudo nix flake update
fi
# Show what changed
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo ""
echo "📊 Changes:"
git diff flake.lock | grep -E "^\+" | head -20
fi
# Rebuild system
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo ""
echo "🏗 Rebuilding system..."
fi
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
sudo nixos-rebuild switch --flake .#omni >/dev/null 2>&1
else
sudo nixos-rebuild switch --flake .#omni
echo ""
echo " System updated successfully!"
fi
EOF
chmod +x $out/bin/omni-update
cat > $out/bin/omni-clean << 'EOF'
#!/usr/bin/env bash
set -e
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "🧹 Cleaning Omnixient system..."
echo ""
# Show current store size
echo "Current store size:"
du -sh /nix/store 2>/dev/null || echo "Unable to calculate"
echo ""
fi
# Run garbage collection
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "Running garbage collection..."
fi
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
sudo nix-collect-garbage -d >/dev/null 2>&1
else
sudo nix-collect-garbage -d
fi
# Optimize store
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
echo "Optimizing Nix store..."
fi
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
sudo nix-store --optimise >/dev/null 2>&1
else
sudo nix-store --optimise
fi
if [[ "''${OMNI_QUIET:-}" != "1" ]]; then
# Show new size
echo ""
echo "New store size:"
du -sh /nix/store 2>/dev/null || echo "Unable to calculate"
echo ""
echo " Cleanup complete!"
fi
EOF
chmod +x $out/bin/omni-clean
# Package management
cat > $out/bin/omni-search << 'EOF'
#!/usr/bin/env bash
QUERY="$1"
if [ -z "$QUERY" ]; then
echo "Usage: omni-search <package-name>"
exit 1
fi
echo "Searching for '$QUERY'..."
nix search nixpkgs "$QUERY" 2>/dev/null | head -50
EOF
chmod +x $out/bin/omni-search
cat > $out/bin/omni-install << 'EOF'
#!/usr/bin/env bash
set -e
PACKAGES="$*"
if [ -z "$PACKAGES" ]; then
echo "Usage: omni-install <package-name> [package-name...]"
exit 1
fi
echo "📦 Installing packages: $PACKAGES"
echo ""
# Add packages to configuration
CONFIG="/etc/nixos/configuration.nix"
for PKG in $PACKAGES; do
echo "Adding $PKG to configuration..."
# This would need more sophisticated editing
echo "Package $PKG needs to be manually added to $CONFIG"
done
echo ""
echo "Please edit $CONFIG and add the packages to environment.systemPackages"
echo "Then run: omni-rebuild"
EOF
chmod +x $out/bin/omni-install
# Development helpers
cat > $out/bin/omni-dev-shell << 'EOF'
#!/usr/bin/env bash
LANG="$1"
case "$LANG" in
rust)
echo "Starting Rust development shell..."
nix-shell -p rustc cargo rust-analyzer rustfmt clippy
;;
go)
echo "Starting Go development shell..."
nix-shell -p go gopls gotools golangci-lint
;;
python)
echo "Starting Python development shell..."
nix-shell -p python3 python3Packages.pip python3Packages.virtualenv python3Packages.ipython
;;
node|js)
echo "Starting Node.js development shell..."
nix-shell -p nodejs pnpm typescript
;;
c|cpp)
echo "Starting C/C++ development shell..."
nix-shell -p gcc cmake gnumake gdb clang-tools
;;
*)
echo "Usage: omni-dev-shell <language>"
echo "Supported languages: rust, go, python, node/js, c/cpp"
exit 1
;;
esac
EOF
chmod +x $out/bin/omni-dev-shell
# Screenshot utility
cat > $out/bin/omni-screenshot << 'EOF'
#!/usr/bin/env bash
MODE="''${1:-region}"
OUTPUT_DIR="$HOME/Pictures/Screenshots"
mkdir -p "$OUTPUT_DIR"
FILENAME="$OUTPUT_DIR/screenshot-$(date +%Y%m%d-%H%M%S).png"
case "$MODE" in
region|area)
grim -g "$(slurp)" "$FILENAME"
;;
full|screen)
grim "$FILENAME"
;;
window)
grim -g "$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')" "$FILENAME"
;;
*)
echo "Usage: omni-screenshot [region|full|window]"
exit 1
;;
esac
if [ -f "$FILENAME" ]; then
wl-copy < "$FILENAME"
notify-send "Screenshot saved" "$FILENAME" -i "$FILENAME"
echo "$FILENAME"
fi
EOF
chmod +x $out/bin/omni-screenshot
# System info
cat > $out/bin/omni-info << 'EOF'
#!/usr/bin/env bash
# Gather data once
VERSION=$(nixos-version)
KERNEL=$(uname -r)
THEME=$(grep currentTheme /etc/nixos/configuration.nix 2>/dev/null | cut -d'"' -f2 || echo "tokyo-night")
CPU=$(lscpu | grep 'Model name' | cut -d':' -f2 | xargs)
MEMORY=$(free -h | awk '/^Mem:/ {print $2}')
DISK=$(df -h / | awk 'NR==2 {print $2}')
if [[ "''${OMNI_JSON:-}" == "1" ]]; then
echo "{"
echo " \"system\": {"
echo " \"version\": \"$VERSION\","
echo " \"kernel\": \"$KERNEL\","
echo " \"theme\": \"$THEME\","
echo " \"user\": \"$USER\","
echo " \"shell\": \"$SHELL\","
echo " \"terminal\": \"$TERM\""
echo " },"
echo " \"hardware\": {"
echo " \"cpu\": \"$CPU\","
echo " \"memory\": \"$MEMORY\","
echo " \"disk\": \"$DISK\""
echo " }"
echo "}"
exit 0
fi
if [[ "''${OMNI_QUIET:-}" == "1" ]]; then
echo "version=$VERSION"
echo "kernel=$KERNEL"
echo "theme=$THEME"
echo "user=$USER"
echo "shell=$SHELL"
echo "terminal=$TERM"
echo "cpu=$CPU"
echo "memory=$MEMORY"
echo "disk=$DISK"
exit 0
fi
echo ""
echo " OMNI NIXOS "
echo ""
echo ""
echo "System Information:"
echo "==================="
echo "Version: $VERSION"
echo "Kernel: $KERNEL"
echo "Theme: $THEME"
echo "User: $USER"
echo "Shell: $SHELL"
echo "Terminal: $TERM"
echo ""
echo "Hardware:"
echo "========="
echo "CPU: $CPU"
echo "Memory: $MEMORY"
echo "Disk: $DISK"
echo ""
echo "Quick Commands:"
echo "=============="
echo " omni help - Show help"
echo " omni update - Update system"
echo " omni clean - Clean system"
echo " omni theme - List themes"
EOF
chmod +x $out/bin/omni-info
# Help command
cat > $out/bin/omni-help << 'EOF'
#!/usr/bin/env bash
cat << HELP
Omnixient NixOS - Command Reference
================================
System Management:
------------------
omni-update Update system and flake inputs
omni-clean Clean and optimize Nix store
omni-rebuild Rebuild system configuration
omni-info Show system information
Package Management:
-------------------
omni-search Search for packages
omni-install Install packages (guide)
Theme Management:
-----------------
omni-theme-list List available themes
omni-theme-set Set system theme
Development:
------------
omni-dev-shell Start language-specific shell
dev-postgres Start PostgreSQL container
dev-redis Start Redis container
dev-mysql Start MySQL container
dev-mongodb Start MongoDB container
Utilities:
----------
omni-screenshot Take screenshots
Hyprland Keybindings:
---------------------
Super + Return Open terminal
Super + B Open browser
Super + E Open file manager
Super + D Application launcher
Super + Q Close window
Super + F Fullscreen
Super + Space Toggle floating
Super + 1-9 Switch workspace
Super + Shift + 1-9 Move to workspace
Print Screenshot region
Shift + Print Screenshot full
For more information: https://github.com/TheArctesian/omnixy
HELP
EOF
chmod +x $out/bin/omni-help
# Main omni command
cat > $out/bin/omni << 'EOF'
#!/usr/bin/env bash
# Parse global flags
QUIET=false
JSON=false
while [[ $# -gt 0 ]]; do
case $1 in
--quiet|-q)
QUIET=true
export OMNI_QUIET=1
shift
;;
--json)
JSON=true
export OMNI_JSON=1
shift
;;
*)
break
;;
esac
done
CMD="''${1:-help}"
shift || true
case "$CMD" in
update|upgrade)
omni-update "$@"
;;
clean|gc)
omni-clean "$@"
;;
theme)
case "''${1:-}" in
set)
shift
omni-theme-set "$@"
;;
list|ls)
omni-theme-list "$@"
;;
get|current)
omni-theme-get "$@"
;;
"")
omni-theme-list "$@"
;;
*)
# Legacy: assume it's a theme name
omni-theme-set "$@"
;;
esac
;;
search)
omni-search "$@"
;;
install)
omni-install "$@"
;;
info|status)
omni-info "$@"
;;
help|--help|-h)
omni-help "$@"
;;
*)
if [[ "$QUIET" == "false" ]]; then
echo "Unknown command: $CMD" >&2
echo "Run 'omni help' for available commands" >&2
fi
exit 1
;;
esac
EOF
chmod +x $out/bin/omni
# Create rebuild alias
# nh wraps nixos-rebuild with tree-style build output, package diffs, and
# profile-aware GC. It handles privilege escalation itself, so no `sudo`
# prefix. --hostname pins the nixosConfiguration to "omni" regardless of
# the live machine hostname.
cat > $out/bin/omni-rebuild << 'EOF'
#!/usr/bin/env bash
nh os switch --hostname omni /etc/nixos "$@"
EOF
chmod +x $out/bin/omni-rebuild
'';
meta = with lib; {
description = "Omnixient utility scripts for NixOS";
license = licenses.mit;
platforms = platforms.linux;
};
}