diff --git a/modules/misc/news.nix b/modules/misc/news.nix index db2a15abd..6a1807f1d 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1782,6 +1782,13 @@ in A new module is available: 'programs.rofi.pass'. ''; } + + { + time = "2020-12-31T14:16:47+00:00"; + message = '' + A new module is available: 'programs.octant'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 292037d93..38cd815e7 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -103,6 +103,7 @@ let (loadModule ./programs/notmuch.nix { }) (loadModule ./programs/nushell.nix { }) (loadModule ./programs/obs-studio.nix { }) + (loadModule ./programs/octant.nix { }) (loadModule ./programs/offlineimap.nix { }) (loadModule ./programs/opam.nix { }) (loadModule ./programs/password-store.nix { }) diff --git a/modules/programs/octant.nix b/modules/programs/octant.nix new file mode 100644 index 000000000..347d0d468 --- /dev/null +++ b/modules/programs/octant.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.octant; + + mkPluginEnv = packages: + let + pluginDirs = map (pkg: "${pkg}/bin") packages; + plugins = concatMapStringsSep " " (p: "${p}/*") pluginDirs; + in pkgs.runCommandLocal "octant-plugins" { } '' + mkdir $out + [[ '${plugins}' ]] || exit 0 + for plugin in ${plugins}; do + ln -s "$plugin" $out/ + done + ''; + +in { + meta.maintainers = with maintainers; [ jk ]; + + options = { + programs.octant = { + enable = mkEnableOption "octant"; + + package = mkOption { + type = types.package; + default = pkgs.octant; + defaultText = literalExample "pkgs.octant"; + example = literalExample "pkgs.octant-other"; + description = "The Octant package to use."; + }; + + plugins = mkOption { + default = [ ]; + example = literalExample "[ pkgs.starboard-octant-plugin ]"; + description = "Optional Octant plugins."; + type = types.listOf types.package; + }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + xdg.configFile."octant/plugins" = + mkIf (cfg.plugins != [ ]) { source = mkPluginEnv cfg.plugins; }; + }; +}