Use NixOS Without Coding

Related tags

nix-gui
Overview

(Work in Progress)

Nix-Gui

Make NixOS usable for non-technical users through a settings / package management GUI.

screenshots/historical_2021_06_23.gif

Motives

The declarative nature of NixOS provides it the capability of being the most user friendly linux distro. No more editing dotfiles, /etc files, manually writing timers, services, running commands to manage and create users and groups, etc. NixOS integrates all of that into a declarative system, and this project integrates NixOS’ declarative system into a GUI.

Serve Users Unfamiliar with or Learning Nix

Nix-Gui is a configuration management tool designed for those who haven’t mastered the (arguably difficult) nix language. It is also an attempt to replicate the ease of use of popular configuration systems including

  • Ubuntu’s Unity System Settings
  • Mint’s Cinnimon Settings
  • Synaptic Package Manager

Nix-Gui is designed to gradually and comfortably teach users about the mechanics of the nix language and nixpkgs.

Serve as an Effective System Management Tool for Experienced Users

At the most advanced level, and once feature parity has been achieved. Power users should be capable of changing system configuration, creating system ISOs, deploying systems to the cloud, etc in Nix-Gui more intelligibly and faster than through their traditional means of writing a nix module.

Serve Mobile Users

An additional motive for this project is to enable system configuration for mobile devices without having to type code on your phone.

Docs

Contributing

Non-developers (and interested developers), if you want to help, please

  • Run the application and submit bug report issues on GitHub.
  • Contact me on matrix (details below) to help more directly with UX testing.

Developers, if you’re interested in contributing, you may

  • Review the code, run the application, and point out potential improvements, flaws, and bugs by submitting issues.
  • Review milestones and issues and create pull requests to address bugs and missing features.
  • Contribute to important dependencies including rnix-parser and rnix-lsp.
  • Contact me on matrix to discuss.

Contact

Contact me on Matrix (andrew:mtx.rew.la)

Issues
  • Implement basic save functionality

    Implement basic save functionality

    fixes https://github.com/nix-gui/nix-gui/issues/18

    Edit:

    test_load_edit_save showed a major weakness in the API: StateModels aren't independent. That is if you edit a state and persist it, loading a new StateModel will result in retrieval of the pre-edit state. This is because get_option_data is wrapped with lru_cache.

    Therefore to get the test working I stripped the lru_cache decorator. This results in redundant calculations of modules options, and the tests take over 600 seconds on my end. Therefore in this PR I will also:

    • [x] resolve https://github.com/nix-gui/nix-gui/issues/49
    • [x] write a cache decorator which checks if the contents of a file have changed, otherwise returns the cached result
    opened by lapp0 9
  • [WIP] Nix refactor

    [WIP] Nix refactor

    null

    opened by adrianparvino 4
  • Fix run commands

    Fix run commands

    The commands required to run doesn't seem to require me to use executable name (errors because nix-gui isn't a valid command argument)

    Tested on NixOS 21.11 (Porcupine) x86_64.

    opened by Lillecarl 4
  • Singleton options may be broken

    Singleton options may be broken

    https://github.com/nix-gui/nix-gui/pull/80/files#diff-d0d6622e4d148a2bd4c8868338287e7ac39d8c1a3c6da3b46f4841f9ae2323fcR61-R67

    2021-08-12-004135_1920x1050_scrot

    opened by adrianparvino 4
  • How to run it ?

    How to run it ?

    Hi

    I just tried to run it, but it didn't work

    nixFlakes run github:lapp0/nix-gui
    warning: ignoring the user-specified setting 'experimental-features', because it is a restricted setting and you are not a trusted user
    Traceback (most recent call last):
      File "/nix/store/q3yrkldj3jh44z1n4w6i8pa50jcs0sii-python3.8-nix-gui-0.1.0/bin/.nix-gui-wrapped", line 9, in <module>
        sys.exit(main())
      File "/nix/store/q3yrkldj3jh44z1n4w6i8pa50jcs0sii-python3.8-nix-gui-0.1.0/lib/python3.8/site-packages/nixui/gui.py", line 66, in main
        statemodel = state_model.StateModel()
      File "/nix/store/q3yrkldj3jh44z1n4w6i8pa50jcs0sii-python3.8-nix-gui-0.1.0/lib/python3.8/site-packages/nixui/state_model.py", line 14, in __init__
        for opt in api.get_options_dict().keys()
      File "/nix/store/q3yrkldj3jh44z1n4w6i8pa50jcs0sii-python3.8-nix-gui-0.1.0/lib/python3.8/site-packages/nixui/api.py", line 13, in get_options_dict
        res = json.load(open('./release_out/share/doc/nixos/options.json'))
    FileNotFoundError: [Errno 2] No such file or directory: './release_out/share/doc/nixos/options.json'
    

    What should I do to be able to run it ?

    opened by pinage404 3
  • Implement Attribute Set

    Implement Attribute Set

    • [x] Implement OptionTable for lookup, addition, and deletion of options
    • [x] All tests pass
    • [x] AttributeSetOf proper functioning including loading (fixes https://github.com/nix-gui/nix-gui/issues/29)

    Note: OptionTabs was also disabled in this PR

    Further improvements left to https://github.com/nix-gui/nix-gui/issues/72

    opened by lapp0 3
  • Use makeWrapperArgs to inject rnix

    Use makeWrapperArgs to inject rnix

    opened by adrianparvino 3
  • QT Window not opening when running with basic config

    QT Window not opening when running with basic config

    Calling CONFIGURATION_PATH=/etc/nixos/configuration.nix nix run github:lapp0/nix-gui with minimal config leads to a qt window being opened for the fraction of a second and then aborting with an error. Qtile is installed with home manager and works with other applications.

    Config I tried to use:

    { config, pkgs, ... }:
    
    {
      imports =
        [
          ./hardware-configuration.nix
        ];
    
      boot.loader.systemd-boot.enable = true;
      boot.loader.efi.canTouchEfiVariables = true;
      nixpkgs.config.allowUnfree = true;
    
      networking.hostName = "nixos"; # Define your hostname.
    
      time.timeZone = "Europe/Berlin";
    
      networking.useDHCP = false;
      networking.interfaces.enp0s31f6.useDHCP = true;
    
      i18n.defaultLocale = "en_US.UTF-8";
      console = {
        font = "Lat2-Terminus16";
        keyMap = "us";
      };
    
      services.xserver.enable = true;
      services.xserver.displayManager.sddm.enable = true;
      services.xserver.desktopManager.plasma5.enable = true;
    
    
      services.xserver.layout = "us";
      services.xserver.xkbOptions = "eurosign:e";
    
      services.printing.enable = true;
    
      sound.enable = true;
      hardware.pulseaudio.enable = true;
    
    
      users.users.vincenzo = {
        isNormalUser = true;
        initialPassword = "password";
        extraGroups = [ "wheel" ];
      };
    
      services.openssh.enable = true;
      system.autoUpgrade = {
    	enable = true;
      };
      system.stateVersion = "20.09";
    
      nix = {
    	trustedUsers = [ "root" "vincenzo" ];
      };
    }
    

    Error message I received:

    Traceback (most recent call last):
      File "/nix/store/fdazal8y5az6vg0z5r8d6wb82ys4j5pi-python3.8-nix-gui-0.1.0/lib/python3.8/site-packages/nixui/richtext.py", line 15, in paint
        textRect = style.subElementRect(QtWidgets.QStyle.SE_ItemViewItemText, option)
    TypeError: subElementRect(self, QStyle.SubElement, QStyleOption, QWidget): not enough arguments
    Aborted (core dumped)
    
    opened by DerDoni 3
  • Setup Basic Integration Test

    Setup Basic Integration Test

    implement testing

    fixes https://github.com/lapp0/nix-gui/issues/15

    opened by lapp0 2
  • [WIP] Add FloatField

    [WIP] Add FloatField

    Fixes issue #52 but not sure if it works fully.

    opened by boredom101 1
  • Enable back button

    Enable back button

    • make back button go to previous URI (fixes #126)
    • fix bug where program crashes on illegal URI, instead revert to previous URI (fixes #93)
    opened by lapp0 0
  • Improve look and feel for dark themes

    Improve look and feel for dark themes

    https://stackoverflow.com/questions/48256772/dark-theme-for-qt-widgets/48256803#48256803

    https://github.com/nix-gui/nix-gui/issues/129#issuecomment-940381243

    opened by lapp0 0
  • UX Survey

    UX Survey

    Please answer any of following questions in the comment section below:

    1. Under what name or alias would you like to be credited for your answers? (Default/unanswered = "anonymous")

    2. What would you would change about how Nix-Gui behaves?

    3. What functionality would you expect Nix-Gui to have that it doesn't?

    4. What is the most difficult part of finding / editing an option?

    5. What non-obvious behavior did you encounter when using Nix-Gui?

    6. What other question should I ask in this survey (and what is your answer?)

    opened by lapp0 4
  • profile navlist color selection and optimize

    profile navlist color selection and optimize

    Navlist colors are set based on whether the option or a descendant is changed either in configuration or in memory. This is operation more expensive than it should be.

    opened by lapp0 0
  • display correct number of descendants

    display correct number of descendants

    get correct number of children (e.g. options:sound is wrong, says 4, is really 5), meaning it's looking at direct children, not descendants

    opened by lapp0 0
  •  enable

    enable "back" button in navbar

    enable "back" button in navbar

    • related; fix bug when looking up invalid option path in navbar: treelib.exceptions.NodeIDAbsentError: Node 'environment.cinnimon' is not in the tree (Inputting an inexistent path to the navigation bar crashes it #93)
    opened by lapp0 0
  • Change type of path in navbar

    Change type of path in navbar

    select undefined, expression, or reference via dropdown for selected path in navbar.

    opened by lapp0 0
  • Implement CHECK DESCENDANTS

    Implement CHECK DESCENDANTS

    null

    opened by lapp0 0
  • Option

    Option "Example" in ToolTip

    Currently options have description and type metadata in the ToolTip. We should also include the example from nixpkgs

    good first issue 
    opened by lapp0 0
A keyboard-driven, vim-like browser based on PyQt5.

qutebrowser is a keyboard-focused browser with a minimal GUI. It’s based on Python and PyQt5 and free software, licensed under the GPL.

qutebrowser 7.3k Oct 23, 2021
Edifice: a declarative GUI library for Python

Edifice is a Python library for building reactive UI, inspired by modern Javascript libraries such as React.

David Ding 77 Oct 9, 2021
pyglet is a cross-platform windowing and multimedia library for Python, for developing games and other visually rich applications.

pyglet pyglet is a cross-platform windowing and multimedia library for Python, intended for developing games and other visually rich applications. It

null 950 Oct 22, 2021
Turn (almost) any Python command line program into a full GUI application with one line

Gooey Turn (almost) any Python 2 or 3 Console Program into a GUI application with one line Support this project Table of Contents Gooey Table of conte

Chris 15k Oct 22, 2021
🏆 A ranked list of awesome python libraries for web development. Updated weekly.

Best-of Web Development with Python ?? A ranked list of awesome python libraries for web development. Updated weekly. This curated list contains 540 a

Machine Learning Tooling 1.4k Oct 22, 2021
Declarative User Interfaces for Python

Welcome to Enaml Enaml is a programming language and framework for creating professional-quality user interfaces with minimal effort. What you get A d

null 1.1k Oct 15, 2021
System Tray Icon for PySimpleGUI (the tkinter version). Adds a system tray icon by using pystray and PIL

psgtray Add a System Tray Icon to your tkinter port of PySimpleGUI. Installation via pip Installation is via pip: python -m pip install psgtray or if

PySimpleGUI 9 Oct 14, 2021
A little Python library for making simple Electron-like HTML/JS GUI apps

Eel Eel is a little Python library for making simple Electron-like offline HTML/JS GUI apps, with full access to Python capabilities and libraries. Ee

Chris Knott 4.6k Oct 22, 2021
A library for building modern declarative desktop applications in WX.

re-wx is a library for building modern declarative desktop applications. It's built as a management layer on top of WXPython, which means you get all the goodness of a mature, native, cross-platform UI kit, wrapped up in a modern, React inspired API.

Chris 92 Oct 12, 2021
A lightweight file-copying interface.

autosort A lightweight file-copying interface. Preview What is autosort? Autosort is a lightweight file-copying interface. It allows you to copy sever

null 29 Jun 17, 2021
Multi-handle range slider widget for PyQt/PySide

QtRangeSlider The missing multi-handle range slider widget for PyQt & PySide The goal of this package is to provide a Range Slider (a slider with 2 or

Talley Lambert 16 Oct 7, 2021
A GUI for designing Python GUI's for PySimpleGUI.

SimpleGUIBuilder A GUI for designing Python GUI's for PySimpleGUI. Installation There is none :) just download the file from a release and run it. Don

Miguel Martins 50 Oct 16, 2021
A hotkey manager that runs in the system tray. Uses PySimpleGUI for the GUI and the system tray.

PySimpleHotkey PySimpleHotkey A hotkey manager that runs in the system tray. Uses PySimpleGUI for the GUI and the system tray. Packages Used This proj

PySimpleGUI 15 Oct 17, 2021
Write desktop and web apps in pure Python

Flexx Want to stay up-to-date about (changes to) Flexx? Subscribe to the NEWS issue. Introduction Flexx is a pure Python toolkit for creating graphica

flexxui 2.8k Oct 14, 2021
Write desktop and web apps in pure Python

Flexx Want to stay up-to-date about (changes to) Flexx? Subscribe to the NEWS issue. Introduction Flexx is a pure Python toolkit for creating graphica

flexxui 2.8k Oct 15, 2021
Textual is a TUI (Text User Interface) framework for Python inspired by modern web development.

Textual is a TUI (Text User Interface) framework for Python inspired by modern web development.

Will McGugan 5.8k Oct 18, 2021
UberGui is a lightweight multi-threaded, webRender UI module for TouchDesigner

UberGui V4 UberGui is a lightweight multi-threaded, webRender UI module for TouchDesigner projects. The aim is to solve the trifecta of challenges bui

LUCAS M MORGAN 38 Jun 19, 2021
A Minimalistic Backup GUI for your Windows, Mac or Linux

BlobBackup is a minimalistic backup utility for your Windows, Mac or Linux computer. With an excellent engine, extensive storage support, and an easy

Bimba Shrestha 123 Oct 11, 2021