aboutsummaryrefslogtreecommitdiffstats
path: root/modules/system/nix-update/default.nix
blob: 9f93a4e135e6aaf5f177a96bd556dedcbe0199bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Update NixOS and/or Home Manager flake configuration
{
  config,
  lib,
  pkgs,
  ...
}:
let
  nixUpdateScript = pkgs.writeShellApplication {
    name = "nix-update";
    runtimeInputs = [
      pkgs.git
      pkgs.nix
      config.programs.home-manager.package
      config.terminal.bash.package
    ];
    text = builtins.readFile ./nix-update.sh;
  };

  nixUpdateCompletion =
    pkgs.runCommand "nix-update-completion"
      {
        nativeBuildInputs = [ pkgs.installShellFiles ];
      }
      ''
        mkdir -p $out/share/zsh/site-functions
        installShellCompletion --zsh --name _nix-update ${pkgs.writeText "nix-update.zsh" (builtins.readFile ./nix-update.zsh)}
      '';

  nixUpdate = pkgs.symlinkJoin {
    name = "nix-update";
    paths = [
      nixUpdateScript
      nixUpdateCompletion
    ];
    meta = nixUpdateScript.meta or { };
  };
in
{
  options.system.nix-update = {
    enable = lib.mkEnableOption "Update NixOS and/or Home Manager flake configuration";

    package = lib.mkOption {
      type = lib.types.package;
      readOnly = true;
      default = nixUpdate;
      description = "The nix-update script package.";
    };
  };

  config = lib.mkIf config.system.nix-update.enable {
    home.packages = [ config.system.nix-update.package ];
  };
}