A simple gtk4/libadwaita software center to easily install and manage nix packages

Overview

Nix Software Center

Built with Nix License: GPLv3 Chat on Matrix Chat on Discord

A graphical app store for Nix built with libadwaita, GTK4, and Relm4. Heavily inspired by GNOME Software.

Features

  • Install packages to configuration.nix
    • Flakes support can be enabled in the preferences menu
  • Install packages with nix profile or nix-env
  • Show updates for all installed packages
  • Search for packages
  • Launch applications without installing via nix-shell and nix run

NixOS Installation

Head of configuration.nix

{ config, pkgs, lib, ... }:
let
  nix-software-center = (import (pkgs.fetchFromGitHub {
    owner = "vlinkz";
    repo = "nix-software-center";
    rev = "0.0.3";
    sha256 = "sha256-r5xOi/dd/hW/gdi0X0tHFFt2w82S9PFhZSXPeCA69ig=";
  })) {};
in

Packages:

environment.systemPackages =
with pkgs; [
  nix-software-center
  # rest of your packages
];

For any other method of installation, when rebuilding you will be prompted to authenticate twice in a row by pkexec

'nix profile' installation

nix profile install github:vlinkz/nix-software-center

'nix-env' Installation

git clone https://github.com/vlinkz/nix-software-center
nix-env -f nix-software-center -i nix-software-center

Single run on an flakes enabled system:

nix run github:vlinkz/nix-software-center

Single run on non-flakes enabled system:

nix --extra-experimental-features "nix-command flakes" run github:vlinkz/nix-software-center

Debugging

RUST_LOG=nix_software_center=trace nix-software-center

Screenshots

Licenses

Some icons in data/icons contains assets from the NixOS logo and are licensed under a CC-BY license.

Some icons in data/icons contains assets from GNOME Software and are licensed under CC0-1.0.

Comments
  • "Open interactive shell" fails silently

    When I try to "Open interactive shell" for wezterm (just what I happened to try), nothing happens at all, on console or elsewhere. No processes are started, or at least none that last long enough to see.

    opened by tejing1 2
  • shasum error during rebuild

    shasum error during rebuild

    I've added this repo as a let…in in configuration.nix, addedd the package to the system list, and am getting this error on system rebuild.

    ~ ❱ sudo nixos-rebuild switch --show-trace 
    building Nix...
    building the system configuration...
    building '/nix/store/lv93q2qi0lqsk9ijksf5biabg4yb7lnx-source.drv'...
    
    trying https://github.com/vlinkz/nixos-conf-editor/archive/0.0.5.tar.gz
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100  671k    0  671k    0     0   826k      0 --:--:-- --:--:-- --:--:--  826k
    unpacking source archive /build/0.0.5.tar.gz
    error: hash mismatch in fixed-output derivation '/nix/store/lv93q2qi0lqsk9ijksf5biabg4yb7lnx-source.drv':
             specified: sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
                got:    sha256-Wst1UmVuE5L+1y6c96I62bXSBAcGYus3i7PFEPd4Jv0=
    
           … while realising the context of path '/nix/store/bqfq4db6nwycmkdrql9igsbrayqsw3g2-source'
    
           at /etc/nixos/configuration.nix:10:24:
    
                9| let
               10|   nixos-conf-editor = (import (pkgs.fetchFromGitHub {
                 |                        ^  
               11|     owner = "vlinkz";
    
           … while evaluating the attribute 'value'
    
    ~ 6.4s [102]
    

    How to fix the configuration?

    Running once-off works with the enable-experimenal flakes command.

    opened by tebowy 2
  • Refactor around nix-data crate

    Refactor around nix-data crate

    Remove handling of package data cache and JSON files in favor of nix-data. This should make loading the application faster, and reduce the amount of memory used.

    opened by vlinkz 0
  • Submit to GNOME Software as a plugin

    Submit to GNOME Software as a plugin

    Currently the software center is its own thing, as Nix functions differently from a normal package manager in many ways. However, I feel it would be ideal to instead make a plugin (possibly on top of an abstraction) and work with GNOME Software devs to allow it to work better with a plugin of this type.

    opened by orowith2os 0
  • `OpenConf` don't work with `nix shell`

    `OpenConf` don't work with `nix shell`

    Commands:

    $ nix shell github:vlinkz/nix-software-center
    $ RUST_LOG=debug RUST_BACKTRACE=full nix-software-center
    INFO  nix_software_center > Resource loaded: /nix/store/visjfp5lb3253q2d7zbmgnspy3v5k2vg-nix-software-center-0.1.0/share/nix-software-center/resources.gresource
    
    (nix-software-center:626907): Gtk-WARNING **: 18:22:17.994: Unknown key gtk-button-images in /home/lev145/.config/gtk-4.0/settings.ini
    
    (nix-software-center:626907): Gtk-WARNING **: 18:22:17.994: Unknown key gtk-menu-images in /home/lev145/.config/gtk-4.0/settings.ini
    
    (nix-software-center:626907): Gtk-WARNING **: 18:22:17.994: Unknown key gtk-toolbar-style in /home/lev145/.config/gtk-4.0/settings.ini
    
    (nix-software-center:626907): Adwaita-WARNING **: 18:22:18.053: Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is unsupported. Please use AdwStyleManager:color-scheme instead.
     DEBUG nix_software_center::ui::window > No config found
     DEBUG nix_software_center::ui::window > userpkgtype: Profile
     DEBUG nix_software_center::ui::window > syspkgtype: None
     DEBUG reqwest::connect                > starting new connection: https://nmcheck.gnome.org/
     INFO  nix_software_center::ui::window > AppMsg::SetDarkMode(true)
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: OpenConf', /build/nix-software-center-0.1.0-vendor.tar.gz/relm4/src/channel/component.rs:67:34
    stack backtrace:
       0:     0x558126da2573 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he3010f3ff51b55ac
       1:     0x558126ddf22c - core::fmt::write::hdfaf46c08a67cd92
       2:     0x558126dbc475 - std::io::Write::write_fmt::h0c8cb8452451d559
       3:     0x558126dc2f34 - std::panicking::default_hook::{{closure}}::h5f89d231703325b8
       4:     0x558126dc2b74 - std::panicking::default_hook::h0daa4414d4591360
       5:     0x558126dc3513 - std::panicking::rust_panic_with_hook::hc7eecadc23f906e1
       6:     0x558126da28d7 - std::panicking::begin_panic_handler::{{closure}}::h425c6c4810da3633
       7:     0x558126da26b4 - std::sys_common::backtrace::__rust_end_short_backtrace::h75a4c4b09ed50e09
       8:     0x558126dc3202 - rust_begin_unwind
       9:     0x5581264c0433 - core::panicking::panic_fmt::hed5cc02befa9fbd6
      10:     0x5581264c0563 - core::result::unwrap_failed::he50d59caf960046c
      11:     0x5581266b91fc - <O as gtk4::auto::button::ButtonExt>::connect_clicked::clicked_trampoline::h5b74f8ce9382e7c6
      12:     0x7f9c5ebe97d9 - _g_closure_invoke_va
      13:     0x7f9c5ec0364d - g_signal_emit_valist
      14:     0x7f9c5ec0394f - g_signal_emit
      15:     0x7f9c5f0c0979 - _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv
      16:     0x7f9c5ebe97d9 - _g_closure_invoke_va
      17:     0x7f9c5ec0364d - g_signal_emit_valist
      18:     0x7f9c5ec0394f - g_signal_emit
      19:     0x7f9c5f18c20e - gtk_gesture_click_end
      20:     0x7f9c5ebec642 - g_cclosure_marshal_VOID__BOXEDv
      21:     0x7f9c5ebe97d9 - _g_closure_invoke_va
      22:     0x7f9c5ec0364d - g_signal_emit_valist
      23:     0x7f9c5ec0394f - g_signal_emit
      24:     0x7f9c5f189247 - _gtk_gesture_check_recognized
      25:     0x7f9c5f18a9bb - gtk_gesture_handle_event
      26:     0x7f9c5f18d82e - gtk_gesture_single_handle_event
      27:     0x7f9c5f15cef6 - gtk_event_controller_handle_event
      28:     0x7f9c5f2e6507 - gtk_widget_run_controllers
      29:     0x7f9c5f2edca4 - _gtk_widget_captured_event
      30:     0x7f9c5f1d467e - gtk_propagate_event_internal
      31:     0x7f9c5f1d4d4b - gtk_main_do_event
      32:     0x7f9c5f2fa1bc - surface_event
      33:     0x7f9c5f3dfca9 - _gdk_marshal_BOOLEAN__POINTER
      34:     0x7f9c5f408cbf - gdk_surface_event_marshaller
      35:     0x7f9c5ebe95af - g_closure_invoke
      36:     0x7f9c5ebfc917 - signal_emit_unlocked_R
      37:     0x7f9c5ec02eef - g_signal_emit_valist
      38:     0x7f9c5ec0394f - g_signal_emit
      39:     0x7f9c5f40c320 - gdk_surface_handle_event
      40:     0x7f9c5f4575ea - gdk_event_source_dispatch
      41:     0x7f9c5eaed9db - g_main_context_dispatch
      42:     0x7f9c5eaedc88 - g_main_context_iterate.constprop.0
      43:     0x7f9c5eaedd3f - g_main_context_iteration
      44:     0x7f9c5ed1810d - g_application_run
      45:     0x5581264f23d1 - relm4::app::RelmApp::run::hd82e66cdfba8b6d0
      46:     0x5581264f320c - nix_software_center::main::h22d487332a554dd6
      47:     0x5581264d6543 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha22543f47596c86e
      48:     0x5581264f17d9 - std::rt::lang_start::{{closure}}::he2872a050c12132c
      49:     0x558126dbb8a8 - std::rt::lang_start_internal::h0b59928b60b7c3a2
      50:     0x5581264f32f8 - main
      51:     0x7f9c5e13624e - __libc_start_call_main
      52:     0x7f9c5e136309 - __libc_start_main@@GLIBC_2.34
      53:     0x5581264c06b5 - _start
      54:                0x0 - <unknown>
    
    opened by LEv145 0
  • Stuck on Loading...

    Stuck on Loading...

    In my terminal I get an error message

    ERROR nix_software_center::ui::windowloading > Error getting NixOS pkgs: error sending request for url (https://channels.nixos.org/nixos-unstable): operation timed out

    I connect to the internet through a SOCKS proxy, does this application actually use $http_proxy to make its connection?

    opened by iopq 0
  • Install multiple Apps at once

    Install multiple Apps at once

    Support installation of multiple packages at once

    As it is probably know, but when we install packages in NixOs with the configuration file we first edit it and than rebuild it. In this method it is normal to add multiple packages to the configuration file and than apply the changes. However, in nix software center the system needs to be rebuild for each installation of a single program.

    When several packages needs to be installed this method is very time consuming. In contrast, when there would be a method to first select multiple packages which should be installed/removed and than apply the changes would be much more efficient.

    Unfortunately I am not a programmer and do not now how hard this feature it is to implement, but maybe it is not that difficult.

    For me this feature would make nix software center an even better program as it is more how the installation of multiple packages with the config file in NixOs works. In addition it would make the usage of the software center more efficient.

    opened by superbm 2
  • Support different sources like Flatpak

    Support different sources like Flatpak

    In my vision, the Nix GUI supports different sources like NixOS stable, unstable and Flatpak. Maybe others if they are relevant. If people should use Nix on other operating systems, i think we have to support their package manager as well. So it would be easier to make GNOME Software support Nix instead of making this support many package managers.

    The sources selection would be a drop-down at the top right (where a different drop-down is currently).

    There can be sources specific settings where you can add, remove or disable sources, disallow/allow unfree, broken, unsecure or unstable packages.

    If there are multiple versions of the same package due to this, the drop down on the install button should show the different versions with source in (). The default can be from your default channel like nixos, but there can also be a setting "preferred source", so you could prefer Flathub.

    The current drop-down options (Run without install, interactive shell) seem quite a special case and can be hidden more. Maybe a second butten right to the install button.

    opened by davidak 1
Owner
Victor Fuentes
Linux fan | he/him
Victor Fuentes
Intuitive GTK4/LibAdwaita music player

Resonance Harmonize your listening experience with Resonance. Resonance is an intuitive music player application written in Rust & Python, with a clea

Nathanael 25 Apr 7, 2023
Generate Nix packages from URLs

Generate Nix packages from URLs with hash prefetching, dependency inference, license detection, and more

Nix community projects 130 Feb 5, 2023
A `nix` and `nix-shell` wrapper for shells other than `bash`

nix-your-shell A nix and nix-shell wrapper for shells other than bash. nix develop and nix-shell use bash as the default shell, so nix-your-shell prin

Mercury 15 Apr 10, 2023
Manage your dotfiles and packages with ease. Define your $HOME as Code 💻 🚀 ✨

EnvHub is a simple tool to manage dotfiles and packages accross multiple machines. Written in Rust, internally it uses nix/homebrew/pkgx/devbox to man

Tsiry Sandratraina 8 Oct 27, 2023
Progress In Nix - Pacman inspired frontend for Nix

Progress In Nix Pinix is a Pacman inspired frontend for Nix. It wraps a regular Nix command and replaces the output with a more modern and informative

Rémi Dupré 23 Mar 9, 2024
A small utility that moves the start menu to the top-center of the screen in Windows 11.

TopCenterStart11 A small utility that moves the start menu to the top-center of the screen in Windows 11. As of right now, this application can only p

Ryan de Jonge 12 Nov 12, 2022
nix2sbom extracts the SBOM (Software Bill of Materials) from a Nix derivation

nix2sbom nix2sbom extracts the SBOM (Software Bill of Materials) from a Nix derivation ?? Documentation for using nix2sbom is here Warning This repo i

null 6 Aug 30, 2023
A CLI companion tool for paste.misterio.me, allowing you to easily upload and manage your pastes

This is a CLI companion tool for paste.misterio.me, allowing you to easily upload and manage your pastes, as well as download any pastes you want.

Gabriel Fontes 1 Jan 26, 2022
TMM is a Linux native game modding tool. it allows to install and depoly mods for Linux native and wine games.

Tux Mod Manager TMM is a Linux native mod manager made with the Tauri toolkit. It can install, load, remove and deploy mods for both Linux native and

Mathiew May 119 Dec 27, 2022
My own image file format created for fun! Install the "hif_opener.exe" to open hif files. clone the repo and compile to make your own hif file

Why am i creating this? I wanted to create my own image format since I was 12 years old using Windows 7, tryna modify GTA San Andreas. That day, when

hiftie 3 Dec 17, 2023
Install a package with e.g. `hdn add pkgs.hello`

hdn: utility for updating home.nix Home Manager is great, but it's tedious to run home-manager edit, add your package to the file, and run home-manage

Fisher Sun 13 Jun 16, 2023
A flexible simple theme manager for *nix systems

tema A theme manager for *nix systems respecting the FHS spec configuration As of now all the configuration is done via $XDG_CONFIG_HOME/tema/config.y

lb06 2 Sep 23, 2022
Downloads and provides debug symbols and source code for nix derivations to gdb and other debuginfod-capable debuggers as needed.

nixseparatedebuginfod Downloads and provides debug symbols and source code for nix derivations to gdb and other debuginfod-capable debuggers as needed

Guillaume Girol 16 Mar 6, 2023
Interface definition generator and standard for Move packages.

Move IDL Interface definition generator and standard for Move packages. Documentation is currently extremely sparse but will be improved in the near f

The Moving Company 10 Aug 25, 2022
Fast KubeJS script manager. Includes version control and compatibility with KJSPKG packages.

CarbonJS A KubeJS script manager Features ?? Super fast ⚙️ Version control ?? Constantly new scripts being added ✅ Easy to use ?? Compatibility with K

Krzysztof Poręba 3 May 9, 2023
Check the reproducibility status of your Arch Linux packages (read-only mirror)

arch-repro-status A CLI tool for querying the reproducibility status of the Arch Linux packages using data from a rebuilderd instance such as reproduc

Arch Linux 12 Nov 16, 2022
Search PyPI for packages from the command line.

PPS -- Python Package Index Search Search the PyPI for packages by name, which was done by pip search in the past. This was heavily inspired by pip_se

null 5 Nov 2, 2021
A Rust CLI to provide last publish dates for packages in a package-lock.json file

NPM Package Age A Rust CLI which if you provide a npm lockfile (package-lock.json to start), it will give you a listing of all of the packages & the l

Benjamin Lannon 1 Feb 4, 2022
Readme generator for Move packages.

Move Readme Readme generator for Move packages. Documentation is currently extremely sparse but will be improved in the near future. Setup Install the

The Moving Company 2 Jul 31, 2022