rui

❄ NixOS Flake Manager

GPL-3.0 License

Stars
3

❄ Rui

Rui is my personal NixOS flake manager. It isn't very unique to my system at the moment, so anyone can use it.

Useful Commands

  • rui edit - Open and edit your flake directory from anywhere
  • rui home/os switch - Rebuild and switch your home or OS flake configuration
    from anywhere
  • rui home news - Show the latest news from your Home Manager configuration
    packages

Installation

Add to Flake Inputs (for Flakes Users)

{
  inputs.rui = {
    url = "github:Fuwn/rui";
    inputs.nixpkgs.follows = "nixpkgs"; # Recommended
  };
}

Add to Home Manager (Managed Configuration)

This method manages the configuration for you with Nix.

# ...

inputs.home-manager.lib.homeManagerConfiguration {
  modules = [
    inputs.rui.homeManagerModules.${builtins.currentSystem}.default
  ];
};

# ...

Configure Rui Using Home Manager

{
  programs.rui = {
    enable = true; # Defaults to false

    settings = {
      # Status notifications via `notify-send`; defaults to false
      notify = true;

      # The command to use for sending notifications, view a cool example below;
      # defaults to `notify-send`
      notifier = "notify-send";

      # Rui falls back on the `FLAKE_EDITOR` and `EDITOR` environment variables
      # if `editor` is unset
      editor = "code";

      # Rui falls back on the `FLAKE` environment variable if `flake` is unset
      flake = "/path/to/your-flake";

      # Allow unfree packages on the global level; defaults to false
      allow-unfree = false;

      # Allow insecure packages on the global level; defaults to false
      allow-insecure = false;

      # Extra arguments to pass to `nixos-rebuild` and `home-manager`; defaults
      # to [ ]
      extra-args = [ "--impure" ];
    };
  };
}

Add to System or Home Manager Packages (Manual Configuration)

Using this method, configuration is done manually by the user in the $HOME/.config/rui/config.json file.

# For flakes users
rui.packages.${pkgs.system}.default

# For non-flakes users
(import (
  pkgs.fetchFromGitHub {
    owner = "Fuwn";
    repo = "rui";
    rev = "...";  # Use the current commit revision hash
    hash = "..."; # Use the current commit sha256 hash
  }
)).packages.${builtins.currentSystem}.default

Custom Notification Command Example

Rui uses notify-send by default for sending notifications, but you can set the notifier configuration value to any file path. Here's an example of a distributed notification script that sends notifications to your phone and your PC. This can easily be adapted to send notifications to any service, e.g., Telegram, Discord, other webhook receivers, etc.

This example uses Bark, an extremely simple and easy-to-use notification service for iOS devices.

#!/usr/bin/env dash

# Send a notification to your host PC
notify-send "$1" "$2"

# Send a notification to your iOS device
curl -X "POST" "https://api.day.app/your_bark_api_key" \
  -H 'Content-Type: application/json; charset=utf-8' \
  --silent \
  -d '{
    "body": "'"${2}"'",
    "title": "'"${1}"'",
    "icon": "https://nixos.wiki/images/thumb/2/20/Home-nixos-logo.png/207px-Home-nixos-logo.png"
  }'

--help

NAME:
   rui - Personal NixOS Flake Manager

USAGE:
   rui [global options] command [command options]

DESCRIPTION:
   Personal NixOS Flake Manager

AUTHOR:
   Fuwn <[email protected]>

COMMANDS:
   home
   os
   edit
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --allow-unfree  (default: false)
   --help, -h      show help

COPYRIGHT:
   Copyright (c) 2024-2024 Fuwn

Licence

This project is licensed with the GNU General Public License v3.0.