{"id":39679738,"url":"https://github.com/pbek/nixbit","last_synced_at":"2026-01-18T09:51:06.604Z","repository":{"id":319300339,"uuid":"1078249391","full_name":"pbek/nixbit","owner":"pbek","description":"GUI application to update your NixOS system from a flake git repository","archived":false,"fork":false,"pushed_at":"2026-01-15T21:48:38.000Z","size":715,"stargazers_count":26,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-16T00:50:36.712Z","etag":null,"topics":["flakes","nix","nixos"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pbek.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["pbek"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":"pbek","issuehunt":null,"otechie":null,"custom":["https://paypal.me/pbek"]}},"created_at":"2025-10-17T12:42:16.000Z","updated_at":"2026-01-15T21:47:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"6c39d8d7-3d7b-4731-b237-5af0a2830d86","html_url":"https://github.com/pbek/nixbit","commit_stats":null,"previous_names":["pbek/nixbit"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/pbek/nixbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbek%2Fnixbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbek%2Fnixbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbek%2Fnixbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbek%2Fnixbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pbek","download_url":"https://codeload.github.com/pbek/nixbit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbek%2Fnixbit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flakes","nix","nixos"],"created_at":"2026-01-18T09:51:00.290Z","updated_at":"2026-01-18T09:51:06.455Z","avatar_url":"https://github.com/pbek.png","language":"C++","funding_links":["https://github.com/sponsors/pbek","https://liberapay.com/pbek","https://paypal.me/pbek"],"categories":[],"sub_categories":[],"readme":"# [Nixbit](https://github.com/pbek/nixbit)\n\n[Changelog](https://github.com/pbek/nixbit/blob/main/CHANGELOG.md) |\n[Releases](https://github.com/pbek/nixbit/releases) |\n[Issues](https://github.com/pbek/nixbit/issues)\n\n[![🏗️ Build Nixbit](https://github.com/pbek/nixbit/actions/workflows/build-nix.yml/badge.svg)](https://github.com/pbek/nixbit/actions/workflows/build-nix.yml)\n\nA **GUI application for updating your NixOS system** from a Nix Flakes Git repository.\n\nYou can try it out by running:\n\n```bash\nnix run github:pbek/nixbit\n```\n\n\u003e [!TIP]\n\u003e If Qt complains about different minor versions, you can try using your own nixpkgs:\n\u003e\n\u003e ```bash\n\u003e nix run github:pbek/nixbit --override-input nixpkgs nixpkgs\n\u003e ```\n\n![Nixbit Screenshot Mainwindow](screenshots/mainwindow.webp)\n\n\u003e [!NOTE]\n\u003e See more [screenshots](screenshots/README.md) showcasing the system monitor and settings dialog.\n\nThere also is a **NixOS Module** to allow the configuration of the Git repository,\nso you can preset it for all systems in your fleet.\n\n## NixOS Module\n\nThe flake includes a NixOS module to configure nixbit system-wide.\nThis allows you to manage Nixbit configuration declaratively in your NixOS configuration.\n\n### Basic Usage\n\n```nix\n# In your flake.nix inputs\ninputs.nixbit.url = \"github:pbek/nixbit\";\ninputs.nixbit.inputs.nixpkgs.follows = \"nixpkgs\";\n\n# In your NixOS configuration\n{\n  imports = [ inputs.nixbit.nixosModules.nixbit ];\n\n  nixbit = {\n    enable = true;\n    repository = \"https://github.com/youruser/nixcfg.git\";\n  };\n}\n```\n\n### Module Options\n\nThe module provides the following configuration options:\n\n#### `nixbit.enable`\n\n- **Type**: `boolean`\n- **Default**: `false`\n- **Description**: Enables the Nixbit module. When enabled, the package will be installed system-wide and configuration will be written to `/etc/nixbit.conf`.\n\n#### `nixbit.package`\n\n- **Type**: `package`\n- **Default**: `pkgs.callPackage ./package.nix { }`\n- **Description**: The Nixbit package to install. This allows you to override the default package if you want to use a custom build or different version.\n\n#### `nixbit.repository`\n\n- **Type**: `string`\n- **Required**: Yes\n- **Description**: The Git repository URL that Nixbit will use for system updates. This URL will be written to `/etc/nixbit.conf` and cannot be changed by users through the UI, ensuring consistent configuration across your fleet. Example: `\"https://github.com/youruser/nixcfg.git\"`\n\n#### `nixbit.forceAutostart`\n\n- **Type**: `boolean`\n- **Default**: `false`\n- **Description**: When enabled, forces the creation of an autostart desktop entry every time the application starts. This is useful for ensuring Nixbit starts automatically on all systems in your fleet, regardless of user preferences. The setting is written to `/etc/nixbit.conf`.\n\n### What the Module Does\n\nWhen the module is enabled, it:\n\n1. **Installs the package**: Adds the Nixbit package to `environment.systemPackages`, making it available system-wide\n2. **Creates configuration file**: Generates `/etc/nixbit.conf` with:\n   - The specified repository URL (in the `[Repository]` section with `Url` key)\n   - The autostart force setting (in the `[Autostart]` section with `Force` key)\n3. **Locks settings**: Any settings written to `/etc/nixbit.conf` cannot be modified through the Nixbit UI, ensuring your fleet configuration remains consistent\n\n## Features\n\n### 🔄 NixOS Generations\n\n- **Current Generation Display**: Shows current generation number and date in main UI (hides during builds)\n- **Generation History**: \"View All Generations\" button opens a dialog with complete generation history\n- **Generation Management**: Manual refresh capability and automatic refresh after \"switch\" operations\n- **Visual Indicators**: Generation list highlights the current generation for easy identification\n\n### 📦 Repository Management\n\n- **Repository URL Configuration**: Input field for Git repository URLs with confirmation dialog for changes\n- **Local Repository Management**: Local path displayed in Settings Dialog, delete repository with safety checks and confirmation\n- **Repository Quick Access**: \"Open in file manager\" and \"Open terminal\" buttons for direct access to repository folder (supports multiple terminal emulators: konsole, gnome-terminal, xfce4-terminal, alacritty, kitty, ghostty, xterm)\n- **Status Monitoring**: Real-time display of repository status, commits behind, and busy indicators\n- **Auto-fetch Interval**: Configurable automatic fetch interval in minutes\n- **Network Resilience**: Waits for network availability after system resume before checking for updates (10-second timeout)\n- **Smart Refresh**: Automatically checks for repository updates when window becomes visible or is unhidden\n- **Commit History Viewer**: \"View Commits\" button displays all available updates with detailed information\n  - Short SHA hash (7 characters, monospace font)\n  - Commit author name and message\n  - Relative time (e.g., \"2 hours ago\") and full timestamp\n  - Clickable commit hashes for GitHub repositories (opens commit page in browser)\n  - Manual refresh capability\n\n### 🚀 System Update\n\n- **Hostname Configuration**: Input field for NixOS system hostname with automatic sanitization\n- **Rebuild Mode Selection**: Choose between 'build' (no activation) and 'switch' (build and activate) modes with descriptive explanations\n- **Build Host Management**: Configure multiple build hosts with friendly names and SSH addresses in Settings Dialog\n- **Build Host Selection**: Choose between local or remote build hosts for each rebuild mode independently\n- **Dynamic Button Labels**: Main action button reflects selected mode (\"Build System\" or \"Switch System\")\n- **Build \u0026 Switch**: Chain build and switch operations - builds remotely first, then switches locally if successful\n- **Update System**: One-click button to pull repository updates and rebuild the system\n- **Check for Updates**: Button to manually check for repository updates\n- **Process Control**: Pause and resume system update processes during builds (hidden in switch mode due to sudo limitations)\n\n### 📊 System Monitoring\n\n- **CPU Usage**: Real-time CPU utilization display during builds\n- **Memory Usage**: Current RAM usage with used/available memory information\n- **Network Transfer**: Upload and download rates during system updates\n- **Disk I/O**: Read/write rates for all physical disks (NVMe, SATA, SCSI, virtio, IDE, MMC/SD)\n- **System Load**: Current system load average monitoring\n\n### 🎨 User Interface\n\n- **Modern KDE Integration**: Built with Kirigami for native KDE Plasma look and feel\n- **Menu Bar**: File menu with Quit option, Tools menu with Check for Updates\n- **Action Buttons**: Quick access to system update and update check operations\n- **Terminal Output Panel**: Real-time command output display with syntax highlighting and interactive features\n  - Success messages highlighted in green (e.g., \"Done. The new configuration is\", \"Process finished with exit code: 0\")\n  - Error messages highlighted in red and bold (e.g., \"error:\", \"failed\", non-zero exit codes)\n  - Warning messages highlighted in yellow/orange\n  - Build activity messages highlighted in cyan (e.g., \"building\", \"copying\", \"evaluating\")\n  - Process status markers highlighted in magenta and bold (e.g., \"=== Process finished ===\")\n  - Text selection with mouse and keyboard (Ctrl+C to copy, Ctrl+A to select all)\n  - Right-click context menu with Copy, Select All, and Deselect options\n  - Output buffer limiting (last 5,000 lines by default, configurable 500-20,000) to prevent memory issues\n  - Clear and kill process buttons\n- **Build Logs Management**: \"View Logs\" button to access past build logs\n  - Stores last 10 build logs by default (configurable 0-100, 0 = unlimited)\n  - Shows timestamp, build type (BUILD/SWITCH), exit status, and file size\n  - Open logs in default editor or delete with confirmation\n  - Logs stored in `~/.local/share/nixbit/logs/` directory\n- **Build Status Messages**: Clear feedback after builds\n  - Green success message (\"✓ Build completed successfully!\") when exit code is 0\n  - Red error message with exit code (\"✗ Build failed with exit code N\") when build fails\n  - Messages persist until dismissed or next action\n- **Progress Indicators**: Progress bar for cloning operations and busy indicators for ongoing tasks\n- **System Tray Support**: Option to start the application hidden in the system tray\n  - Tray icon reflects update status (up-to-date, updates available, unknown)\n  - Debug mode uses different colors for easier identification (cyan, darker orange, purple)\n- **Autostart Option**: Checkbox to create or remove autostart desktop entry\n- **Settings Dialog**: KDE System Settings-style interface with vertical category menu\n  - Categories: General, Performance, Repository, Build Hosts\n  - Split-view layout (900x600) for better organization\n  - Performance settings: Max Terminal Lines (500-20,000), Max Stored Logs (0-100)\n  - Repository settings: Local path display with delete option\n  - Build Hosts: Create, update, delete host configurations with inline editing\n- **Confirmation Dialogs**: Safety prompts for deleting repositories and changing URLs\n- **Status Notifications**: Inline messages for operation results and errors\n- **Window State Persistence**: Window size and position remembered across sessions\n- **Automatic Data Refresh**: When window becomes visible, automatically checks for repository updates and refreshes generations list\n- **Debug Mode**: `--debug` CLI argument for testing with separate settings directory and default build mode\n\n## 🛠️ Technology Stack\n\n- **Language**: C++ (Qt6)\n- **UI Framework**: QML with KDE Kirigami\n- **Build System**: CMake 3.20+\n- **Dependencies**:\n  - Qt6 (Core, Gui, Qml, Quick, Widgets)\n  - KDE Frameworks 6\n  - KF6 Kirigami\n  - Git (runtime dependency)\n\n## 🔨 Building\n\n### Prerequisites\n\nThis project uses `devenv` for a reproducible development environment with all necessary dependencies:\n\n```bash\n# Enter the development shell\ndevenv shell\n\n# Or use direnv (if configured)\ndirenv allow\n```\n\n### Using Just Recipes\n\nThe project provides Just recipes for common build and development tasks:\n\n```bash\n# Configure the project with CMake\njust build\n\n# Run the application\njust run\n\n# Build the nix package\njust nix-build\n\n# Run the application from the nix package\njust nix-run\n```\n\n## 📄 License\n\nSee [LICENSE.md](LICENSE.md) for details.\n\n## 🤝 Contributing\n\nThis is an early-stage project. Contributions are welcome!\n\n\u003e [!NOTE]\n\u003e This project was developed with AI assistance.\n\n---\n\nBuilt with ❤️ for the NixOS community\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpbek%2Fnixbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpbek%2Fnixbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpbek%2Fnixbit/lists"}