Compare commits

..

11 Commits

34 changed files with 886 additions and 8894 deletions

View File

@@ -1,75 +0,0 @@
# Personal AI Agent: "About Me" Profile Generator
**Project Goal**
Build a showcase AI system that scans and summarizes your professional/personal work from self-hosted services (primarily Gitea for code/repos, plus Flatnotes/Trillium/HedgeDoc for notes/ideas/projects). The agent answers employer-style questions dynamically (e.g., "Summarize Giordano's coding projects and skills") with RAG-grounded responses, links, and image embeds where relevant.
Emphasize broad AI toolchain integration for skill development and portfolio impact: agentic workflows, RAG pipelines, orchestration, multi-LLM support. No frontend focus — terminal/API-triggered queries only.
**Key Features**
- Periodic/full scanning of services to extract text, summaries, code snippets, links, images.
- Populate & query a local vector DB (RAG) for semantic search.
- Agent reasons, retrieves, generates responses with evidence (links/images).
- Multi-LLM fallback (DeepSeek primary, Gemini/OpenCode trigger).
- Scheduled/automated updates via pipelines.
- Local/Docker deployment for privacy & control.
**Tools & Stack Overview**
| Category | Tool(s) | Purpose & Why Chosen | Integration Role |
|-----------------------|----------------------------------|--------------------------------------------------------------------------------------|------------------|
| Core Framework | LangChain / LangGraph | Build agent, tools, chains, RAG logic. Modular, industry-standard for LLM apps. | Heart of agent & retrieval |
| Crawling/Extraction | Selenium / Playwright + Firecrawl (via LangChain loaders) | Handle auth/dynamic pages (Gitea login/nav), structured extraction (Markdown/JSON). | Scan web views & APIs |
| Vector Database | Chroma | Local, lightweight RAG store. Easy Docker setup, native LangChain integration. | Store embeddings for fast semantic search |
| LLM(s) | DeepSeek (via API) + Gemini / OpenCode | DeepSeek: cheap, strong reasoning (primary). Gemini/OpenCode: terminal trigger/fallback. | Reasoning & generation |
| Data Pipeline / Scheduling | Apache Airflow (Docker) | Industry-best for ETL/ETL-like scans (DAGs). Local install via official Compose. | Schedule periodic scans/updates to Chroma |
| Visual Prototyping | Flowise | No-code visual builder on LangChain. Quick agent/RAG prototyping & debugging. | Experiment with chains before code |
| Script/Workflow Orchestration | Windmill | Turn Python/LangChain scripts into reusable, scheduled flows. Dev-first, high growth.| Reactive workflows (e.g., on-commit triggers) |
| Event-Driven Automation | Activepieces | Connect services event-based (e.g., Gitea webhook → re-scan). AI-focused pieces. | Glue for reactive triggers |
**High-Level Architecture & Flow**
1. **Ingestion Pipeline (Airflow + Crawlers)**
- Airflow DAG runs on schedule (daily/weekly) or manually.
- Task 1: LangChain agent uses Selenium/Playwright tool to browse/authenticate to services (e.g., Gitea repos, Flatnotes/Trillium pages).
- Task 2: Firecrawl loader extracts structured content (text, code blocks, links, image URLs).
- Task 3: LangChain chunks, embeds (DeepSeek embeddings), upserts to Chroma vector DB.
- Optional: Activepieces listens for events (e.g., Gitea push webhook) → triggers partial re-scan.
2. **Agent Runtime (LangChain/LangGraph + DeepSeek)**
- Core agent (ReAct-style): Receives query (e.g., via terminal/OpenCode: "opencode query 'Giordano's top projects'").
- Tools: Retrieve from Chroma (RAG), fetch specific pages/images if needed.
- LLM: DeepSeek for cost-effective reasoning/summarization. Fallback to Gemini if complex.
- Output: Natural response with summaries, links (e.g., Gitea repo URLs), embedded image previews (from scanned pages).
3. **Prototyping & Orchestration Layer**
- Use Flowise to visually build/test agent chains/RAG flows before committing to code.
- Windmill wraps scripts (e.g., scan script) as jobs/APIs.
- Activepieces adds event-driven glue (e.g., new note in Trillium → notify/update DB).
**Deployment & Running Locally**
- Everything in Docker Compose: Airflow (official image), Chroma, Python services (LangChain agent), optional Flowise/Windmill containers.
- Secrets: Env vars for API keys (DeepSeek, service auth).
- Trigger: Terminal via OpenCode/Gemini CLI → calls agent endpoint/script.
- Scale: Start simple (manual scans), add Airflow scheduling later.
**Skill Showcase & Portfolio Value**
- Demonstrates: Agentic AI, RAG pipelines, web crawling with auth, multi-tool orchestration, cost-optimized LLMs, local/self-hosted infra.
- Broad coverage: LangChain ecosystem + industry ETL (Airflow) + modern AI workflow tools (Flowise/Windmill/Activepieces).
- Low cost: DeepSeek keeps API bills minimal (often <$5/month even with frequent scans/queries).
**Next Steps (Implementation Phases)**
1. Setup local Docker env + Chroma + DeepSeek API key.
2. Build basic crawler tools (Selenium + Firecrawl) for Gitea/Flatnotes.
3. Prototype agent in Flowise, then code in LangChain.
4. Add Airflow DAG for scheduled ingestion.
5. Integrate Windmill/Activepieces for extras.
6. Test queries, refine summaries/links/images.
This setup positions you strongly for AI engineering roles while building real, integrated skills.
** Extra tools to add.
- AutoMaker
- AutoCoder - These assist in set and forget long review AI
- OpenRouter - Single access point for any CLI with useage fee.
- Aider - CLI code and file editing with OpenROuter for any model
- Goose - integrates with system and MCP servers like ClawBot

View File

@@ -1 +0,0 @@

View File

@@ -1,65 +0,0 @@
# Phase 2: Software Migration Plan & Mapping
**Objective:** To create a clear mapping from currently installed software (via APT and Snap) to their equivalents in the NixOS ecosystem. This list will directly inform the creation of the `configuration.nix` file.
## Analysis Summary
The reconnaissance scan revealed a large number of installed packages. The following is a high-level summary and a plan for the most critical software components identified.
**Instructions:** Review this list. Add any missing critical applications. The "NixOS Package Name" column should be filled in by searching for the application on [NixOS Search](https://search.nixos.org/packages).
---
### Tier 1: Critical Applications & Services
These are essential for your daily workflow and server functions.
| Application Name | Installed Via | Notes | NixOS Package Name / Module |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| Docker | `apt` | Core virtualization tool. | `virtualisation.docker.enable = true;` |
| Docker Compose | `apt` | Used for multi-container Docker apps. | `docker-compose` |
| Firefox | `snap` | Primary web browser. | `firefox` |
| Thunderbird | `snap` | Email client. | `thunderbird` |
| Kitty | `apt` | Terminal emulator. | `kitty` |
| Neovim (from dotfiles) | Manual/Git | Primary text editor. | `neovim` |
| Snapcast (Server/Client)| `apt`? | Need to locate config files (`/etc/snap*`). | `snapcast-server`, `snapcast-client` |
| Gitea (mentioned) | Docker/Manual | Git service. | `gitea` or managed via Docker |
| Nushell | `snap` | Shell. | `nushell` |
| --- | --- | --- | --- |
### Tier 2: Development & CLI Tools
Essential tools for your development and command-line environment.
| Tool Name | Installed Via | Notes | NixOS Package Name |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| Git | `apt` | Version control. | `git` |
| Rust (cargo, rustc) | `apt` | Rust programming language toolchain. | `rustc`, `cargo` |
| Node.js | `apt` | JavaScript runtime. | `nodejs` (specify version) |
| Python 3 | `apt` | Python programming language. | `python3` |
| build-essential / gcc | `apt` | C/C++ compiler and core build tools. | `gcc`, `gnumake` |
| btop | `apt` | Resource monitor. | `btop` |
| eza / bat / fzf | `apt` | Modern CLI tools. | `eza`, `bat`, `fzf` |
| --- | --- | --- | --- |
### Tier 3: Desktop & GUI Applications
Standard desktop applications.
| Application Name | Installed Via | Notes | NixOS Package Name |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| LibreOffice | `apt` | Office suite. | `libreoffice` |
| Flameshot | `apt` | Screenshot tool. | `flameshot` |
| GIMP / Inkscape (if any)| `apt`? | Graphics editors. | `gimp`, `inkscape` |
| GNOME Apps (various) | `apt` | Calculator, Clocks, etc. | Handled by `services.xserver.desktopManager.gnome.enable = true;` |
| --- | --- | --- | --- |
## Plan for Other Packages
- **System Libraries:** The vast majority of packages listed in the log are system libraries (files ending in `...:amd64`, `...-dev`, `lib...`). These will be managed automatically by NixOS as dependencies for the applications you choose to install. You do not need to list them manually.
- **Snap Packages:** All applications installed via `snap` will need to be replaced with their NixOS/Flathub equivalents. NixOS does not support Snap out of the box.
- **De-duplication:** Many packages are related (e.g., `g++`, `gcc`, `cpp`). In NixOS, installing the `gcc` package will provide the necessary toolchain.
**Next Step:** Use this document as a worksheet to build the `environment.systemPackages` list in the `configuration.nix.template` file.

View File

@@ -1,67 +0,0 @@
# Phase 2: Software Migration Plan & Mapping (Filled)
**Objective:** To create a clear mapping from currently installed software (via APT and Snap) to their equivalents in the NixOS ecosystem. This list will directly inform the creation of the `configuration.nix` file.
## Analysis Summary
The following tables are based on the `logs/01_system_recon.log` file.
---
### Tier 1: Critical Applications & Services
These are essential for your daily workflow and server functions.
| Application Name | Installed Via | Notes | NixOS Package Name / Module |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| Firefox | `snap` | Primary web browser. | `firefox` |
| Thunderbird | `snap` | Email client. | `thunderbird` |
| Kitty | `apt` | Terminal emulator. | `kitty` |
| Neovim | `apt` | Primary text editor. | `neovim` |
| Nushell | `snap` | Shell. | `nushell` |
| VS Code | `snap` | Code editor. | `vscode` |
| Telegram Desktop | `snap` | Messaging app. | `telegram-desktop` |
| --- | --- | --- | --- |
### Tier 2: Development & CLI Tools
Essential tools for your development and command-line environment.
| Tool Name | Installed Via | Notes | NixOS Package Name |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| Git | `apt` | Version control. | `git` |
| Rust (cargo, rustc) | `apt` | Rust programming language toolchain. | `rustc`, `cargo` |
| Node.js | `apt` | JavaScript runtime. | `nodejs` (specify version) |
| Python 3 | `apt` | Python programming language. | `python3` |
| build-essential / gcc | `apt` | C/C++ compiler and core build tools. | `gcc`, `gnumake` |
| btop | `apt` | Resource monitor. | `btop` |
| eza | `apt` | Modern `ls` replacement. | `eza` |
| bat | `apt` | Modern `cat` replacement. | `bat` |
| fzf | `apt` | Command-line fuzzy finder. | `fzf` |
| ripgrep | `apt` | Fast search tool. | `ripgrep` |
| zoxide | `apt` | Smarter `cd` command. | `zoxide` |
| --- | --- | --- | --- |
### Tier 3: Desktop & GUI Applications
Standard desktop applications.
| Application Name | Installed Via | Notes | NixOS Package Name |
| ----------------------- | ------------- | ----------------------------------------------- | -------------------------------- |
| LibreOffice | `apt` | Office suite. | `libreoffice` |
| Flameshot | `apt` | Screenshot tool. | `flameshot` |
| VLC | `apt` | Media player. | `vlc` |
| Spotify | `snap` | Music player. | `spotify` |
| Timeshift | `apt` | System restore utility. | `timeshift` |
| GNOME Apps (various) | `apt` | Calculator, Clocks, etc. | Handled by `services.xserver.desktopManager.gnome.enable = true;` |
| --- | --- | --- | --- |
## Plan for Other Packages
- **System Libraries:** The vast majority of packages listed in the log are system libraries (files ending in `...:amd64`, `...-dev`, `lib...`). These will be managed automatically by NixOS as dependencies for the applications you choose to install. You do not need to list them manually.
- **Snap Packages:** All applications installed via `snap` will need to be replaced with their NixOS/Flathub equivalents. NixOS does not support Snap out of the box. The list above includes the most important ones.
- **De-duplication:** Many packages are related (e.g., `g++`, `gcc`, `cpp`). In NixOS, installing the `gcc` package will provide the necessary toolchain.
**Next Step:** Use this document as a worksheet to build the `environment.systemPackages` list in the `configuration.nix` file.

View File

@@ -1,18 +0,0 @@
# Application Data Notes for NixOS Migration
This document outlines considerations for application-specific data that may need special handling during the NixOS migration.
## Important Considerations:
* **GPG Keys:** Your GnuPG keys are critical for cryptographic operations (e.g., signing Git commits, encrypting files). These are typically stored in `~/.gnupg/`. It is paramount to ensure these keys are backed up securely.
* **Action:** Verify that your `~/.gnupg/` directory is either included in a secure backup separate from `/data` (e.g., an encrypted archive) or that you have a recovery method (e.g., revoked subkeys, passphrase-protected master key backup) that is outside of this system.
* **SSH Keys:** Your SSH keys (typically in `~/.ssh/`) are used for secure remote access (e.g., to Gitea, other servers). While you've indicated dotfiles will be managed, SSH private keys should *never* be committed directly to a public repository.
* **Action:** Confirm that you have a secure backup of your `~/.ssh/` directory, especially your private keys, in a location separate from `/data` (e.g., an encrypted USB stick, a secure password manager). These keys should be restored to the new NixOS system as part of your `home-manager` setup or manually.
## Exclusions (No Action Required):
* **Thunderbird Email:** You have confirmed that Thunderbird uses Gmail in the cloud. No local migration of email data is required.
* **Google Chrome / Mozilla Firefox Profiles:** You have confirmed that browser data (bookmarks, passwords, extensions) are synced via your accounts. No local migration of browser profiles is required.
This document serves as a reminder to address these specific local application data points when configuring your new NixOS environment.

View File

@@ -1,176 +0,0 @@
# NixOS Install Guide (wipe NVMe, install from flake on Integral300)
This guide assumes:
- You are currently on Ubuntu
- You will WIPE the entire NVMe: /dev/nvme0n1
- You will install NixOS with:
- UEFI + systemd-boot
- Btrfs with subvolumes (@ and @home)
- No encryption
- zram swap (configured in NixOS config)
- Your config repo is a flake with output: `#sam-4screen-desktop`
- Integral300 (ext4) is available and will be mounted on NixOS at: /data
- UUID: 27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
- Dotfiles will live on the installed system at:
- `~/dotfiles` (NOT on /data)
Important constraints:
- `hosts/sam-4screen-desktop/hardware-configuration.nix` is currently a placeholder.
You MUST generate and copy the real one during install before running nixos-install.
---
## A) On Ubuntu: prepare and push the config repo to Gitea
1) Go to your repo folder (example):
- If your repo is on Integral300 already:
- `cd /media/sam/Integral300/<your-repo-folder>`
- Otherwise clone it to Integral300:
- `cd /media/sam/Integral300`
- `git clone ssh://git@<your-gitea-host>:<port>/<owner>/<repo>.git nixos-config`
- `cd nixos-config`
2) Ensure the flake evaluates:
- `nix --version`
- `nix flake show`
3) Commit your changes:
- `git status`
- `git add -A`
- `git commit -m "chore: prep install guide + HM config"`
4) Push to Gitea:
- `git push`
If you dont have `flake.lock` yet, you can create it:
- `nix flake lock`
Then commit/push it too.
---
## B) Boot NixOS installer (ISO)
1) Boot the NixOS ISO (graphical or minimal).
2) Open a terminal.
---
## C) Wipe / partition / format / mount (CLI method)
WARNING: This wipes the whole NVMe. Double-check the disk is correct.
### 1) Identify disks
- `lsblk -f`
Confirm:
- NVMe target: /dev/nvme0n1 (about 953G)
- Integral300 disk by UUID is present: 27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
### 2) Wipe and create partitions
This creates:
- p1 = EFI (1GiB)
- p2 = Btrfs (rest)
Commands:
- `sudo wipefs -a /dev/nvme0n1 || true`
- `sudo sgdisk --zap-all /dev/nvme0n1`
- `sudo sgdisk -n 1:1MiB:+1GiB -t 1:EF00 -c 1:EFI /dev/nvme0n1`
- `sudo sgdisk -n 2:0:0 -t 2:8300 -c 2:NIXOS /dev/nvme0n1`
Verify:
- `sudo fdisk -l /dev/nvme0n1`
### 3) Format
- `sudo mkfs.fat -F32 -n EFI /dev/nvme0n1p1`
- `sudo mkfs.btrfs -L nixos /dev/nvme0n1p2`
### 4) Create Btrfs subvolumes
- `sudo mount /dev/nvme0n1p2 /mnt`
- `sudo btrfs subvolume create /mnt/@`
- `sudo btrfs subvolume create /mnt/@home`
- `sudo umount /mnt`
### 5) Mount target layout for install
- `sudo mount -o subvol=@,compress=zstd,noatime /dev/nvme0n1p2 /mnt`
- `sudo mkdir -p /mnt/home`
- `sudo mount -o subvol=@home,compress=zstd,noatime /dev/nvme0n1p2 /mnt/home`
Mount EFI at /mnt/boot (systemd-boot expects /boot):
- `sudo mkdir -p /mnt/boot`
- `sudo mount /dev/nvme0n1p1 /mnt/boot`
### 6) Mount Integral300 so we can access the flake repo (offline-friendly)
- `sudo mkdir -p /mnt/data`
- `sudo mount /dev/disk/by-uuid/27febd74-20aa-4a3a-92c1-6fdd1ad7e88e /mnt/data`
---
## D) Generate hardware-configuration.nix (REQUIRED)
1) Generate:
- `sudo nixos-generate-config --root /mnt`
2) Copy the generated hardware config into your repo (overwrite placeholder):
- If your repo is at `/mnt/data/nixos-config`:
- `sudo cp /mnt/etc/nixos/hardware-configuration.nix /mnt/data/nixos-config/hosts/sam-4screen-desktop/hardware-configuration.nix`
If your repo folder name is different, adjust accordingly.
Optional sanity check:
- `sed -n '1,200p' /mnt/data/nixos-config/hosts/sam-4screen-desktop/hardware-configuration.nix`
---
## E) Install NixOS using the flake
From the installer environment, run:
- `sudo nixos-install --flake /mnt/data/nixos-config#sam-4screen-desktop`
Notes:
- The installer may ask you to set a root password. Do so.
- If you prefer not setting root password and using only your user + sudo, say so and we can adjust.
After install:
- `sudo reboot`
---
## F) First boot checklist (post-install)
1) Connect to Wi-Fi:
- `nmtui` (recommended)
- Connect to SSID: "Aussie Broadband 8729"
2) Verify static IP:
- `ip a show wlp4s2`
If it got DHCP, force one reconnect:
- `nmcli networking off; nmcli networking on`
or:
- `nmcli connection down "<connection name>"; nmcli connection up "<connection name>"`
3) Verify SSH works (from another machine):
- `ssh sam@192.168.20.27`
4) Verify /data mounted (this is for your storage drive and for accessing the config repo if you keep it there):
- `mount | grep ' /data '`
5) Put dotfiles onto the system at ~/dotfiles
Option A (recommended): clone dotfiles repo:
- `git clone <your-dotfiles-repo-url> ~/dotfiles`
Option B: copy from Integral300 if they currently only live there:
- `cp -a /data/home_sam_ubuntu/dotfiles ~/dotfiles`
6) Verify dotfiles exist:
- `ls -la ~/dotfiles`
---
## G) After install: commit the new hardware-configuration.nix
Back on your running system (or from Ubuntu before wiping, if you mounted and copied it there):
- `cd /data/nixos-config` (or wherever your repo is)
- `git status`
- `git add hosts/sam-4screen-desktop/hardware-configuration.nix`
- `git commit -m "feat: add generated hardware-configuration for sam-4screen-desktop"`
- `git push`

View File

@@ -1,99 +0,0 @@
# NixOS Build Spec (sam-4screen-desktop)
## Disk / Boot (WIPE ENTIRE NVMe DISK)
Target disk: /dev/nvme0n1
- Size: 953.87 GiB (1024209543168 bytes), 2000409264 sectors
- Model: PM951 NVMe SAMSUNG 1024GB
- NVMe serial: S2FZNXAH301424
- NVMe WWID: nvme.144d-2020202020205332465a4e584148333031343234-504d393531204e564d652053414d53554e4720313032344742-00000001
- Sector size (logical/physical): 512 bytes / 512 bytes
DECISION (CONFIRMED):
- Do NOT keep Windows.
- Wipe the entire /dev/nvme0n1 (all existing partitions will be deleted/overwritten).
Installer safety:
- Install target is NVMe only. Do not select /dev/sdX devices in the installer.
- Device names like /dev/sdb, /dev/sdc can change across boots; always rely on UUID/label when mounting non-target disks.
Verification commands (run before wiping, if you want one last check):
- `lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,UUID,MOUNTPOINTS`
- `sudo fdisk -l /dev/nvme0n1`
Boot method:
- UEFI
- Bootloader: systemd-boot
Filesystem / layout:
- Root filesystem: Btrfs (with subvolumes)
- Encryption: none
- Swap: zram
- Hibernate: no
- /home: Btrfs subvolume
Partitioning approach:
- Manual in the installer (no disko)
Recommended layout:
- New GPT on /dev/nvme0n1
- EFI System Partition (vfat), mounted at /boot
- Btrfs partition for the rest
- Subvolume @ mounted at /
- Subvolume @home mounted at /home
IMPORTANT:
- `hosts/sam-4screen-desktop/hardware-configuration.nix` is currently a placeholder.
- During install after mounting to /mnt:
1) Run: `nixos-generate-config --root /mnt`
2) Copy: `/mnt/etc/nixos/hardware-configuration.nix` into:
`hosts/sam-4screen-desktop/hardware-configuration.nix`
## Other attached disks (DO NOT FORMAT)
- /dev/sda (240GB) model: Patriot Burst El (KEEP)
- /dev/sda1: Microsoft reserved partition (~15MiB)
- /dev/sda2: NTFS label "Back Up" (keep)
- TempBackup (ext4) UUID=4f9c4bd5-fea5-408f-9370-731fc095da3f (~465GiB/500GB) (KEEP)
- Model: WD5000BEVT-22ZAT
- Serial: WD-WXNY08ND2684
- NOTE: device name may appear as /dev/sdX depending on boot/USB order; identify by UUID/label/model.
- Integral300 (ext4) UUID=27febd74-20aa-4a3a-92c1-6fdd1ad7e88e (~298GiB/320GB)
- Mount at /data
- NOTE: device name may change; config always uses /dev/disk/by-uuid.
- XPSystemDrive (ext4) UUID=82c994f1-9adb-49e4-ba1e-5b6e5ccbd49b (~149GiB/160GB) (KEEP)
- Model: HTS541616J9SA00 (Hitachi)
- NOTE: device name may appear as /dev/sdX depending on boot/USB order; identify by UUID/label/model.
## Networking
- Use NetworkManager
Static IPv4 policy (CONFIRMED):
- Static IPv4 should be applied to Wi-Fi SSID:
- SSID / connection id: "Aussie Broadband 8729"
- Interface: wlp4s2
- IP: 192.168.20.27/24
- Gateway: 192.168.20.1
- DNS: 192.168.20.35, 192.168.20.13
- Wired enp0s31f6: no static IP required for now
Secrets policy:
- Do not commit Wi-Fi PSKs to git.
- Static IP enforcement is implemented via a NetworkManager dispatcher script.
## Data drive mount
- Integral300 ext4 UUID=27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
- Mountpoint on NixOS: /data (preferred)
## Dotfiles policy
- Dotfiles live on the installed system at: ~/dotfiles
- Do not depend on /data for dotfiles.
## Desktop
- Primary compositor: Niri
- Display/login manager: greetd + tuigreet
- Session start command: `niri --session` (do not use `niri-session`)
- GPU: Intel HD 630 + NVIDIA Quadro P620
- Display appears to be driven by NVIDIA Quadro P620 (observed `/dev/fb0` on Ubuntu scan). Treat NVIDIA as primary unless proven otherwise.
## Secrets policy
- No API keys or WiFi PSKs committed to git

View File

@@ -1,184 +0,0 @@
# Software Inventory (Source of Truth)
This document is the canonical software list for the NixOS migration.
It consolidates prior notes and recon logs into a deduplicated plan.
Legend:
- **NOW (Base boot / day-1)** = required for first successful NixOS boot and daily workflow basics
- **SOON** = useful early, but not required to boot and log in
- **LATER** = intentionally deferred until after a stable base system
- **DEFER (Docker later)** = explicitly not installed on base system (will be deployed as containers later)
---
## 1) NOW (Base boot / day-1)
### Desktop / session (Wayland)
- **niri** (primary compositor)
- **greetd + tuigreet** (display/login manager)
- **xwayland** (X11 compatibility where needed)
- **xdg-desktop-portal** + **xdg-desktop-portal-gtk** + **xdg-desktop-portal-gnome** (portals baseline; improves screencast/screen share odds)
- Clipboard:
- **wl-clipboard**
- Screenshots (Wayland):
- **grim**
- **slurp**
### Core system services
- **NetworkManager**
- Static IPv4 is enforced on Wi-Fi SSID: **"Aussie Broadband 8729"**
- Interface: **wlp4s2**
- IP: **192.168.20.27/24**
- Gateway: **192.168.20.1**
- DNS: **192.168.20.35**, **192.168.20.13**
- Wired **enp0s31f6**: no static IP required for now (DHCP/unused)
- **OpenSSH server** (sshd)
- **PipeWire audio** (Pulse + ALSA) + **WirePlumber**
- **Firewall** (NixOS default; open SSH port only)
### Terminal / shell
- **kitty**
- **zsh**
- **oh-my-zsh**
- **powerlevel10k**
- Integrations enabled:
- **atuin**
- **fzf**
- **zoxide**
### Core CLI tools (daily essentials)
- **git**
- **neovim**
- Search/file tools:
- **ripgrep (rg)**
- **fd**
- Modern replacements:
- **bat**
- **eza**
- Convenience:
- **curl**
- **wget**
---
## 2) SOON (after base boot is stable)
These are commonly used, easy wins, but not required for “first login”.
### Dev tools
- Compilers / build:
- **gcc**
- **gnumake**
- **pkg-config**
- Language toolchains (pick pinned versions later):
- **nodejs**
- **python3** (+ `python3Packages.pip` as needed)
- **go**
- Rust strategy: prefer **rustup** if you need toolchain flexibility, otherwise `rustc`/`cargo` from nixpkgs.
### CLI utilities commonly used in the previous setup
- **jq**
- **btop**
- **lazygit**
- **zellij**
- **tealdeer (tldr)**
- **navi**
- **yazi**
- **dua-cli (dua)**
- **unzip / zip / p7zip**
- Clipboard (X11 fallback / mixed):
- **xclip** (optional; Wayland-first systems typically rely on `wl-clipboard`)
### Apps from Ubuntu recon (snap list) with Nix equivalents
From `logs/04_nixos_recon.log` snap list:
- `code`**vscode** (unfree)
- `firefox`**firefox**
- `thunderbird`**thunderbird**
- `telegram-desktop`**telegram-desktop**
- `spotify`**spotify** (unfree)
- `nushell`**nushell**
- `mqtt-explorer`**mqtt-explorer** (verify availability in nixpkgs)
- `notepad-plus-plus` → consider **notepadqq** or run via Wine (see “LATER”)
---
## 3) LATER (deliberately deferred until base is reliable)
### Desktop apps / optional GUI
- **Google Chrome** (unfree) (install once graphics/session is stable)
- **LibreOffice**
- **VLC**
- **Flameshot**
- Note: Flameshot on Wayland can be quirky; ensure portals + permissions work first.
- **Timeshift**
- Note: NixOS typically prefers rollback/snapshots via filesystem tooling (e.g., Btrfs snapshots). Use only if you explicitly want it.
### Remote desktop / admin tools
- **Tailscale** (client)
- **RustDesk** (service/app)
### Networking / diagnostics tools (as needed)
- **nmap**
- **arp-scan / arpwatch**
- **minicom / screen / cu**
- **ethtool**
- **tcpdump**
### Notepad++ situation
- `notepad-plus-plus` snap existed on Ubuntu.
- NixOS options:
- **notepadqq** (native)
- **Wine** route (more moving parts)
- Keep this until the base system is stable.
---
## 4) DEFER (Docker later)
These are explicitly postponed and should NOT be part of the base NixOS install.
- **Apprise** — **DEFER (Docker later)**
- **Obsidian** — **DEFER (Docker later)**
---
## 5) AI / Agentic stack (LATER; not part of base boot)
From `ai_dev_plan.md` and `software_to_add.md`, intentionally excluded from day-1:
- Orchestration / pipelines:
- **Airflow**
- **Windmill**
- **Activepieces**
- Prototyping:
- **Flowise**
- RAG / DB:
- **Chroma**
- Crawling:
- **Selenium / Playwright**
- **Firecrawl**
- Agent frameworks:
- **LangChain / LangGraph**
- CLI AI tools:
- **Aider**
- **OpenCode**
- **Gemini CLI**
- **Goose / MCP tooling**
- Model routing:
- **OpenRouter**
Plan: bring these up later via Docker Compose on top of a stable NixOS base.
---
## 6) Notes / policies
### Secrets policy (hard requirement)
- Do **not** commit API keys, tokens, WiFi PSKs, certificates, or private keys into git.
- Prefer:
- `~/.config/environment.d/*.conf` (local-only)
- a secrets manager (e.g. **sops-nix**) once the base system is stable
### Graphics strategy note (pending confirmation)
- Hardware includes Intel HD 630 + NVIDIA Quadro P620.
- Final graphics configuration will depend on which GPU is actually driving the 4 monitors.

91
home/sam/bin/task-due-notify.sh Executable file
View File

@@ -0,0 +1,91 @@
#!/nix/store/x12lw455sq6qy2wcya85d7rb88ybc3df-bash-interactive-5.3p9/bin/bash
# Simple Taskwarrior Notification Script
# Just checks: if time_until_due <= reminder_time, send notification
NTFY_URL="https://ntfy.lab.audasmedia.com.au/tasks"
NOW=$(date -u +%s)
# Auto-add +notify to tasks with due dates or remind tags
task status:pending '( due.any: or tags.has:remindMins or tags.has:remindHours or tags.has:remindDays or tags.has:remindWeeks or tags.has:remindMonths )' -notify export 2>/dev/null | \
/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.[].uuid' 2>/dev/null | \
while read -r uuid; do
/nix/store/syqlfcifpih00fknzailx8xxn4cnv42d-taskwarrior-3.4.2/bin/task "$uuid" modify +notify 2>/dev/null
done
# Process tasks with +notify
task status:pending +notify export 2>/dev/null | \
/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -c '.[] | select(.due) | {uuid: .uuid, description: .description, due: .due, tags: .tags}' 2>/dev/null | \
while read -r task_json; do
uuid=$(echo "$task_json" | /nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.uuid')
desc=$(echo "$task_json" | /nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.description')
due_date=$(echo "$task_json" | /nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.due')
tags=$(echo "$task_json" | /nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.tags[]? // empty' 2>/dev/null)
# Convert due date (UTC) to epoch
formatted_date=$(echo "$due_date" | /nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin/sed 's/T/ /; s/Z$//; s/^\(....\)\(..\)\(..\)/\1-\2-\3/; s/ \(..\)\(..\)\(..\)$/ \1:\2:\3/')
due_epoch=$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/date -d "$formatted_date UTC" +%s 2>/dev/null || echo 0)
if [ "$due_epoch" = "0" ]; then
continue
fi
time_until_due=$((due_epoch - NOW))
# Check reminder tags
echo "$tags" | /nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin/grep -E '^remind(Mins|Hours|Days|Weeks|Months)' 2>/dev/null | \
while read -r remind_tag; do
# Parse: remindMins2, remindHours1, etc
if [[ "$remind_tag" =~ ^remind(Mins|Hours|Days|Weeks|Months)([0-9]+)$ ]]; then
unit="${BASH_REMATCH[1]}"
num="${BASH_REMATCH[2]}"
# Convert to seconds
case "$unit" in
Mins) remind_secs=$((num * 60)); time_str="$num minutes" ;;
Hours) remind_secs=$((num * 3600)); time_str="$num hours" ;;
Days) remind_secs=$((num * 86400)); time_str="$num days" ;;
Weeks) remind_secs=$((num * 604800)); time_str="$num weeks" ;;
Months) remind_secs=$((num * 2592000)); time_str="$num months" ;;
esac
# SIMPLE: If time until due <= reminder time AND still in future, send it
if [ $time_until_due -le $remind_secs ] && [ $time_until_due -gt 0 ]; then
/nix/store/xgdl4gzjzwj7ixs83f17sqppd08lfd03-libnotify-0.8.7/bin/notify-send -u normal "Reminder" "🔔 $desc - Due in $time_str"
/nix/store/jqfr3p49g3lch84y45jfzw9fshlv8jyp-curl-8.17.0-bin/bin/curl -s -d "Reminder: $desc - Due in $time_str" "$NTFY_URL" >/dev/null 2>&1 &
/nix/store/syqlfcifpih00fknzailx8xxn4cnv42d-taskwarrior-3.4.2/bin/task "$uuid" modify -"$remind_tag" 2>/dev/null
fi
fi
done
# Check if task is due (overdue)
if [ $time_until_due -le 0 ] && ! echo "$tags" | /nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin/grep -q "^notified$"; then
/nix/store/xgdl4gzjzwj7ixs83f17sqppd08lfd03-libnotify-0.8.7/bin/notify-send -u critical "Task Due" "⚠️ $desc"
/nix/store/jqfr3p49g3lch84y45jfzw9fshlv8jyp-curl-8.17.0-bin/bin/curl -s -d "Task due: $desc" "$NTFY_URL" >/dev/null 2>&1 &
/nix/store/syqlfcifpih00fknzailx8xxn4cnv42d-taskwarrior-3.4.2/bin/task "$uuid" modify +notified 2>/dev/null
fi
done
# Cleanup: Remove notification tags from completed/deleted tasks
task '( status:completed or status:deleted )' '( +notify or +notified or tags.has:remindMins or tags.has:remindHours or tags.has:remindDays or tags.has:remindWeeks or tags.has:remindMonths )' export 2>/dev/null | \
/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.[].uuid' 2>/dev/null | \
while read -r uuid; do
tags=$(/nix/store/syqlfcifpih00fknzailx8xxn4cnv42d-taskwarrior-3.4.2/bin/task "$uuid" export 2>/dev/null | /nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin/bin/jq -r '.[0].tags[]? // empty' 2>/dev/null)
remove_args=""
echo "$tags" | /nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin/grep -q "^notify$" && remove_args="$remove_args -notify"
echo "$tags" | /nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin/grep -q "^notified$" && remove_args="$remove_args -notified"
remind_tags=$(echo "$tags" | /nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin/grep "^remind(Mins|Hours|Days|Weeks|Months)" 2>/dev/null || true)
if [ -n "$remind_tags" ]; then
while read -r tag; do
remove_args="$remove_args -$tag"
done <<< "$remind_tags"
fi
if [ -n "$remove_args" ]; then
/nix/store/syqlfcifpih00fknzailx8xxn4cnv42d-taskwarrior-3.4.2/bin/task "$uuid" modify $remove_args 2>/dev/null
fi
done

View File

View File

@@ -76,8 +76,17 @@ input {
// https://yalter.github.io/niri/Configuration:-Outputs // https://yalter.github.io/niri/Configuration:-Outputs
// Remember to uncomment the node by removing "/-"! // Remember to uncomment the node by removing "/-"!
// input {
// "*" allow
// }
// output {
// "*" allow
// }
environment {
MOZ_DBUS_REMOTE "1"
}
output "DP-6" { mode "1680x1050@60"; position x=0 y=230; } output "DP-6" { mode "1680x1050@60"; position x=0 y=230; }
output "DP-7" { mode "1680x1050@60"; position x=1680 y=0; transform "90"; } output "DP-7" { mode "1680x1050@60"; position x=1680 y=0; transform "90"; }
@@ -121,7 +130,7 @@ layout {
// preset-window-heights { } // preset-window-heights { }
// You can change the default width of the new windows. // You can change the default width of the new windows.
default-column-width { proportion 0.5; } default-column-width { proportion 1.0; }
// If you leave the brackets empty, the windows themselves will decide their initial width. // If you leave the brackets empty, the windows themselves will decide their initial width.
// default-column-width {} // default-column-width {}
@@ -252,7 +261,58 @@ layout {
// This line starts waybar, a commonly used bar for Wayland compositors. // This line starts waybar, a commonly used bar for Wayland compositors.
spawn-at-startup "/run/current-system/sw/bin/waybar" spawn-at-startup "/run/current-system/sw/bin/waybar"
spawn-at-startup "kitty"
// DP-6 (2 kitty)
spawn-at-startup "kitty" "--directory" "/home/sam/organizer" "--app-id" "kitty-organizer"
spawn-at-startup "kitty" "--directory" "/etc/nixos" "--app-id" "kitt-yazi"
// spawn-sh-at-startup "swaybg -i /home/sam/Downloads/wph-1.jpg -m fill -o DP-6 > /tmp/swaybg-dp6.log 2>&1 &"
// spawn-sh-at-startup "sleep 1 && swaybg -i /home/sam/Downloads/wpv-1.jpg -m fill -o DP-7 > /tmp/swaybg-dp7.log 2>&1 &"
// spawn-sh-at-startup "sleep 2 && swaybg -i /home/sam/Downloads/wph-2.jpg -m fill -o DP-4 > /tmp/swaybg-dp4.log 2>&1 &"
// spawn-sh-at-startup "sleep 3 && swaybg -i /home/sam/Downloads/wpv-2.jpg -m fill -o DP-5 > /tmp/swaybg-dp5.log 2>&1 &"
spawn-sh-at-startup "swww-daemon"
spawn-sh-at-startup "sleep 1 && swww img -o DP-6 /home/sam/Downloads/wph-1.jpg"
spawn-sh-at-startup "swww img -o DP-7 /home/sam/Downloads/wpv-1.jpg"
spawn-sh-at-startup "swww img -o DP-4 /home/sam/Downloads/wph-2.jpg"
spawn-sh-at-startup "swww img -o DP-5 /home/sam/Downloads/wpv-2.jpg"
spawn-sh-at-startup "swayimg --fullscreen --class cs-vim /home/sam/Downloads/vim.png &"
spawn-sh-at-startup "swayimg --fullscreen --class cs-tmux /home/sam/Downloads/tmux.png &"
// DP-7
// spawn-at-startup "env" "MOZ_DBUS_REMOTE=1" "firefox" "--new-instance" "--name" "ff-dp7-x" "--new-window" "https://x.com/"
// spawn-sh-at-startup "sleep 2 && MOZ_DBUS_REMOTE=1 firefox --name ff-dp7-youtube --new-window https://www.youtube.com/"
// // DP-4
// spawn-sh-at-startup "sleep 2 && MOZ_DBUS_REMOTE=1 firefox --name ff-dp4-gitea --new-window https://gitea.lab.audasmedia.com.au/"
// spawn-sh-at-startup "sleep 2 && MOZ_DBUS_REMOTE=1 firefox --name ff-dp4-t3 --new-window https://t3.chat/"
// spawn-sh-at-startup "sleep 2 && MOZ_DBUS_REMOTE=1 firefox --name ff-dp4-grok --new-window https://grok.com/"
// spawn-sh-at-startup "sleep 2 && MOZ_DBUS_REMOTE=1 firefox --name ff-dp4-gemini --new-window https://gemini.google.com/"
// All Firefox instances — separate processes, same profile, unique app-ids
spawn-sh-at-startup "env MOZ_DBUS_REMOTE=1 firefox -no-remote --name ff-dp7-x --new-window https://x.com/"
spawn-sh-at-startup "sleep 1.5 && env MOZ_DBUS_REMOTE=1 firefox -no-remote --name ff-dp7-youtube --new-window https://www.youtube.com/"
spawn-sh-at-startup "sleep 3 && google-chrome --profile-directory=Default -no-default-browser-check --new-window --app=https://gitea.lab.audasmedia.com.au/"
spawn-sh-at-startup "sleep 4.5 && google-chrome --profile-directory=Default --app=https://t3.chat/"
spawn-sh-at-startup "sleep 6 && google-chrome --profile-directory=Default --app=https://grok.com/"
spawn-sh-at-startup "sleep 7.5 && google-chrome --profile-directory=Default --app=https://gemini.google.com/"
// DP-5 (kitty + thunar)
spawn-at-startup "kitty" "--directory" "/etc/nixos" "--app-id" "kitty-terminal"
spawn-at-startup "thunar" "/home/sam" "--name" "thunar"
//spawn-at-startup "kitty"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: // To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" // spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
@@ -293,6 +353,97 @@ animations {
// Work around WezTerm's initial configure bug // Work around WezTerm's initial configure bug
// by setting an empty default-column-width. // by setting an empty default-column-width.
window-rule {
match app-id="cs-vim" // or match title=".*keycodes.*" if no class set
open-on-output "DP-4"
open-floating true
open-fullscreen true
// optional: no focus ring, etc.
focus-ring { off; }
}
window-rule {
match app-id="cs-tmux" // or match title=".*keycodes.*" if no class set
open-on-output "DP-6"
open-floating true
open-fullscreen true
// optional: no focus ring, etc.
focus-ring { off; }
}
window-rule {
match at-startup=true app-id="kitty-organizer"
open-on-output "DP-6"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true app-id="kitty-yazi"
open-on-output "DP-6"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true app-id="ff-dp7-x"
open-on-output "DP-7"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true app-id="ff-dp7-youtube"
open-on-output "DP-7"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true title="(?i)gitea"
open-on-output "DP-4"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true title="(?i)t3"
open-on-output "DP-4"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true title="(?i)grok"
open-on-output "DP-4"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true title="(?i)gemini"
open-on-output "DP-4"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true app-id="kitty-terminal"
open-on-output "DP-5"
default-column-width { proportion 1.0; }
}
window-rule {
match at-startup=true app-id="thunar"
open-on-output "DP-5"
default-column-width { proportion 1.0; }
}
window-rule { window-rule {
// This regular expression is intentionally made as specific as possible, // This regular expression is intentionally made as specific as possible,
// since this is the default config, and we want no false positives. // since this is the default config, and we want no false positives.
@@ -604,4 +755,6 @@ binds {
// Powers off the monitors. To turn them back on, do any input like // Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key. // moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; } Mod+Shift+P { power-off-monitors; }
Mod+N { spawn "swaync-client" "-t"; }
} }

View File

@@ -0,0 +1,56 @@
symbols:
# --- US Risk Appetite ---
- ^GSPC # S&P 500
- ^IXIC # Nasdaq
- VIXY # VIX ETF proxy (more stable than ^VIX)
# --- US Rates ---
- ^TNX # 10Y yield
# - ^FVX # 5Y yield
# - ^IRX # 13-week bill
# --- Dollar / FX ---
- DX-Y.NYB # Dollar Index
- EURUSD=X
- USDJPY=X
- AUDUSD=X
# - USDCNH=X # China yuan offshore
# - GBPUSD=X
# --- Commodities (Global Growth Signal) ---
- GC=F # Gold
- SI=F # Silver
- HG=F # Copper
- CL=F # Oil
# - NG=F # Natural Gas
# - ZC=F # Corn
# - KE=F # Wheat
# --- China ---
- 000001.SS # Shanghai
- ^HSI # Hang Seng
# - 399001.SZ # Shenzhen
# --- Australia (Trade Proxy) ---
- ^AXJO
- BHP.AX
- RIO.AX
- FMG.AX
# - NST.AX # Gold miner
# - CBA.AX
# --- US Tech Leadership ---
- AAPL
- MSFT
- NVDA
# - AMZN
# - META
# - TSLA
chart_type: line
time_frame: 1M
update_interval: 900
enable_pre_post: false
summary: true

View File

@@ -6,6 +6,8 @@
"modules-left": ["niri/workspaces"], "modules-left": ["niri/workspaces"],
"modules-center": ["niri/window"], "modules-center": ["niri/window"],
"modules-right": [ "modules-right": [
"custom/tasks", // <-- ADD THIS LINE
"custom/notification", // <-- ADD THIS
"keyboard-state", "keyboard-state",
"cpu", "cpu",
"memory", "memory",
@@ -15,23 +17,60 @@
"clock" "clock"
], ],
"clock": { "format": "{:%a %d %b %H:%M}" }, "tray": {
"icon-size": 20,
"spacing": 8
},
"cpu": { "format": " {usage}%" },
"memory": { "format": "󰍛 {percentage}%" },
"network": { "clock": {
"format-wifi": " {signalStrength}%", "format": "󰥔 {:%a %d %b %H:%M}",
"format-ethernet": "󰈀", "on-click": "niri msg action spawn -- gnome-calendar",
"format-disconnected": "󰖪" "tooltip": true,
}, "tooltip-format": "{:%Y-%m-%d %H:%M:%S}"
},
"pulseaudio": {
"format": " {volume}%", "cpu": {
"format-muted": "󰖁" "format": " {usage}%",
"on-click": "niri msg action spawn -- kitty -e btop",
"tooltip": true
},
"memory": {
"format": "󰍛 {percentage}%",
"on-click": "niri msg action spawn -- kitty -e btop",
"tooltip": true
},
"network": {
"format-wifi": "󰤨 {signalStrength}%",
"format-ethernet": "󰈀 Wired",
"format-disconnected": "󰖪 Offline",
"on-click": "nm-connection-editor",
"on-click-right": "nmcli networking toggle",
"tooltip": true,
"tooltip-format": "{essid}\nLeft-click: Network settings\nRight-click: Toggle networking"
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": "󰖁 Muted",
"format-icons": {
"default": ["󰕿", "󰖀", "󰕾"],
"headphone": "󰋋",
"headset": "󰋎"
}, },
"on-click": "pavucontrol",
"on-click-right": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+ -l 1.0",
"on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-",
"tooltip": true,
"tooltip-format": "{icon} {volume}%\nLeft-click: Mixer\nRight-click: Toggle mute\nScroll: Adjust volume"
},
"keyboard-state": { "keyboard-state": {
"device": "/dev/input/event*",
"numlock": true, "numlock": true,
"capslock": true, "capslock": true,
"format": "{name} {icon}", "format": "{name} {icon}",
@@ -39,5 +78,41 @@
"locked": "", "locked": "",
"unlocked": "" "unlocked": ""
} }
} },
"custom/tasks": {
"format": "{icon} {text}",
"format-icons": ["", ""],
"interval": 30,
"exec": "task status:pending count",
"exec-if": "which task",
"on-click": "niri msg action spawn -- kitty -e taskwarrior-tui",
"on-click-right": "niri msg action spawn -- kitty -e task add",
"tooltip": true,
"tooltip-format": "{} pending tasks\nLeft-click: Open TUI\nRight-click: Add task",
"min-length": 3,
"max-length": 20
},
"custom/notification": {
"tooltip": false,
"format": "{icon}",
"format-icons": {
"notification": "󰂚<span foreground='red'><sup></sup></span>",
"none": "󰂚",
"dnd-notification": "󰂛<span foreground='red'><sup></sup></span>",
"dnd-none": "󰂛"
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"escape": true
}
} }

View File

@@ -1,11 +1,11 @@
export PATH="$HOME/.cargo/bin:$HOME/.atuin/bin:$HOME/.local/bin:$HOME/.fzf/bin:$PATH" export PATH="$HOME/.cargo/bin:$HOME/.atuin/bin:$HOME/.local/bin:$HOME/.fzf/bin:$PATH"
#
export OPENAI_API_KEY="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" # export OPENAI_API_KEY="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"
#
export TAVILY_API_KEY="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" # export TAVILY_API_KEY="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"
#
#export GEMINI_API_KEY="AIzaSyAoCOjfPH3HigI6aFFAmg9eVhaHMimM7ak" # #export GEMINI_API_KEY="AIzaSyAoCOjfPH3HigI6aFFAmg9eVhaHMimM7ak"
export DEEPSEEK_API_KEY="sk-26c66e4dd5b34017bd66f7aef748c625" # export DEEPSEEK_API_KEY="sk-26c66e4dd5b34017bd66f7aef748c625"
@@ -13,6 +13,10 @@ export EDITOR="nvim"
export VISUAL="nvim" export VISUAL="nvim"
export TICKER_WATCH="^GSPC,^DJI,^IXIC,^AXJO,^AORD,CBA.AX,NAB.AX,WBC.AX,ANZ.AX,BHP.AX,RIO.AX,FMG.AX,NST.AX,^VIX,CL=F,NG=F,ZC=F,KE=F,^TNX,BDRY,BTC-USD,DX-Y.NYB,000001.SS,399001.SZ,^HSI,TIO=F,EURUSD=X,AUDUSD=X,GC=F,SI=F,AAPL,MSFT,GOOG,NVDA,AMZN,META,TSLA"
export TICKER_REFRESH=120 # Refresh rate in seconds
# This must be at the top for Powerlevel10k Instant Prompt to work. # This must be at the top for Powerlevel10k Instant Prompt to work.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
@@ -93,3 +97,9 @@ export PATH=/home/sam/.opencode/bin:$PATH
export NVM_DIR="$HOME/.nvm" export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
if [ -f "$HOME/.config/environment.d/10-secrets.conf" ]; then
set -a
source "$HOME/.config/environment.d/10-secrets.conf"
set +a
fi

View File

@@ -2,7 +2,11 @@
{ {
xdg.configFile."tickrs/config.yml".source =
./config/tickrs/config.yml;
xdg.configFile."apprise/apprise.yml".source =
./config/apprise/apprise.yml;
xdg.configFile."nvim/init.lua".source = ./nvim/init.lua; xdg.configFile."nvim/init.lua".source = ./nvim/init.lua;
xdg.configFile."nvim/lua".source = ./nvim/lua; xdg.configFile."nvim/lua".source = ./nvim/lua;
@@ -24,6 +28,160 @@ home.homeDirectory = "/home/sam";
home.stateVersion = "25.11"; home.stateVersion = "25.11";
services.swaync = {
enable = true;
settings = {
positionX = "right";
positionY = "top";
control-center-margin-top = 10;
control-center-margin-right = 10;
control-center-width = 380;
notification-window-width = 400;
notification-icon-size = 64;
notification-body-image-height = 100;
notification-body-image-width = 200;
timeout = 10;
timeout-low = 5;
timeout-critical = 0;
widgets = [
"notifications"
"mpris"
"volume"
"backlight"
"buttons-grid"
];
"widget-config" = {
notifications = {
"hide-on-clear" = false;
"hide-on-action" = true;
};
mpris = {
"image-size" = 96;
"image-radius" = 12;
};
volume = {
label = "󰕾";
};
backlight = {
label = "󰃞";
};
"buttons-grid" = {
actions = [
{
label = "󰐥";
command = "systemctl poweroff";
}
{
label = "󰜉";
command = "systemctl reboot";
}
{
label = "󰍁";
command = "swaylock";
}
];
};
};
};
};
# services.mako = {
# enable = true;
#
# # Essential Wayland integration
# layer = "overlay"; # Required for Niri
# output = ""; # Shows on all outputs
#
# # Design (matches your Dunst preferences)
# font = "JetBrainsMono Nerd Font 10";
# backgroundColor = "#1e1e2e";
# borderColor = "#89b4fa";
# borderSize = 2;
# borderRadius = 5;
#
# # Positioning
# anchor = "top-right";
# margin = "30,30"; # X,Y from anchor
# width = 300;
# height = 200;
#
# # Behavior
# defaultTimeout = 10000; # ms
# sort = "-time"; # Newest on top-right
#
# settings = {
# "[urgency=high]" = {
# background-color = "#f38ba8";
# default-timeout = 0;
# };
# };
# };
# Deploy the script to ~/.local/bin (Nix handles creation/permissions)
home.file.".local/bin/task-due-notify" = {
source = ./bin/task-due-notify.sh;
executable = true;
};
systemd.user.timers.task-due-notify = {
Unit = {
Description = "Timer for Taskwarrior due notifications";
};
Timer = {
OnBootSec = "1min";
OnCalendar = "*:*:0/1"; # Every 5 minutes
Persistent = true;
};
Install = {
WantedBy = ["timers.target"];
};
};
# systemd.user.services.task-due-notify = {
# Unit = {
# Description = "Check for due Taskwarrior tasks and notify";
# };
# Service = {
# Type = "oneshot";
# ExecStart = "${pkgs.bash}/bin/bash${config.home.homeDirectory}/.local/bin/task-due-notify";
# };
# };
# Systemd user timer to run the service periodically
# systemd.user.timers.task-due-notify = {
# Unit = {
# Description = "Timer for Taskwarrior due notifications";
# };
# Timer = {
# OnBootSec = "1min";
# OnUnitActiveSec = "1min";
# AccuracySec = "30s";
# Persistent = true;
# };
# Install = {
# WantedBy = ["timers.target"];
# };
# };
systemd.user.services.task-due-notify = {
Unit = {
Description = "Check for due Taskwarrior tasks and notify";
};
Service = {
Type = "oneshot";
ExecStart = "${pkgs.bash}/bin/bash ${config.home.homeDirectory}/.local/bin/task-due-notify";
Environment = [
"PATH=${pkgs.gnugrep}/bin:${pkgs.gnused}/bin:${pkgs.coreutils}/bin:${pkgs.taskwarrior3}/bin:${pkgs.jq}/bin:${pkgs.curl}/bin:${pkgs.libnotify}/bin:/usr/bin:/bin"
"DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"
];
};
};
systemd.user.services.kdeconnect-indicator = { systemd.user.services.kdeconnect-indicator = {
Unit = { Unit = {
Description = "KDE Connect indicator"; Description = "KDE Connect indicator";
@@ -135,10 +293,101 @@ dconf.settings."org/gnome/desktop/interface" = {
extraPackages = with pkgs; [ tree-sitter gcc gnumake]; extraPackages = with pkgs; [ tree-sitter gcc gnumake];
}; };
programs.yazi = {
enable = true;
enableZshIntegration = true;
enableBashIntegration = true;
# This sets the command name for the wrapper.
# Many people use 'y' or 'yy' for quick access.
shellWrapperName = "y";
};
home.sessionVariables = {
QT_QPA_PLATFORM = "wayland";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
};
gtk = {
enable = true;
theme = {
name = "Adwaita-dark";
package = pkgs.gnome-themes-extra;
};
iconTheme = {
name = "breeze-dark";
package = pkgs.kdePackages.breeze-icons;
};
};
qt = {
enable = true;
platformTheme.name = "gtk3";
style.name = "adwaita-dark";
};
# --- # ---
# Packages (NOW list + a few safe essentials) # Packages (NOW list + a few safe essentials)
# --- # ---
home.packages = with pkgs; [ home.packages = with pkgs; [
# Input device support
libinput
seatd
# Audio controls
pamixer
playerctl
# Network
networkmanagerapplet
# System Monitoring
swaynotificationcenter # For notification daemon
libnotify
kdePackages.dolphin
kdePackages.kio-extras
kdePackages.kdegraphics-thumbnailers
kdePackages.ffmpegthumbs
kdePackages.ark
adwaita-qt
adwaita-qt6
kdePackages.breeze-icons
nushell
bun
pnpm
vite
# CLI tools
# python3Packages.autogpt
# agentops
(callPackage ../../pkgs/cao-cli.nix { })
ollama
tickrs
taskwarrior3
taskwarrior-tui
glow
pandoc
texlive.combined.scheme-small
swaybg
zathura
zathuraPkgs.zathura_pdf_mupdf
swayimg
qimgv
tmux tmux
vorta vorta
borgbackup borgbackup
@@ -160,18 +409,20 @@ dconf.settings."org/gnome/desktop/interface" = {
git git
curl curl
wget wget
tgpt
eza eza
bat bat
ripgrep ripgrep
fd fd
ticker
btop btop
lazygit lazygit
zellij zellij
tealdeer tealdeer
navi navi
yazi # yazi
dua dua
jq jq

View File

@@ -49,6 +49,7 @@ home-manager.backupFileExtension = "hm-bak";
# Networking # Networking
# --- # ---
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
networking.interfaces.enp0s31f6.wakeOnLan.enable = true;
# Static IP policy: # Static IP policy:
# - Static IP must be on Wi-Fi SSID "Aussie Broadband 8729" # - Static IP must be on Wi-Fi SSID "Aussie Broadband 8729"
@@ -122,6 +123,16 @@ home-manager.backupFileExtension = "hm-bak";
# --- # ---
users.users.sam.openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3yxLtvBY6ClGliUfKA6eJLwUoCmagT5aZTrMsJnguUIch5lmdIGqz8gbGoy9ADEBaUpSA9nQsZZaXQE34t4xEqAzqra7hYogHR2uT6bIoML0ZWPiiMvSHOtknKcnfK/MBBPKjGYJSMhy2nzP02ORZs9D+DlfV8nVknsJa/G5jkgJXpA4za0bhxIZWJE7DPFF/utfSjxs6AB2wOzjfLPeuqSyUVq8nze+b1zf8baMBYVNxxpbHCyEXCvpuoxDw3JVk5Ha+hYyWb7563cCSeakrGM3f5048pFdPRGdbi4qcNsQV1KCBEd939VsOSNcY7Yr69zjnWzZNDCRBWxzlu+3DNY8I7ukHzxR78FPAQ6eCDR4druwIiGqlo5CE6S4P1h0uqKH2RW75qXoLb/orlwHKnAi3YOxDvELTQnxnLVgp6ahRpRu7ZqtLfJfwMLVcjTaExm8Yo4fLTJMgNv7U4bY/yRgenRzzRKHwL+kR/+SfY6KOH+8X0Jf0J653d9Z3VcVrXgo8r4vv6wx8CE605AfgQAsK9RN0cmtaDgd5GaXs3BOWMz+IeeiauSF2EXvPK5BsnvnZbBfATgpqsfi+iShoIDJ0+6mbwFqbczc17Ss9Z0mkSZyg3fsQHpWo9UFBNq5Jic1UGcjUKcvvZaB6/5bPvc6dVL/JKGcj0xqogr1paQ== root@core-ssh"
];
services.ollama.enable = true;
services.udisks2.enable = true;
services.dbus.enable = true;
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
services.gvfs.enable = true; services.gvfs.enable = true;
services.tumbler.enable = true; services.tumbler.enable = true;
@@ -176,6 +187,18 @@ PermitRootLogin = "no";
# especially in minimal Wayland sessions. # especially in minimal Wayland sessions.
security.polkit.enable = true; security.polkit.enable = true;
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.suspend" &&
subject.user == "sam") {
return polkit.Result.YES;
}
});
'';
# --- # ---
# Firmware / microcode (stability) # Firmware / microcode (stability)
# --- # ---
@@ -220,18 +243,48 @@ PermitRootLogin = "no";
# fsType = "ext4"; # fsType = "ext4";
# options = [ "nofail" "x-systemd.device-timeout=1s" ]; # options = [ "nofail" "x-systemd.device-timeout=1s" ];
# }; # };
fileSystems."/mnt/integral300" = {
device = "/dev/disk/by-uuid/27febd74-20aa-4a3a-92c1-6fdd1ad7e88e";
fsType = "ext4"; systemd.services.wake-on-lan-resume = {
options = [ description = "Re-enable Wake-on-LAN after resume";
"nofail" wantedBy = [ "post-resume.target" ];
"noauto" after = [ "post-resume.target" ];
"x-systemd.automount" serviceConfig = {
"x-systemd.idle-timeout=60" Type = "oneshot";
"x-systemd.device-timeout=30s" ExecStart = "${pkgs.ethtool}/bin/ethtool -s enp0s31f6 wol g";
]; };
}; };
# Allow sam to suspend without password (for Home Assistant WOL)
security.sudo.extraRules = [
{
users = [ "sam" ];
commands = [
{
command = "${pkgs.systemd}/bin/systemctl suspend";
options = [ "NOPASSWD" ];
}
];
}
];
# This was the integral drive that died.
# fileSystems."/mnt/integral300" = {
# device = "/dev/disk/by-uuid/27febd74-20aa-4a3a-92c1-6fdd1ad7e88e";
# fsType = "ext4";
# options = [
# "nofail"
# "noauto"
# "x-systemd.automount"
# "x-systemd.idle-timeout=60"
# "x-systemd.device-timeout=30s"
# ];
# };
fileSystems."/mnt/backup" = { fileSystems."/mnt/backup" = {
device = "/dev/disk/by-uuid/0806B92006B90FA4"; device = "/dev/disk/by-uuid/0806B92006B90FA4";
fsType = "ntfs3"; fsType = "ntfs3";
@@ -315,6 +368,7 @@ systemd.tmpfiles.rules = lib.mkAfter [
extraPortals = [ extraPortals = [
pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-wlr pkgs.xdg-desktop-portal-wlr
pkgs.kdePackages.xdg-desktop-portal-kde
]; ];
}; };
@@ -327,12 +381,24 @@ fonts.packages = with pkgs; [
# Minimal system packages needed for the session and core usability # Minimal system packages needed for the session and core usability
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
ethtool
swww
uv uv
(pkgs.callPackage ../../pkgs/agentpipe.nix { }) (pkgs.callPackage ../../pkgs/agentpipe.nix { })
(pkgs.callPackage ../../pkgs/sidecar-bin.nix { }) (pkgs.callPackage ../../pkgs/sidecar-bin.nix { })
xfce.thunar xfce.thunar
xfce.tumbler xfce.tumbler
ffmpegthumbnailer ffmpegthumbnailer
# Optional: ensure Qt apps look okay in Niri
kdePackages.qtwayland
kdePackages.qtsvg
poppler-utils poppler-utils
kdePackages.kdeconnect-kde kdePackages.kdeconnect-kde
tmux tmux
@@ -351,7 +417,6 @@ fonts.packages = with pkgs; [
spotify spotify
vlc vlc
telegram-desktop telegram-desktop
flameshot
waybar waybar
firefox firefox
google-chrome google-chrome
@@ -364,6 +429,11 @@ fonts.packages = with pkgs; [
grim grim
slurp slurp
]; ];
services.tailscale.enable = true; services.tailscale.enable = true;
# --- # ---
# NVIDIA (simple, first-boot stable config; PRIME tuning later) # NVIDIA (simple, first-boot stable config; PRIME tuning later)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,808 +0,0 @@
sam-4screen-desktop
description: Desktop Computer
product: Precision Tower 3620 (06B7)
vendor: Dell Inc.
serial: GJD72K2
width: 64 bits
capabilities: smbios-3.0.0 dmi-3.0.0 smp vsyscall32
configuration: boot=normal chassis=desktop family=Precision sku=06B7 uuid=4c4c4544-004a-4410-8037-c7c04f324b32
*-core
description: Motherboard
product: 0MWYPT
vendor: Dell Inc.
physical id: 0
version: A01
serial: /GJD72K2/CNFCW0077E00CW/
*-firmware
description: BIOS
vendor: Dell Inc.
physical id: 0
version: 2.30.0
date: 04/08/2024
size: 64KiB
capacity: 16MiB
capabilities: pci pnp upgrade shadowing cdboot bootselect edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer acpi usb biosbootspecification netboot uefi
*-memory
description: System Memory
physical id: 9
slot: System board or motherboard
size: 64GiB
*-bank:0
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2133 MHz (0.5 ns)
product: M378A2K43BB1-CPB
vendor: Samsung
physical id: 0
serial: 9722AFF3
slot: DIMM1
size: 16GiB
width: 64 bits
clock: 2133MHz (0.5ns)
*-bank:1
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2133 MHz (0.5 ns)
product: M378A2K43BB1-CPB
vendor: Samsung
physical id: 1
serial: 9722B079
slot: DIMM2
size: 16GiB
width: 64 bits
clock: 2133MHz (0.5ns)
*-bank:2
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2133 MHz (0.5 ns)
product: M378A2K43BB1-CPB
vendor: Samsung
physical id: 2
serial: 9722B071
slot: DIMM3
size: 16GiB
width: 64 bits
clock: 2133MHz (0.5ns)
*-bank:3
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2133 MHz (0.5 ns)
product: M378A2K43BB1-CPB
vendor: Samsung
physical id: 3
serial: 9722B070
slot: DIMM4
size: 16GiB
width: 64 bits
clock: 2133MHz (0.5ns)
*-cache:0
description: L1 cache
physical id: f
slot: L1 Cache
size: 256KiB
capacity: 256KiB
capabilities: synchronous internal write-back unified
configuration: level=1
*-cache:1
description: L2 cache
physical id: 10
slot: L2 Cache
size: 1MiB
capacity: 1MiB
capabilities: synchronous internal write-back unified
configuration: level=2
*-cache:2
description: L3 cache
physical id: 11
slot: L3 Cache
size: 8MiB
capacity: 8MiB
capabilities: synchronous internal write-back unified
configuration: level=3
*-cpu
description: CPU
product: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz
vendor: Intel Corp.
physical id: 12
bus info: cpu@0
version: 6.158.9
serial: To Be Filled By O.E.M.
slot: U3E1
size: 4399MHz
capacity: 4500MHz
width: 64 bits
clock: 100MHz
capabilities: lm fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities cpufreq
configuration: cores=4 enabledcores=4 microcode=248 threads=8
*-pci
description: Host bridge
product: Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
vendor: Intel Corporation
physical id: 100
bus info: pci@0000:00:00.0
version: 05
width: 32 bits
clock: 33MHz
configuration: driver=skl_uncore
resources: irq:0
*-pci:0
description: PCI bridge
product: 6th-10th Gen Core Processor PCIe Controller (x16)
vendor: Intel Corporation
physical id: 1
bus info: pci@0000:00:01.0
version: 05
width: 32 bits
clock: 33MHz
capabilities: pci pm msi pciexpress normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:121 ioport:e000(size=4096) memory:ee000000-ef0fffff ioport:d0000000(size=301989888)
*-display
description: VGA compatible controller
product: GP107GL [Quadro P620]
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:01:00.0
logical name: /dev/fb0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=nvidia latency=0 resolution=1680,1050
resources: irq:145 memory:ee000000-eeffffff memory:d0000000-dfffffff memory:e0000000-e1ffffff ioport:e000(size=128) memory:c0000-dffff
*-multimedia
description: Audio device
product: GP107GL High Definition Audio Controller
vendor: NVIDIA Corporation
physical id: 0.1
bus info: pci@0000:01:00.1
logical name: card0
logical name: /dev/snd/controlC0
logical name: /dev/snd/hwC0D0
logical name: /dev/snd/pcmC0D3p
logical name: /dev/snd/pcmC0D7p
logical name: /dev/snd/pcmC0D8p
logical name: /dev/snd/pcmC0D9p
version: a1
width: 32 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list
configuration: driver=snd_hda_intel latency=0
resources: irq:17 memory:ef080000-ef083fff
*-input:0
product: HDA NVidia HDMI/DP,pcm=3
physical id: 0
logical name: input18
logical name: /dev/input/event14
*-input:1
product: HDA NVidia HDMI/DP,pcm=7
physical id: 1
logical name: input19
logical name: /dev/input/event15
*-input:2
product: HDA NVidia HDMI/DP,pcm=8
physical id: 2
logical name: input20
logical name: /dev/input/event16
*-input:3
product: HDA NVidia HDMI/DP,pcm=9
physical id: 3
logical name: input21
logical name: /dev/input/event17
*-display
description: VGA compatible controller
product: HD Graphics 630
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 04
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list
configuration: driver=i915 latency=0
resources: irq:144 memory:ed000000-edffffff memory:c0000000-cfffffff ioport:f000(size=64)
*-usb
description: USB controller
product: 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller
vendor: Intel Corporation
physical id: 14
bus info: pci@0000:00:14.0
version: 31
width: 64 bits
clock: 33MHz
capabilities: pm msi xhci bus_master cap_list
configuration: driver=xhci_hcd latency=0
resources: irq:124 memory:ef330000-ef33ffff
*-usbhost:0
product: xHCI Host Controller
vendor: Linux 6.14.0-37-generic xhci-hcd
physical id: 0
bus info: usb@1
logical name: usb1
version: 6.14
capabilities: usb-2.00
configuration: driver=hub slots=16 speed=480Mbit/s
*-usb:0
description: Mass storage device
product: Cypress AT2LP
vendor: Cypress Semiconductor Corp.
physical id: 1
bus info: usb@1:1
logical name: scsi5
version: 2.40
serial: DEF10FD70D1E
capabilities: usb-2.00 scsi emulated scsi-host
configuration: driver=ums-cypress maxpower=2mA speed=480Mbit/s
*-disk
description: SCSI Disk
product: 00JB-22KFA0
vendor: WDC WD32
physical id: 0.0.0
bus info: scsi@5:0.0.0
logical name: /dev/sdc
version: 0000
serial: W -D
size: 298GiB (320GB)
capabilities: partitioned partitioned:dos
configuration: logicalsectorsize=512 sectorsize=512 signature=100b218d
*-volume
description: EXT4 volume
vendor: Linux
physical id: 1
bus info: scsi@5:0.0.0,1
logical name: /dev/sdc1
logical name: /media/sam/Integral300
version: 1.0
serial: 27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
size: 298GiB
capacity: 298GiB
capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
configuration: created=2026-01-27 19:20:40 filesystem=ext4 label=Integral300 lastmountpoint=/media/sam/Integral300 modified=2026-01-28 12:50:32 mount.fstype=ext4 mount.options=rw,nosuid,nodev,relatime,errors=remount-ro mounted=2026-01-27 19:29:38 state=mounted
*-usb:1
description: Mass storage device
product: WD5000BEVT-22ZAT
vendor: WDC
physical id: 2
bus info: usb@1:2
logical name: scsi4
version: 3.00
serial: 0010101E40000000
capabilities: usb-2.00 scsi emulated scsi-host
configuration: driver=usb-storage maxpower=2mA speed=480Mbit/s
*-disk
description: SCSI Disk
product: WD5000BEVT-22ZAT
vendor: WDC
physical id: 0.0.0
bus info: scsi@4:0.0.0
logical name: /dev/sdb
version: 3.00
serial: WD-WXNY08ND2684
size: 465GiB (500GB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=4 logicalsectorsize=512 sectorsize=512 signature=1ac8f43c
*-volume
description: EXT4 volume
vendor: Linux
physical id: 1
bus info: scsi@4:0.0.0,1
logical name: /dev/sdb1
version: 1.0
serial: 4f9c4bd5-fea5-408f-9370-731fc095da3f
size: 465GiB
capacity: 465GiB
capabilities: primary journaled extended_attributes large_files huge_files dir_nlink 64bit extents ext4 ext2 initialized
configuration: created=2026-01-27 18:46:14 filesystem=ext4 label=TempBackup modified=2026-01-27 18:46:39 state=clean
*-usb:2
description: Keyboard
product: 2.4G Mouse Consumer Control
vendor: SHARKOON Technologies GmbH
physical id: 7
bus info: usb@1:7
logical name: input10
logical name: /dev/input/event7
logical name: input6
logical name: /dev/input/event3
logical name: input6::capslock
logical name: input6::compose
logical name: input6::kana
logical name: input6::numlock
logical name: input6::scrolllock
logical name: input7
logical name: /dev/input/event4
logical name: input8
logical name: /dev/input/event5
logical name: /dev/input/mouse0
logical name: input9
logical name: /dev/input/event6
version: 2.00
capabilities: usb-1.10 usb
configuration: driver=usbhid maxpower=100mA speed=12Mbit/s
*-usb:3
description: Keyboard
product: umux.com X.Tips V4s Keyboard
vendor: umux.com
physical id: 8
bus info: usb@1:8
logical name: input12
logical name: /dev/input/event8
logical name: input12::capslock
logical name: input12::compose
logical name: input12::kana
logical name: input12::numlock
logical name: input12::scrolllock
logical name: input13
logical name: /dev/input/event9
logical name: /dev/input/mouse1
logical name: input14
logical name: /dev/input/event10
logical name: input15
logical name: /dev/input/event11
logical name: input16
logical name: /dev/input/event12
logical name: input16::capslock
logical name: input16::compose
logical name: input16::kana
logical name: input16::numlock
logical name: input16::scrolllock
version: 0.01
serial: vial:f64c2b3c
capabilities: usb-2.00 usb
configuration: driver=usbhid maxpower=500mA speed=12Mbit/s
*-usb:4
description: Mass storage device
product: USB 2.0 SATA BRIDGE
vendor: Super Top
physical id: a
bus info: usb@1:a
version: 1.40
serial: MA6116VE4018
capabilities: usb-2.00 scsi
configuration: driver=usb-storage maxpower=2mA speed=480Mbit/s
*-usbhost:1
product: xHCI Host Controller
vendor: Linux 6.14.0-37-generic xhci-hcd
physical id: 1
bus info: usb@2
logical name: usb2
version: 6.14
capabilities: usb-3.00
configuration: driver=hub slots=10 speed=5000Mbit/s
*-generic
description: Signal processing controller
product: 100 Series/C230 Series Chipset Family Thermal Subsystem
vendor: Intel Corporation
physical id: 14.2
bus info: pci@0000:00:14.2
version: 31
width: 64 bits
clock: 33MHz
capabilities: pm msi cap_list
configuration: driver=intel_pch_thermal latency=0
resources: irq:18 memory:ef34e000-ef34efff
*-communication
description: Communication controller
product: 100 Series/C230 Series Chipset Family MEI Controller #1
vendor: Intel Corporation
physical id: 16
bus info: pci@0000:00:16.0
version: 31
width: 64 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list
configuration: driver=mei_me latency=0
resources: irq:133 memory:ef34d000-ef34dfff
*-sata
description: SATA controller
product: Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode]
vendor: Intel Corporation
physical id: 17
bus info: pci@0000:00:17.0
logical name: scsi1
logical name: scsi2
version: 31
width: 32 bits
clock: 66MHz
capabilities: sata msi pm ahci_1.0 bus_master cap_list emulated
configuration: driver=ahci latency=0
resources: irq:132 memory:ef348000-ef349fff memory:ef34c000-ef34c0ff ioport:f090(size=8) ioport:f080(size=4) ioport:f060(size=32) memory:ef34b000-ef34b7ff
*-disk
description: ATA Disk
product: Patriot Burst El
physical id: 0
bus info: scsi@1:0.0.0
logical name: /dev/sda
version: 9A0
serial: PBEABBB23090814043
size: 223GiB (240GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=d72b17f4-a649-40ca-935d-cae1eeb1c85d logicalsectorsize=512 sectorsize=512
*-volume:0
description: reserved partition
vendor: Windows
physical id: 1
bus info: scsi@1:0.0.0,1
logical name: /dev/sda1
serial: 38c6b6b3-fdb2-4d43-ba15-9c275fbec985
capacity: 15MiB
capabilities: nofs
configuration: name=Microsoft reserved partition
*-volume:1
description: Windows NTFS volume
vendor: Windows
physical id: 2
bus info: scsi@1:0.0.0,2
logical name: /dev/sda2
version: 3.1
serial: b6da3c24-6685-8944-8d4a-555b3dd3a023
size: 223GiB
capacity: 223GiB
capabilities: ntfs initialized
configuration: clustersize=4096 created=2024-06-16 15:40:40 filesystem=ntfs label=Back Up name=Basic data partition state=clean
*-cdrom
description: DVD-RAM writer
product: DVD+-RW GHB0N
vendor: HL-DT-ST
physical id: 1
bus info: scsi@2:0.0.0
logical name: /dev/cdrom
logical name: /dev/sr0
version: A1C0
capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
configuration: ansiversion=5 status=nodisc
*-pci:1
description: PCI bridge
product: 100 Series/C230 Series Chipset Family PCI Express Root Port #17
vendor: Intel Corporation
physical id: 1b
bus info: pci@0000:00:1b.0
version: f1
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:122 ioport:d000(size=4096) memory:ef200000-ef2fffff
*-nvme
description: NVMe device
product: PM951 NVMe SAMSUNG 1024GB
vendor: Samsung Electronics Co Ltd
physical id: 0
bus info: pci@0000:02:00.0
logical name: /dev/nvme0
version: BXV77D0Q
serial: S2FZNXAH301424
width: 64 bits
clock: 33MHz
capabilities: nvme pm msi pciexpress msix nvm_express bus_master cap_list
configuration: driver=nvme latency=0 nqn=nqn.2014.08.org.nvmexpress:144d144d S2FZNXAH301424PM951 NVMe SAMSUNG 1024GB state=live
resources: irq:16 memory:ef200000-ef203fff ioport:d000(size=256)
*-namespace:0
description: NVMe disk
physical id: 0
logical name: hwmon1
*-namespace:1
description: NVMe disk
physical id: 2
logical name: /dev/ng0n1
*-namespace:2
description: NVMe disk
physical id: 1
bus info: nvme@0:1
logical name: /dev/nvme0n1
size: 953GiB (1024GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: guid=3c752166-f3f5-4ee6-b50a-b240d0fd272d logicalsectorsize=512 sectorsize=512 wwid=nvme.144d-2020202020205332465a4e584148333031343234-504d393531204e564d652053414d53554e4720313032344742-00000001
*-volume:0
description: Windows FAT volume
vendor: MSDOS5.0
physical id: 1
bus info: nvme@0:1,1
logical name: /dev/nvme0n1p1
logical name: /boot/efi
version: FAT32
serial: 94cc-9da4
size: 95MiB
capacity: 99MiB
capabilities: boot nomount fat initialized
configuration: FATs=2 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro name=EFI system partition state=mounted
*-volume:1
description: reserved partition
vendor: Windows
physical id: 2
bus info: nvme@0:1,2
logical name: /dev/nvme0n1p2
serial: c548d0ae-4d8e-49ba-a9e8-e33d6b9ec973
capacity: 15MiB
capabilities: nofs nomount
configuration: name=Microsoft reserved partition
*-volume:2
description: Windows NTFS volume
vendor: Windows
physical id: 3
bus info: nvme@0:1,3
logical name: /dev/nvme0n1p3
logical name: /media/sam/8294CD2994CD2111
version: 3.1
serial: 2ea3692d-e9bc-c246-b7e4-28159a0c8020
size: 503GiB
capacity: 503GiB
capabilities: ntfs initialized
configuration: clustersize=4096 created=2024-05-18 15:25:31 filesystem=ntfs mount.fstype=fuseblk mount.options=rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096 name=Basic data partition state=mounted
*-volume:3
description: Windows NTFS volume
vendor: Windows
physical id: 4
bus info: nvme@0:1,4
logical name: /dev/nvme0n1p4
version: 3.1
serial: 1aa2-eef1
size: 522MiB
capacity: 529MiB
capabilities: boot precious nomount ntfs initialized
configuration: clustersize=4096 created=2024-05-17 21:30:36 filesystem=ntfs state=clean
*-volume:4
description: EXT4 volume
vendor: Linux
physical id: 5
bus info: nvme@0:1,5
logical name: /dev/nvme0n1p5
logical name: /
version: 1.0
serial: 4e99904c-ce6f-4c3c-898a-e29cfc373489
size: 449GiB
capabilities: journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
configuration: created=2025-06-12 21:59:53 filesystem=ext4 lastmountpoint=/ modified=2026-01-28 12:27:04 mount.fstype=ext4 mount.options=rw,relatime mounted=2026-01-26 18:06:38 state=mounted
*-pci:2
description: PCI bridge
product: 100 Series/C230 Series Chipset Family PCI Express Root Port #1
vendor: Intel Corporation
physical id: 1c
bus info: pci@0000:00:1c.0
version: f1
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:123 memory:ef100000-ef1fffff
*-pci
description: PCI bridge
product: XIO2001 PCI Express-to-PCI Bridge
vendor: Texas Instruments
physical id: 0
bus info: pci@0000:03:00.0
version: 00
width: 32 bits
clock: 33MHz
capabilities: pci pm msi pciexpress normal_decode bus_master cap_list
resources: memory:ef100000-ef1fffff
*-network DISABLED
description: Wireless interface
product: RT3062 Wireless 802.11n 2T/2R
vendor: Ralink corp.
physical id: 2
bus info: pci@0000:04:02.0
logical name: wlp4s2
version: 00
serial: 80:1f:02:4f:18:ae
width: 32 bits
clock: 33MHz
capabilities: pm bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=rt2800pci driverversion=6.14.0-37-generic firmware=0.40 latency=32 link=no maxlatency=4 mingnt=2 multicast=yes wireless=IEEE 802.11
resources: irq:18 memory:ef100000-ef10ffff
*-isa
description: ISA bridge
product: C236 Chipset LPC/eSPI Controller
vendor: Intel Corporation
physical id: 1f
bus info: pci@0000:00:1f.0
version: 31
width: 32 bits
clock: 33MHz
capabilities: isa bus_master
configuration: latency=0
*-pnp00:00
product: PnP device PNP0c02
physical id: 0
capabilities: pnp
configuration: driver=system
*-pnp00:01
product: PnP device PNP0501
physical id: 1
capabilities: pnp
configuration: driver=serial
*-pnp00:02
product: PnP device PNP0303
physical id: 2
capabilities: pnp
configuration: driver=i8042 kbd
*-pnp00:03
product: PnP device PNP0f03
physical id: 3
capabilities: pnp
configuration: driver=i8042 aux
*-pnp00:04
product: PnP device PNP0c02
physical id: 4
capabilities: pnp
configuration: driver=system
*-pnp00:05
product: PnP device PNP0c02
physical id: 5
capabilities: pnp
configuration: driver=system
*-pnp00:06
product: PnP device PNP0b00
physical id: 6
capabilities: pnp
configuration: driver=rtc_cmos
*-pnp00:07
product: PnP device PNP0c02
physical id: 7
capabilities: pnp
configuration: driver=system
*-pnp00:08
product: PnP device PNP0c02
physical id: 8
capabilities: pnp
configuration: driver=system
*-pnp00:09
product: PnP device PNP0c02
physical id: 9
capabilities: pnp
configuration: driver=system
*-pnp00:0a
product: PnP device PNP0c02
physical id: a
capabilities: pnp
configuration: driver=system
*-pnp00:0b
product: PnP device PNP0c31
physical id: b
capabilities: pnp
configuration: driver=tpm_tis
*-memory UNCLAIMED
description: Memory controller
product: 100 Series/C230 Series Chipset Family Power Management Controller
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
version: 31
width: 32 bits
clock: 33MHz (30.3ns)
capabilities: bus_master
configuration: latency=0
resources: memory:ef344000-ef347fff
*-multimedia
description: Audio device
product: 100 Series/C230 Series Chipset Family HD Audio Controller
vendor: Intel Corporation
physical id: 1f.3
bus info: pci@0000:00:1f.3
logical name: card1
logical name: /dev/snd/controlC1
logical name: /dev/snd/hwC1D0
logical name: /dev/snd/hwC1D2
logical name: /dev/snd/pcmC1D0c
logical name: /dev/snd/pcmC1D0p
logical name: /dev/snd/pcmC1D3p
logical name: /dev/snd/pcmC1D7p
logical name: /dev/snd/pcmC1D8p
version: 31
width: 64 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list
configuration: driver=snd_hda_intel latency=32
resources: irq:146 memory:ef340000-ef343fff memory:ef320000-ef32ffff
*-input:0
product: HDA Intel PCH Rear Mic
physical id: 0
logical name: input23
logical name: /dev/input/event19
*-input:1
product: HDA Intel PCH Front Mic
physical id: 1
logical name: input24
logical name: /dev/input/event20
*-input:2
product: HDA Intel PCH Line Out
physical id: 2
logical name: input25
logical name: /dev/input/event21
*-input:3
product: HDA Intel PCH Front Headphone
physical id: 3
logical name: input26
logical name: /dev/input/event22
*-input:4
product: HDA Intel PCH HDMI/DP,pcm=3
physical id: 4
logical name: input27
logical name: /dev/input/event23
*-input:5
product: HDA Intel PCH HDMI/DP,pcm=7
physical id: 5
logical name: input28
logical name: /dev/input/event24
*-input:6
product: HDA Intel PCH HDMI/DP,pcm=8
physical id: 6
logical name: input29
logical name: /dev/input/event25
*-serial
description: SMBus
product: 100 Series/C230 Series Chipset Family SMBus
vendor: Intel Corporation
physical id: 1f.4
bus info: pci@0000:00:1f.4
version: 31
width: 64 bits
clock: 33MHz
configuration: driver=i801_smbus latency=0
resources: irq:16 memory:ef34a000-ef34a0ff ioport:f040(size=32)
*-network
description: Ethernet interface
product: Ethernet Connection (2) I219-LM
vendor: Intel Corporation
physical id: 1f.6
bus info: pci@0000:00:1f.6
logical name: enp0s31f6
version: 31
serial: d8:9e:f3:07:bf:05
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=6.14.0-37-generic duplex=full firmware=0.8-4 ip=192.168.20.27 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:143 memory:ef300000-ef31ffff
*-scsi
physical id: 1
bus info: usb@1:10
logical name: scsi7
capabilities: emulated scsi-host
configuration: driver=usb-storage
*-disk
description: SCSI Disk
product: HTS541616J9SA00
vendor: Hitachi
physical id: 0.0.0
bus info: scsi@7:0.0.0
logical name: /dev/sde
size: 149GiB (160GB)
capabilities: partitioned partitioned:dos
configuration: logicalsectorsize=512 sectorsize=512 signature=13991399
*-volume
description: EXT4 volume
vendor: Linux
physical id: 1
bus info: scsi@7:0.0.0,1
logical name: /dev/sde1
logical name: /media/sam/XPSystemDrive
version: 1.0
serial: 82c994f1-9adb-49e4-ba1e-5b6e5ccbd49b
size: 149GiB
capacity: 149GiB
capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
configuration: created=2026-01-27 20:36:08 filesystem=ext4 label=XPSystemDrive modified=2026-01-27 21:09:30 mount.fstype=ext4 mount.options=rw,nosuid,nodev,relatime,errors=remount-ro mounted=2026-01-27 21:09:30 state=mounted
*-input:0
product: Sleep Button
physical id: 1
logical name: input0
logical name: /dev/input/event0
capabilities: platform
*-input:1
product: Power Button
physical id: 2
logical name: input1
logical name: /dev/input/event1
capabilities: platform
*-input:2
product: Dell WMI hotkeys
physical id: 3
logical name: input17
logical name: /dev/input/event13
capabilities: platform
*-input:3
product: Power Button
physical id: 4
logical name: input2
logical name: /dev/input/event2
capabilities: platform
*-input:4
product: Video Bus
physical id: 5
logical name: input22
logical name: /dev/input/event18
capabilities: platform

View File

@@ -1,144 +0,0 @@
--- Netplan Configuration ---
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml:network:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: version: 2
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: wifis:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: renderer: NetworkManager
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: match:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: name: "wlp4s2"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: addresses:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: - "192.168.20.27/24"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: nameservers:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: addresses:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: - 192.168.20.35
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: - 192.168.20.13
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: dhcp6: true
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: access-points:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: "Aussie Broadband 8729":
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: auth:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: key-management: "psk"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: password: "<REDACTED>"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: networkmanager:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: uuid: "31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: name: "Aussie Broadband 8729"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: passthrough:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: connection.timestamp: "1766738969"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: ipv4.address1: "192.168.20.27/24,192.168.20.1"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: ipv4.method: "manual"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: ipv6.addr-gen-mode: "default"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: ipv6.ip6-privacy: "-1"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: proxy._: ""
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: networkmanager:
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: uuid: "31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4"
/etc/netplan/90-NM-31ac1c6a-4de8-4a3e-929f-aaec5cd53cf4.yaml: name: "Aussie Broadband 8729"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml:network:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: version: 2
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ethernets:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: renderer: NetworkManager
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: match:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: name: "enp0s31f6"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: addresses:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: - "192.168.20.27/24"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: nameservers:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: addresses:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: - 192.168.20.35
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: - 192.168.20.13
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: dhcp6: true
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: mtu: 1500
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: wakeonlan: true
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: networkmanager:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: uuid: "afb4bbc6-fac5-31f5-8cdc-a466b8b74765"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: name: "Wired connection 1"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: passthrough:
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: connection.autoconnect: "false"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: connection.autoconnect-priority: "-999"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: connection.timestamp: "1766741824"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ethernet.wake-on-lan: "64"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ipv4.address1: "192.168.20.27/24,192.168.20.1"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ipv4.method: "manual"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ipv6.addr-gen-mode: "default"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: ipv6.ip6-privacy: "-1"
/etc/netplan/90-NM-afb4bbc6-fac5-31f5-8cdc-a466b8b74765.yaml: proxy._: ""
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml:network:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: version: 2
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: wifis:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: renderer: NetworkManager
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: match:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: name: "wlp4s2"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: dhcp4: true
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: dhcp6: true
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: access-points:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: "NetComm Wireless":
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: auth:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: key-management: "psk"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: password: "<REDACTED>"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: networkmanager:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: uuid: "ecfc8be2-ba84-46e9-89c6-75bcb35cba55"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: name: "NetComm Wireless"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: passthrough:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: connection.timestamp: "1769032320"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: wifi-security.auth-alg: "open"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: ipv6.addr-gen-mode: "default"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: ipv6.ip6-privacy: "-1"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: proxy._: ""
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: networkmanager:
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: uuid: "ecfc8be2-ba84-46e9-89c6-75bcb35cba55"
/etc/netplan/90-NM-ecfc8be2-ba84-46e9-89c6-75bcb35cba55.yaml: name: "NetComm Wireless"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml:network:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: version: 2
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: wifis:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: NM-bf81f458-5456-4645-b6c4-0662760765ed:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: renderer: NetworkManager
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: match:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: name: "wlp4s2"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: dhcp4: true
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: dhcp6: true
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: access-points:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: "Sams Pixel 8a":
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: auth:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: key-management: "psk"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: password: "<REDACTED>"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: networkmanager:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: uuid: "bf81f458-5456-4645-b6c4-0662760765ed"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: name: "Sams Pixel 8a"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: passthrough:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: wifi-security.auth-alg: "open"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: ipv6.addr-gen-mode: "default"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: ipv6.ip6-privacy: "-1"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: proxy._: ""
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: networkmanager:
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: uuid: "bf81f458-5456-4645-b6c4-0662760765ed"
/etc/netplan/90-NM-bf81f458-5456-4645-b6c4-0662760765ed.yaml: name: "Sams Pixel 8a"
\n--- Current IP Configuration ---
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d8:9e:f3:07:bf:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.27/24 brd 192.168.20.255 scope global noprefixroute enp0s31f6
valid_lft forever preferred_lft forever
inet6 2403:5804:f1cf:0:1607:4771:2ca5:68a0/64 scope global temporary dynamic
valid_lft 7201sec preferred_lft 3600sec
inet6 2403:5804:f1cf:0:cfcb:7b68:499:a6b3/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 7201sec preferred_lft 3600sec
inet6 fd3a:a6b:b9f:0:abae:763c:7dd7:162/64 scope global temporary dynamic
valid_lft 584685sec preferred_lft 66095sec
inet6 fd3a:a6b:b9f:0:62bf:88cc:df17:c0ff/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2592000sec preferred_lft 604800sec
inet6 fe80::ab76:a154:b7ae:4825/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlp4s2: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 80:1f:02:4f:18:ae brd ff:ff:ff:ff:ff:ff
4: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 100.90.186.31/32 scope global tailscale0
valid_lft forever preferred_lft forever
inet6 fd7a:115c:a1e0::d101:ba97/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::6ddb:5b7c:f580:5ddc/64 scope link stable-privacy
valid_lft forever preferred_lft forever

View File

@@ -1,156 +0,0 @@
Niri + 4-Monitor Intel (DP) Migration Notes (Ubuntu 24.04+ → NixOS)
OWNER / CONTEXT
- User: sam (IT)
- Goal: Move to NixOS and daily-drive Niri on a 4-monitor setup.
- Priority: Reliability and broad tool compatibility over “polish”.
- Testing style: often SSH in from another machine because local display can go
black during compositor/DM experiments.
REMOTE REQUIREMENT (clarified)
- SSH is sufficient even when nobody is logged in locally (sshd runs pre-login).
- Remote GUI login is optional/rare. Do not design around RustDesk-at-greeter on
Wayland.
- If remote GUI login is ever needed later, consider adding GNOME+GDM+RDP as a
separate capability; keep Niri as main local session.
HARDWARE SUMMARY
- GPU: Intel iGPU (exact model TBD)
- Outputs: 4x DisplayPort to 4x HP LA2205 monitors
- DRM nodes observed on Ubuntu (node numbering may differ on NixOS):
- Primary KMS card for the 4 DP outputs: /dev/dri/card2
- Render node: /dev/dri/renderD129
- Notes: There may be multiple /dev/dri/card* devices. Session must pick the
correct device driving the 4 DP outputs.
NOTE (2026-01 recon):
- Current Ubuntu hardware scan shows NVIDIA Quadro P620 is driving /dev/fb0 at 1680x1050.
- This suggests the monitors may actually be attached to the Quadro, not the Intel outputs.
- Before finalizing GPU/device selection, verify:
- ls -l /dev/dri/by-path
- loginctl seat-status seat0
- (optional) niri output listing once in session
KNOWN KERNEL / PLATFORM ISSUES
- IOMMU faults / “Operation not permitted” style crashes were avoided on Ubuntu
with kernel flags:
- intel_iommu=off
- dev_mem_signed_off=1
- These flags may or may not be needed on NixOS; keep them as a known-good
baseline and only remove once stable.
UBUNTU WORKING STATE (IMPORTANT BEHAVIORAL FINDINGS)
1) GDM “gear icon” / Wayland sessions
- GDM did not show Wayland sessions until Wayland was enabled.
- /etc/gdm3/custom.conf had WaylandEnable=false. Commenting it out fixed
session availability after restarting GDM.
2) .desktop Exec path issue
- Session .desktop pointing Exec to /home/sam/start-niri.sh caused GDM issues.
- Home perms were drwxr-x--- (750), so greeter user couldnt traverse /home
reliably.
- Fix: Exec must point to a system path (/usr/bin or /usr/local/bin), not
/home.
3) niri-session issue (major root cause of login loop)
- /usr/bin/niri-session existed but session immediately returned to login.
- Logs showed:
Failed to start niri.service: Unit niri.service not found.
Failed to start niri-shutdown.target: Unit niri-shutdown.target not found.
- Therefore niri-session was not usable as packaged (missing systemd user
units).
4) FINAL WORKING FIX ON UBUNTU (proven)
- /usr/share/wayland-sessions/niri.desktop set to start Niri directly:
Exec=/usr/bin/niri --session
- This bypassed niri-session and made Niri start successfully from GDM.
SESSION START METHOD (proven)
- Known working from a display manager: Exec = `niri --session`
- Avoid relying on `niri-session` unless NixOS packaging provides the required
systemd user units (niri.service, niri-shutdown.target).
PERMISSIONS / SECURITY WORKAROUNDS USED DURING TESTING
- User group membership on Ubuntu: video, render, seat
- Custom udev rules were created to chmod 666 DRM nodes.
- Result: /dev/dri/card2 and /dev/dri/renderD129 became world-writable.
- This is NOT desired long term; prefer logind seat ACLs.
- On NixOS, aim to avoid chmod 666 rules unless absolutely needed for debugging.
NIRI CONFIG NOTES
- Config validated successfully on Ubuntu: ~/.config/niri/config.kdl
- Xwayland started via config:
- spawn-at-startup "Xwayland" ":" "1"
- Avoid exporting XDG_RUNTIME_DIR manually; let pam/systemd-logind manage it.
- If needed to force GPU device, Niri supports choosing a render DRM device
(exact config syntax/version dependent). On Ubuntu, correct render node was
renderD129.
NIXOS TARGET STATE (WHAT WE WANT)
- Boot to a login method that reliably starts Niri on the Intel GPU with 4
monitors.
- Must keep a working fallback (at minimum TTY + SSH; optionally a full DE).
- Remote recovery/admin always possible via SSH.
LOGIN / DISPLAY MANAGER STRATEGY OPTIONS (pick one)
Option A: greetd + tuigreet (recommended for Niri-first reliability)
- Minimal moving parts, compositor-agnostic.
- Start the session with: `niri --session`.
- Ideal when “polish doesnt matter” and reliability does.
Option B: GDM (works; proven on Ubuntu)
- Ensure Wayland sessions enabled.
- Ensure session Exec is not in /home.
- If `niri-session` is incomplete, start `niri --session` directly.
DISPLAY MANAGER DECISION NOTE
- If SSH-only remote is the requirement: prefer greetd for simplicity.
- If remote graphical login is ever required: consider GDM + GNOME RDP later as
a separate capability. (Not required now.)
SCREENSHARE / PORTALS REQUIREMENTS (broad tool compatibility)
- Enable PipeWire + WirePlumber.
- Ensure xdg-desktop-portal is installed and functional in the user session.
- Choose a portal backend compatible with Niri (often portal-gnome and/or portal
gtk; exact best choice may be NixOS-specific).
- If screencast/screen-share fails in apps: check portal backend selection,
permissions prompts, and PipeWire.
GPU/DRM PERMISSIONS
- Avoid global chmod 666 udev rules in final config.
- Use logind seat/ACLs; add user to video/render groups if needed.
- When debugging device selection:
- ls -l /dev/dri /dev/dri/by-path
- loginctl seat-status seat0
FALLBACK PLAN
- Minimum: TTY + SSH access always available.
- Optional: install a full fallback DE only if needed (GNOME or Plasma).
- Not required for Niri; just a safety net.
DEBUG / TROUBLESHOOTING CHECKLIST (capture these on failure)
- niri config:
- niri validate
- user session logs:
- journalctl --user -b -l --no-pager | tail -n 300
- kernel DRM messages:
- journalctl -b -k -l --no-pager | grep -iE "drm|i915|kms|atomic|permission" | tail
- device inventory:
- ls -l /dev/dri /dev/dri/by-path
- session type:
- echo $XDG_SESSION_TYPE
- loginctl session-status
ACCEPTANCE CRITERIA (DONE WHEN)
- Niri starts reliably after reboot from the chosen DM
- All 4 monitors are active consistently
- Screen sharing works in at least one browser-based app and one native app
- SSH recovery works even if local display is broken
- No chmod 666 DRM hacks required in the final config (preferred)
OPEN QUESTIONS FOR NIXOS MIGRATION
- Exact Intel GPU model + correct DRM node mapping on NixOS (may differ)
- Whether the kernel flags are still required on NixOS
- Whether NixOS niri packaging includes full systemd integration units
(niri.service, niri-shutdown.target)
- Best portal backend combo for Niri screencast on NixOS

28
pkgs/agentops.nix Normal file
View File

@@ -0,0 +1,28 @@
{ lib
, python3Packages
, fetchPypi
}:
python3Packages.buildPythonPackage rec {
pname = "agentops";
version = "0.4.21";
pyproject = true;
build-system = with python3Packages; [ hatchling ];
src = fetchPypi {
inherit pname version;
hash = "sha256-R3Wcbf1upYutL3dkJX5HeMsuNK4YDO9kL2D1atztZRA=";
};
# Bypasses strict dependency version checks that fail in Nixpkgs
pythonRelaxDeps = [ "packaging" "psutil" "termcolor" ];
propagatedBuildInputs = with python3Packages; [
pydantic requests httpx websockets aiohttp
opentelemetry-api opentelemetry-exporter-otlp-proto-http
opentelemetry-instrumentation opentelemetry-sdk opentelemetry-semantic-conventions
ordered-set packaging psutil pyyaml termcolor wrapt
];
pythonImportsCheck = [ "agentops" ];
meta = with lib; {
description = "Observability and DevTool Platform for AI Agents";
homepage = "https://github.com/AgentOps-AI/agentops";
license = licenses.mit;
};
}

26
pkgs/autogpt.nix Normal file
View File

@@ -0,0 +1,26 @@
{ lib, buildPythonPackage, fetchFromGitHub, python3Packages }:
buildPythonPackage rec {
pname = "autogpt";
version = "0.5.2";
src = fetchFromGitHub {
owner = "Significant-Gravitas";
repo = "AutoGPT";
rev = "v${version}";
hash = "sha256-0000000000000000000000000000000000000000000000000000"; # NEEDS UPDATE
};
propagatedBuildInputs = with python3Packages; [
openai
langchain
chromadb
sqlalchemy
beautifulsoup4
requests
];
meta = with lib; {
description = "AutoGPT - Autonomous AI agent";
homepage = "https://github.com/Significant-Gravitas/AutoGPT";
license = licenses.mit;
};
}

29
pkgs/cao-cli.nix Normal file
View File

@@ -0,0 +1,29 @@
{ lib
, python3Packages
, fetchFromGitHub
}:
python3Packages.buildPythonPackage rec {
pname = "cli-agent-orchestrator";
version = "1.0.3";
pyproject = true;
build-system = with python3Packages; [ hatchling ];
src = fetchFromGitHub {
owner = "awslabs";
repo = "cli-agent-orchestrator";
rev = "v${version}";
hash = "sha256-syfUQaHeubQnFLgAcIoMozcYA8wuFfcuR2at/J96FoE=";
};
# Relaxes version bounds on dependencies for NixOS compatibility
pythonRelaxDeps = true;
propagatedBuildInputs = with python3Packages; [
fastapi pydantic sqlalchemy uvicorn websockets libtmux
click requests aiofiles python-frontmatter watchdog
apscheduler fastmcp
];
pythonImportsCheck = [ "cli_agent_orchestrator" ];
meta = with lib; {
description = "CLI Agent Orchestrator - multi-agent collaboration via tmux";
homepage = "https://github.com/awslabs/cli-agent-orchestrator";
license = licenses.asl20;
};
}

34
pkgs/mediapipe.nix Normal file
View File

@@ -0,0 +1,34 @@
{ lib
, stdenv
, python3Packages
, fetchurl
, autoPatchelfHook
, opencv
, libglvnd
}:
python3Packages.buildPythonPackage rec {
pname = "mediapipe";
version = "0.10.32";
format = "wheel";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/e3/98/00cd8b2dcb563f2298655633e6611a791b2c1a7df1dae064b2b96084f1bf/mediapipe-0.10.32-py3-none-manylinux_2_28_x86_64.whl";
hash = "sha256-SwlB+7vOQYYvE8sYUMSHjBPbxizV6B50iABRt6IM47Y=";
};
nativeBuildInputs = [ autoPatchelfHook ];
buildInputs = [
stdenv.cc.cc.lib
opencv
libglvnd
];
propagatedBuildInputs = with python3Packages; [
numpy
absl-py
protobuf
opencv4
];
meta = with lib; {
description = "MediaPipe - Google's media processing framework";
homepage = "https://github.com/google/mediapipe";
license = licenses.asl20;
};
}

27
pkgs/react-doctor.nix Normal file
View File

@@ -0,0 +1,27 @@
{ lib, nodejs, pkgs, buildNpmPackage, fetchFromGitHub }:
buildNpmPackage rec {
pname = "react-doctor";
version = "0.0.1";
src = fetchFromGitHub {
owner = "millionco";
repo = "react-doctor";
rev = "0.0.1";
hash = "sha256-T8szJcXeqIWmZQU/D4KpeFU1ZXilThL5JBmw2Y0hZkw=";
};
npmDepsHash = lib.fakeHash;
# CRITICAL: Generate package-lock.json during build
postPatch = ''
cd $sourceRoot
npm install --package-lock-only --no-audit --progress=false
'';
meta = with lib; {
description = "Let coding agents diagnose and fix your React code";
homepage = "https://github.com/millionco/react-doctor";
license = licenses.mit;
mainProgram = "react-doctor";
};
}

55
plan.md
View File

@@ -1,55 +0,0 @@
You are a devops engineer.
You are brief and concise and will help guide me through my plan.
Plan is to migrate my ubuntu system on the main drive with OS installed to NixOS.
I have backed up the required files from Windows dual boot and Ubuntu to Integral300 mounted at /media/sam/Integral300/
DECISION:
- We will WIPE the entire NVMe disk (/dev/nvme0n1). We are NOT keeping Windows partitions.
We need to make a list of software that needs to be installed on the NixOS. There are several files, and some folders to look through.
We need to create a finalized list of software to ensure we have what we need.
We do not need to include everything in the list, just the things I have installed and need that are not generic system utils. The list needs to be concise and without duplicates.
Then we will be making a NixOS flake-based configuration using:
- hosts/sam-4screen-desktop/configuration.nix
- home-manager (home/sam/home.nix)
- flake.nix
We will store/push this repo to my Gitea server so the config is available during install.
Dotfiles:
- Dotfiles will be placed on the new NixOS system at: ~/dotfiles
- Home Manager will symlink config from ~/dotfiles
We will be using Niri as the primary display.
- Display/login manager: greetd + tuigreet
- Start method: niri --session (do not use niri-session)
Networking:
- Use NetworkManager
- Static IP must be 192.168.20.27/24, applied on Wi-Fi SSID "Aussie Broadband 8729" (wlp4s2)
Some software is in the ai dev plan. If this is easy to include thats ok. Otherwise I can integrate that once the system is running.
This approach applies to anything else that maybe problematic. We do not have to go all in at once. Get the main things working with niri, display manager, essential zsh utils, then dotfiles with homemanager, then AI tooling, etc. Keep adding to successful install.
I have a second machine on the desktop that can be used to ssh into this new NixOS if need be.
Folder /docs has more directions for the PLAN and software list.
- docs/nixos_build_spec.md is the source-of-truth for disk/boot/network decisions.
- docs/software_inventory.md (or equivalent) is the source-of-truth for the final software list.
Folder /logs has some scans and hardware profiles which can be used for planning and software.
Folder /results has the original migration configuration.nix results. We will eventually replicate this and create a new more up to date one. This can be used as a reference if needed.
Please ask questions, request access to file systems where needed.
Summary:
- Build software list
- Finalize list in collaboration with me
- Build NixOS configuration (flake + home-manager)
- Push to Gitea
- Install NixOS (wipe entire NVMe)
- Generate and commit hardware-configuration.nix during install
- Boot into NixOS, clone/copy dotfiles to ~/dotfiles, verify Niri + static IP + SSH

View File

@@ -1,192 +0,0 @@
# NixOS + Home Manager Setup Overview (sam/nixos)
This document is a practical overview of how this NixOS setup was built and how
“dotfiles” are managed, so another AI session (or you later) can replicate it on
another machine.
Repo: `ssh://git@gitea.lab.audasmedia.com.au:2222/sam/nixos.git`
## Goals of this setup
- Reproducible NixOS install via flakes (`nixos-rebuild` / `nixos-install`)
- Home Manager managed user config (zsh, kitty, nvim config, etc.)
- KDE Plasma + Hyprland selectable at SDDM login
- Neovim works reliably on NixOS:
- config tracked in git
- plugins installed via lazy.nvim into a writable directory
- avoid writing any lockfiles into `/nix/store` (read-only)
## High-level architecture
- System config: `hosts/<host>/configuration.nix`
- Hardware config: `hosts/<host>/hardware-configuration.nix`
- generated per-machine during install, then committed
- Home Manager (as NixOS module): `home/sam/home.nix`
- Neovim config stored in repo: `home/sam/nvim/...`
### Repo structure (typical)
- `flake.nix`
- `hosts/aspire-laptop/configuration.nix`
- `hosts/aspire-laptop/hardware-configuration.nix`
- `home/sam/home.nix`
- `home/sam/nvim/` (init.lua, lua/, lazy-lock.json from old setup if needed)
- `scripts/install-from-iso.sh`
## Installation procedure (wipe disk)
### BIOS notes
- Secure Boot disabled on the Acer test laptop for easiest install.
(If Secure Boot is locked by a BIOS Supervisor password, bare-metal install may
be blocked; use a VM test instead.)
### From the NixOS graphical ISO (live environment)
1. Connect to the internet.
2. Clone repo to the live environment:
- `git clone ssh://git@gitea.lab.audasmedia.com.au:2222/sam/nixos.git /tmp/nixos`
3. Partition/mount (WIPES DISK):
- Identify disk (e.g. `/dev/sda` or `/dev/nvme0n1`)
- Run:
- `sudo DISK=/dev/<disk> bash /tmp/nixos/scripts/install-from-iso.sh`
This creates:
- EFI partition (vfat)
- Btrfs root with subvolumes `@` and `@home`
- Mounts under `/mnt` and generates `/mnt/etc/nixos/hardware-configuration.nix`
4. Copy repo into target:
- `sudo rm -rf /mnt/etc/nixos`
- `sudo mkdir -p /mnt/etc`
- `sudo cp -a /tmp/nixos /mnt/etc/nixos`
5. Copy generated hardware config into the repo host path:
- `sudo cp -f /mnt/etc/nixos/hardware-configuration.nix /mnt/etc/nixos/hosts/<host>/hardware-configuration.nix`
6. Install:
- `sudo nixos-install --flake /mnt/etc/nixos#<host>`
- reboot
### After first boot
- Set password for `sam` if needed:
- `sudo passwd sam`
- If using Tailscale:
- `sudo tailscale up`
## SSH access (to administer remotely)
This setup enabled OpenSSH server via NixOS config.
- `services.openssh.enable = true;`
- `services.openssh.openFirewall = true;`
- Password auth was enabled for convenience in testing (not best practice).
To apply:
- `sudo nixos-rebuild switch --flake /etc/nixos#<host>`
## “Dotfiles” / config management approach (what we actually did)
### The key rule
Home Manager symlinks managed files into `/nix/store` (read-only). That is fine
for config files, but NOT fine for files that apps need to write to at runtime.
### Neovim (special case)
Neovim + lazy.nvim expects to write:
- lockfile
- plugin installs
- cache/state
So:
1) The Neovim config code is kept in git and linked by Home Manager, but we do
NOT have HM own the entire `~/.config/nvim` directory.
We link only:
- `~/.config/nvim/init.lua`
- `~/.config/nvim/lua/`
Example Home Manager linking (conceptual):
- `xdg.configFile."nvim/init.lua".source = ./nvim/init.lua;`
- `xdg.configFile."nvim/lua".source = ./nvim/lua;`
2) lazy.nvim is configured to write lockfile into a writable location:
- lockfile path: `vim.fn.stdpath("data") .. "/lazy-lock.json"`
(=> `~/.local/share/nvim/lazy-lock.json`)
3) Plugins are installed by lazy.nvim into:
- `~/.local/share/nvim/lazy/`
4) After a new install / new machine, bootstrap plugins with:
- `nvim --headless "+Lazy! sync" "+qa"`
### Why we avoided Nix-managed Neovim plugins in HM
If `programs.neovim.plugins = ...` is used, Neovim may load plugins from a
read-only Nix “vim pack dir” under `/nix/store/...`.
Some plugins (notably treesitter) try to write build artifacts into the plugin
directory, which fails on read-only paths.
Therefore:
- Nix installs `nvim` + dependencies (node/python/rg/fd/compilers).
- lazy.nvim installs the plugins at runtime into user-writable dirs.
### Other tools
Most other CLI tools can be installed declaratively via NixOS or Home Manager.
Their configs can be safely managed by HM as symlinks (read-only is fine).
## Notable fixes/decisions made during setup
- If you see errors like “Read-only file system” writing `lazy-lock.json`,
it means HM is managing the lockfile path. Fix by moving lockfile to data dir
and not linking `lazy-lock.json` into `/nix/store`.
- Treesitter module name mismatch was fixed in config to handle upstream changes:
attempt `require("nvim-treesitter.config")` and fallback to
`require("nvim-treesitter.configs")`.
- Avante was disabled on low-power machines by removing/renaming its plugin spec
file so lazy.nvim does not load it.
- Git remote update issues were resolved using:
- `git fetch origin`
- `git pull --rebase origin main`
- `git push`
## Adding programs (basic workflow)
### System-wide packages
Edit:
- `hosts/<host>/configuration.nix`
Add to:
- `environment.systemPackages = with pkgs; [ ... ];`
Apply:
- `sudo nixos-rebuild switch --flake /etc/nixos#<host>`
### User-only packages
Edit:
- `home/sam/home.nix`
Add to:
- `home.packages = with pkgs; [ ... ];`
Apply:
- `sudo nixos-rebuild switch --flake /etc/nixos#<host>`
### Then commit + push
- `cd /etc/nixos`
- `git add -A`
- `git commit -m "..." && git push`
## Secrets (do not put in git)
Do not commit API keys (Gemini/OpenAI/etc.) into this repo.
Preferred:
- store secrets outside git (password manager) and export into your shell
- or use a secret manager like `sops-nix` later
Example (local-only) environment file:
- `~/.config/environment.d/10-secrets.conf`
- contains `GEMINI_API_KEY=...`
- not tracked in git
## References
- NixOS Manual: https://nixos.org/manual/nixos/stable/
- Home Manager Manual: https://nix-community.github.io/home-manager/
- Flakes: https://nixos.wiki/wiki/Flakes
- Packages/options search: https://search.nixos.org/

View File

@@ -1,112 +0,0 @@
System (NixOS) services / core
- NetworkManager
- OpenSSH server (sshd) (password auth enabled)
- Tailscale (client)
- PipeWire audio (Pulse/ALSA)
- Firewall (enabled)
Shell / terminal
- zsh (default shell)
- kitty (terminal emulator)
Browsers / GUI apps
- Google Chrome
- VS Code
- Thunderbird
CLI / terminal utilities
- git, curl, wget, jq
- ripgrep (rg), fd (fd)
- bat, btop
- eza, zoxide, fzf
- starship
- atuin
- zellij
- lazygit
- gh (GitHub CLI)
- borgbackup
- yazi
- tealdeer (tldr)
- navi
- dua
- wl-clipboard, xclip
Build / dev dependencies
- neovim
- gcc, gnumake, unzip
- nodejs, python3, pynvim (Neovim providers)
Docs / LaTeX
- pandoc
- texlive (scheme-small)
- zathura (+ PDF backend as configured)
Neovim (config + plugins)
- Neovim config stored in repo: home/sam/nvim
- Plugin manager: lazy.nvim
- Plugins (from your lazy-lock.json, with Avante disabled):
- which-key.nvim
- vimtex
- nvim-treesitter
- telescope.nvim + telescope-themes
- mason.nvim + mason-lspconfig.nvim
- nvim-lspconfig
- conform.nvim
- nvim-lint
- nvim-cmp + cmp-* + LuaSnip
- nvim-tree.lua + nvim-web-devicons
- gitsigns.nvim
- Comment.nvim
- nvim-dap + nvim-dap-ui + nvim-nio
- Themes: catppuccin, tokyonight, onedark, kanagawa, gruvbox, everforest, dracula
- Markdown: vim-markdown + tabular, live-preview.nvim
- lualine.nvim, plenary.nvim, dressing.nvim, nui.nvim (deps)

View File

@@ -1,117 +0,0 @@
# NixOS Configuration: /results/configuration.nix
# This file configures the core NixOS system.
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
# This file will be generated by the NixOS installer.
./hardware-configuration.nix
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# ---
# NETWORKING
# ---
networking.hostName = "nixos-desktop";
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "Australia/Sydney";
# ---
# USER ACCOUNTS
# ---
users.users.sam = {
isNormalUser = true;
description = "Sam";
extraGroups = [ "networkmanager" "wheel" ]; # "wheel" allows sudo
};
# ---
# GRAPHICS & DESKTOP ENVIRONMENT
# ---
services.xserver = {
enable = true;
# Enable KDE Plasma 5 Desktop Environment
desktopManager.plasma5.enable = true;
# Enable SDDM as the display manager
displayManager.sddm.enable = true;
# Use the proprietary NVIDIA drivers
videoDrivers = [ "nvidia" ];
};
# Enable OpenGL and Vulkan support
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
# Configure NVIDIA drivers for Hybrid Graphics (Intel + NVIDIA)
hardware.nvidia = {
modesetting.enable = true;
# Use the stable proprietary driver package
package = config.boot.kernelPackages.nvidiaPackages.stable;
# Configure PRIME Render Offload
prime = {
sync.enable = true;
# Set the PCI bus IDs for your GPUs (from lspci output)
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
# ---
# SOFTWARE PACKAGES
# ---
environment.systemPackages = with pkgs; [
# --- Tier 1: Critical Applications & Services ---
firefox thunderbird kitty neovim nushell vscode telegram-desktop
# --- Tier 2: Development & CLI Tools ---
git rustc cargo nodejs python3 gcc gnumake btop eza bat fzf ripgrep zoxide
# --- Tier 3: Desktop & GUI Applications ---
libreoffice flameshot vlc spotify timeshift
];
# ---
# SERVICES
# ---
# Enable sound with PipeWire.
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# Enable CUPS for printing.
services.printing.enable = true;
# ---
# DISK MOUNTS
# ---
fileSystems."/mnt/ubuntu_storage_3TB" = {
device = "/dev/disk/by-uuid/037a542c-6aa9-4b1f-ab2f-4b6922ab371f";
fsType = "ext4";
};
fileSystems."/mnt/windows-storage" = {
device = "/dev/disk/by-uuid/063E316A3E315441";
fsType = "ntfs-3g";
options = [ "rw" "uid=1000" "gid=100" "umask=007" ];
};
# Allow installation of unfree packages (like NVIDIA drivers)
nixpkgs.config.allowUnfree = true;
# Set the system state version.
system.stateVersion = "24.05";
}

View File

@@ -1,144 +0,0 @@
# NixOS Configuration - AUTO-GENERATED DRAFT
# Path: results/generated_configuration.nix
#
# This file was auto-generated on $(date) based on system reconnaissance.
# !!! IMPORTANT !!!
# This is a DRAFT and a starting point. It WILL require manual review and editing.
# - Verify all package names against the Nixpkgs repository.
# - Check service options and configurations.
# - Double-check all hardware and disk mount settings.
{ config, pkgs, ... }:
{
imports =
[ # This will be generated by the NixOS installer.
./hardware-configuration.nix
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# --- NETWORKING ---
# See logs/06_netplan_config.log for details.
networking.hostName = "nixos-desktop"; # Set your desired hostname.
networking.networkmanager.enable = true;
# The scan found Tailscale running. You will likely want to enable it here.
# services.tailscale.enable = true;
# Set your time zone.
time.timeZone = "Australia/Sydney"; # Please verify this is correct.
# --- USER ACCOUNTS ---
users.users.sam = {
isNormalUser = true;
description = "Sam";
extraGroups = [ "networkmanager" "wheel" "docker" ]; # "wheel" allows sudo. Add other groups if needed.
};
# --- SOFTWARE PACKAGES (DERIVED FROM RECON LOG) ---
environment.systemPackages = with pkgs; [
# --- Essentials & CLI Tools (from history and manual install logs) ---
git
wget
curl
htop # btop is an alternative available in nix
neovim
zsh
zoxide
ripgrep
fzf
tree
# --- Rust & Go Environment ---
rustc
cargo
go
# --- Python Environment ---
python3
# --- Node.js Environment ---
nodejs # Consider specifying a version, e.g., nodejs-20_x
# --- Desktop & GUI Applications ---
firefox
thunderbird
vlc
gimp
inkscape
obs-studio
# --- Manually Installed Tools (verify package names) ---
arduino-cli
lazygit
ollama
scrcpy
# --- Snap Packages (find equivalents in nixpkgs) ---
# The following were installed as snaps. Find their NixOS equivalents.
# - code (vscode)
# - mqtt-explorer
# - notepad-plus-plus (likely use notepadqq or similar)
# - spotify
# - telegram-desktop
# --- Other APT Packages (selection of common tools found) ---
# A full list is in logs/04_nixos_recon.log. Add what you need.
nmap
minicom
screen
net-tools # for ifconfig, etc.
gnome.gnome-tweaks
];
# --- SERVICES & VIRTUALIZATION ---
# Docker was found to be in use.
virtualisation.docker.enable = true;
# Ollama service was running.
# services.ollama.enable = true; # Find the correct module for Ollama on NixOS
# RustDesk service was running.
# services.rustdesk.enable = true; # Find the correct module for RustDesk on NixOS
# Enable sound with PipeWire.
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# Enable CUPS to print documents.
services.printing.enable = true;
# --- DESKTOP ENVIRONMENT ---
services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
# --- DISK MOUNTS ---
# !!! CRITICAL !!!
# Update these with the correct UUIDs from your `lsblk -f` output
# once you have booted the NixOS installer.
fileSystems."/data" = {
device = "/dev/disk/by-uuid/PLEASE_REPLACE_ME"; # UUID of Integral300 drive
fsType = "ext4";
options = [ "defaults" ];
};
# --- MISC ---
# Allow unfree packages for things like Chrome, Spotify, etc.
nixpkgs.config.allowUnfree = true;
# System state version. This should be set to the version of NixOS you install.
system.stateVersion = "24.05";
}

View File

@@ -1,123 +0,0 @@
# NixOS Home Manager Configuration: /results/generated_home.nix
# This file declaratively manages your user environment based on the discovered .zshrc.
{ config, pkgs, ... }:
{
# Set a state version for compatibility
home.stateVersion = "24.05";
programs.home-manager.enable = true;
# ---
# 1. ZSH SHELL & POWERLEVEL10K PROMPT
# ---
programs.zsh = {
enable = true;
enableAutosuggestions = true;
enableSyntaxHighlighting = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" ]; # zsh-autosuggestions & syntax-highlighting are enabled above
theme = "powerlevel10k/powerlevel10k";
};
shellAliases = {
ls = "eza --icons --git";
ll = "eza -l --icons --git";
la = "eza -la --icons --git";
tree = "eza --tree";
# Note: 'batcat' from your .zshrc is typically packaged as 'bat' in NixOS
cat = "bat --color=always --paging=never";
};
};
# Set Zsh as the default shell
home.shell = pkgs.zsh;
# Enable Powerlevel10k theme
programs.powerlevel10k = {
enable = true;
# Your Powerlevel10k config (~/.p10k.zsh) should be linked here if you have one.
# For example: home.file.".p10k.zsh".source = ./p10k.zsh;
};
# ---
# 2. SHELL TOOLS & INTEGRATIONS
# ---
programs.atuin = {
enable = true;
enableZshIntegration = true;
};
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
programs.nvm = {
enable = true;
};
# ---
# 3. EDITORS & TERMINAL
# ---
programs.neovim = {
enable = true;
defaultEditor = true; # Sets EDITOR and VISUAL to nvim
};
programs.kitty = {
enable = true;
};
programs.zellij = {
enable = true;
};
# ---
# 4. PACKAGES & LANGUAGES
# ---
home.packages = with pkgs; [
# Core Utilities
unzip zip p7zip htop wget curl nmap minicom screen tree
# Modern CLI Enhancements (from .zshrc and recon logs)
eza bat lazygit yazi tealdeer navi carapace-bin
# Language Toolchains
rustup go nodejs python3
];
# ---
# 5. ENVIRONMENT & API KEYS
# ---
# SECURITY: Do NOT store secrets in git-tracked Nix files.
# Use a local-only file such as:
# ~/.config/environment.d/10-secrets.conf
# or adopt sops-nix / agenix later.
#
# Example (DO NOT COMMIT):
# home.sessionVariables = {
# OPENAI_API_KEY = "…";
# TAVILY_API_KEY = "…";
# DEEPSEEK_API_KEY = "…";
# };
# Add custom binary paths to your environment
home.sessionPath = [
# For the 'opencode' CLI tool
"$HOME/.opencode/bin"
];
# ---
# AI TOOLS
# ---
programs.gemini-cli = {
enable = true;
};
# ---
# 6. DOTFILE MANAGEMENT
# ---
# This section is a placeholder for linking config files from a Git repo.
# e.g., home.file.".config/nvim/init.vim".source = ./config/nvim/init.vim;
}

View File

@@ -1,59 +0,0 @@
# My Linux Environment Setup
## 1. Core Command-Line Applications
These are the underlying programs installed on the system.
- **eza**: Modern `ls` replacement.
- **bat** (`batcat`): Modern `cat` replacement with syntax highlighting.
- **ripgrep** (`rg`): Fast `grep` replacement.
- **fzf**: Fuzzy finder for files (`Ctrl+T`) and directories (`Alt+C`).
- **zoxide** (`z`): "Smarter `cd`" command.
- **atuin**: Advanced, searchable shell history (`Ctrl+R`).
- **carapace**: Rich, IDE-style command completions.
- **tealdeer** (`tldr`): Simplified man pages.
- **navi**: Interactive cheatsheet tool.
- **zellij**: Terminal multiplexer for splitting windows.
- **lazygit**: A TUI for managing Git.
- **btop**: Resource monitor.
- **dua-cli** (`dua`): Interactive disk usage analyzer.
- **yazi**: Terminal file manager.
- **xclip**: System clipboard integration.
- **jq**: Command-line JSON processor.
- **pandoc**: Universal document converter.
## 2. Shell Environments
### Zsh (for Kitty)
- **Framework**: Oh My Zsh
- **Prompt**: Powerlevel10k
- **Main Config**: `~/.zshrc`
- **Key Integrations**: `zsh-autosuggestions`, `zsh-syntax-highlighting`, and hooks for all core tools.
## 3. Neovim Configuration
- **Config Directory**: `~/.config/nvim/`
- **Package Manager**: `lazy.nvim`
### Key Plugins Installed
- **Core Functionality**:
- `nvim-lspconfig` & `mason.nvim`: Language Server support.
- `nvim-cmp`: Autocompletion.
- `telescope.nvim`: Fuzzy finding.
- `nvim-treesitter`: Advanced syntax highlighting.
- `nvim-lint`: Code quality analysis.
- `nvim-dap` & `nvim-dap-ui`: Integrated debugging.
- **UI & Experience**:
- `gitsigns.nvim`: Git status markers.
- `lualine.nvim`: Configurable status line.
- `which-key.nvim`: Keybinding popup.
- **Quality of Life**:
- `Comment.nvim`: Universal comment toggling.
- `nvim-autopairs`: Automatic bracket closing.
- **Themes & Switching**:
- `catppuccin`, `tokyonight`, `gruvbox`, `dracula`, `kanagawa`, `everforest`, `onedark`.
- `andrewberty/telescope-themes`: Telescope extension for theme switching.

View File

@@ -1,16 +0,0 @@
Aider Command Line The Gold Standard. It writes code directly to your files with incredible accuracy and works perfectly with OpenRouter.
OpenCode Terminal UI Visual learners who want a "dashboard" feel inside their terminal.
GEmini Cli
Goose Agentic / MCP The newest "power player." It uses the Model Context Protocol (MCP) to let the AI use your actual computer tools (terminal, browser, memory
Aprise for letting people know - messaging.
Obsidian
Tailscale
RustDesk
Telegram
Thundirbird - is there an alternative?
Flameshot