feat: custom package derivations — forgejo-mcp, plymouth-theme, try-cli, scripts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1dea5c697c
commit
c8c89a19cf
4 changed files with 957 additions and 0 deletions
549
packages/scripts.nix
Normal file
549
packages/scripts.nix
Normal file
|
|
@ -0,0 +1,549 @@
|
|||
{ 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;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue