mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-02-07 12:19:07 +00:00
programs/pop-launcher: create module
This is to easily install launcher plugins and scripts in NixOS. I don't know if this is also possible on home-manager (which I think it could be since it also has the capability to set files).
This commit is contained in:
parent
b6010f92a2
commit
6fb793d24a
75
modules/home-manager/programs/pop-launcher.nix
Normal file
75
modules/home-manager/programs/pop-launcher.nix
Normal file
@ -0,0 +1,75 @@
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.programs.pop-launcher;
|
||||
|
||||
# This assumes the package contains the built-in plugins being symlinked to
|
||||
# the main binary with absolute paths. Most sensibly, the nixpkgs builder
|
||||
# will rewrite symlinks relative to its output directory. Since we're putting
|
||||
# them outside of its output directory, we'll have to stop it from doing
|
||||
# that.
|
||||
package = cfg.package.overrideAttrs (prev: {
|
||||
dontRewriteSymlinks = true;
|
||||
});
|
||||
|
||||
# Plugins and scripts are assumed to be packaged at
|
||||
# `$out/share/pop-launcher`.
|
||||
pluginsDir = pkgs.symlinkJoin {
|
||||
name = "pop-launcher-plugins-system";
|
||||
paths = builtins.map (p: "${p}/share/pop-launcher") (cfg.plugins ++ [ package ]);
|
||||
};
|
||||
in
|
||||
{
|
||||
options.programs.pop-launcher = {
|
||||
enable = lib.mkOption {
|
||||
description = ''
|
||||
Whether to enable Pop launcher, a launcher service for application
|
||||
launchers.
|
||||
|
||||
Take note you have to install an application launcher frontend to make
|
||||
use of this such as <command>onagre</command> or
|
||||
<command>cosmic-launcher</command>.
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
description = ''
|
||||
The package where <command>pop-launcher</command> binary and
|
||||
built-in plugins are expected.
|
||||
'';
|
||||
default = pkgs.pop-launcher;
|
||||
};
|
||||
|
||||
plugins = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
description = ''
|
||||
List of packages containing Pop launcher plugins and scripts to be
|
||||
installed as system-wide plugins.
|
||||
'';
|
||||
default = [];
|
||||
defaultText = "[]";
|
||||
example = lib.literalExpression ''
|
||||
with pkgs; [
|
||||
pop-launcher-plugin-duckduckgo-bangs
|
||||
pop-launcher-plugin-jetbrains
|
||||
];
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# The local plugin path is hardcoded so we'll also do that instead of
|
||||
# properly setting in `xdg.dataFile`.
|
||||
home.file.".local/share/pop-launcher" = lib.mkIf (cfg.plugins != []) {
|
||||
source = pluginsDir;
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
pop-launcher
|
||||
];
|
||||
};
|
||||
}
|
75
modules/nixos/programs/pop-launcher.nix
Normal file
75
modules/nixos/programs/pop-launcher.nix
Normal file
@ -0,0 +1,75 @@
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.programs.pop-launcher;
|
||||
|
||||
# This assumes the package contains the built-in plugins being symlinked to
|
||||
# the main binary with absolute paths. Most sensibly, the nixpkgs builder
|
||||
# will rewrite symlinks relative to its output directory. Since we're putting
|
||||
# them outside of its output directory, we'll have to stop it from doing
|
||||
# that.
|
||||
package = cfg.package.overrideAttrs (prev: {
|
||||
dontRewriteSymlinks = true;
|
||||
});
|
||||
|
||||
# Plugins and scripts are assumed to be packaged at
|
||||
# `$out/share/pop-launcher`.
|
||||
pluginsDir = pkgs.symlinkJoin {
|
||||
name = "pop-launcher-plugins-system";
|
||||
paths = builtins.map (p: "${p}/share/pop-launcher") (cfg.plugins ++ [ package ]);
|
||||
};
|
||||
in
|
||||
{
|
||||
options.programs.pop-launcher = {
|
||||
enable = lib.mkOption {
|
||||
description = ''
|
||||
Whether to enable Pop launcher, a launcher service for application
|
||||
launchers.
|
||||
|
||||
Take note you have to install an application launcher frontend to make
|
||||
use of this such as <command>onagre</command> or
|
||||
<command>cosmic-launcher</command>.
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
description = ''
|
||||
The package where <command>pop-launcher</command> binary and
|
||||
built-in plugins are expected.
|
||||
'';
|
||||
default = pkgs.pop-launcher;
|
||||
};
|
||||
|
||||
plugins = lib.mkOption {
|
||||
# Wait, why isn't this working? WHY IS THIS NOT WORKING?!
|
||||
#type = with lib.types; listOf package;
|
||||
type = lib.types.listOf lib.types.package;
|
||||
description = ''
|
||||
List of packages containing Pop launcher plugins and scripts to be
|
||||
installed as system-wide plugins.
|
||||
'';
|
||||
default = [];
|
||||
defaultText = "[]";
|
||||
example = lib.literalExpression ''
|
||||
with pkgs; [
|
||||
pop-launcher-plugin-duckduckgo-bangs
|
||||
pop-launcher-plugin-jetbrains
|
||||
];
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.etc.pop-launcher = lib.mkIf (cfg.plugins != []) {
|
||||
source = pluginsDir;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
pop-launcher
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user