Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/fuwn/rui

❄ Personal NixOS Flake Manager
https://github.com/fuwn/rui

go golang home-manager nix nixos

Last synced: about 11 hours ago
JSON representation

❄ Personal NixOS Flake Manager

Awesome Lists containing this project

README

        

# ❄ 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)

```nix
{
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.

```nix
# ...

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

# ...
```

### Configure Rui Using Home Manager

```nix
{
programs.rui = {
enable = true;

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

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

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

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

### 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.

```nix
# 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](https://bark.day.app/#/?id=%E6%BA%90%E7%A0%81), an
extremely simple and easy-to-use notification service for iOS devices.

```sh
#!/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`

```text
NAME:
rui - Personal NixOS Flake Manager

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

DESCRIPTION:
Personal NixOS Flake Manager

AUTHOR:
Fuwn

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](./LICENSE.txt).