treewide: implement auto importing for modules
Reduce maintenance burden and increase efficiency by automatically importing modules following a specific convention. Co-authored-by: awwpotato <awwpotato@voidq.com> Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
parent
fefeb0e928
commit
4fca600cb1
461 changed files with 72 additions and 474 deletions
74
modules/programs/info/default.nix
Normal file
74
modules/programs/info/default.nix
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
# info.nix -- install texinfo and create `dir` file
|
||||
|
||||
# This is a helper for the GNU info documentation system. By default,
|
||||
# the `info` command (and the Info subsystem within Emacs) gives easy
|
||||
# access to the info files stored system-wide, but not info files in
|
||||
# your ~/.nix-profile.
|
||||
|
||||
# Specifically, although info can then find files when you explicitly
|
||||
# ask for them, it doesn't show them to you in the table of contents
|
||||
# on startup. To do that requires a `dir` file. NixOS keeps the
|
||||
# system-wide `dir` file up to date, but ignores files installed in
|
||||
# user profiles.
|
||||
|
||||
# This module contains extra profile commands that generate the `dir`
|
||||
# for your home profile. Then when you start info (and both `dir`
|
||||
# files are in your $INFOPATH), it will *merge* the contents of the
|
||||
# two files, showing you a unified table of contents for all packages.
|
||||
# This is really nice.
|
||||
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
|
||||
cfg = config.programs.info;
|
||||
|
||||
# Installs this package -- the interactive just means that it
|
||||
# includes the curses `info` program. We also use `install-info`
|
||||
# from this package in the activation script.
|
||||
infoPkg = pkgs.texinfoInteractive;
|
||||
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
(lib.mkRemovedOptionModule [ "programs" "info" "homeInfoDirLocation" ] ''
|
||||
The `dir` file is now generated as part of the Home Manager profile and
|
||||
will no longer be placed in your home directory.
|
||||
'')
|
||||
];
|
||||
|
||||
options.programs.info.enable = lib.mkEnableOption "GNU Info";
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [
|
||||
infoPkg
|
||||
|
||||
# Make sure the target directory is a real directory.
|
||||
(pkgs.runCommandLocal "dummy-info-dir1" { } "mkdir -p $out/share/info")
|
||||
(pkgs.runCommandLocal "dummy-info-dir2" { } "mkdir -p $out/share/info")
|
||||
];
|
||||
|
||||
home.extraOutputsToInstall = [ "info" ];
|
||||
|
||||
home.extraProfileCommands =
|
||||
let
|
||||
infoPath = "$out/share/info";
|
||||
in
|
||||
''
|
||||
if [[ -w "${infoPath}" && ! -e "${infoPath}/dir" ]]; then
|
||||
PATH="${
|
||||
lib.makeBinPath [
|
||||
pkgs.gzip
|
||||
infoPkg
|
||||
]
|
||||
}''${PATH:+:}$PATH" \
|
||||
find -L "${infoPath}" \( -name '*.info' -o -name '*.info.gz' \) \
|
||||
-exec install-info '{}' "${infoPath}/dir" ';'
|
||||
fi
|
||||
'';
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue