Skip to content

Commit

Permalink
Adding nix home-manager module
Browse files Browse the repository at this point in the history
  • Loading branch information
pfgray committed Sep 4, 2024
1 parent 4f915e2 commit 766a0fe
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 2 deletions.
10 changes: 8 additions & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (
let
tabryHmModule = import ./nix/tabry-hm-module.nix;
in flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages."${system}";
Expand All @@ -24,5 +26,9 @@
'';
};
}
);
) // {
homeModules = {
tabry = tabryHmModule;
};
};
}
33 changes: 33 additions & 0 deletions nix/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Tabry Nix Configurations

### Home Manager Module

This repository provides a home-manager (https://github.com/nix-community/home-manager)
module to make tabry easy to install and use via home manager.

To use the home-manager module via flakes, add this module to your home-manager
configuration:

```nix
{
inputs = {
tabry.url = "github:evanbattaglia/tabry-rs";
};
outputs = { ..., tabry }: {
homeConfigurations.<user> = {
modules = [
tabry.homeModules.tabry
{
config.programs.tabry = {
enable = true;
enableBashIntegration = true;
tabryFiles = [
./zellij.tabry
];
};
}
]
}
};
}
```
68 changes: 68 additions & 0 deletions nix/tabry-hm-module.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{ config, lib, pkgs, ... }:

# This file contains a Home Manager module that installs tabry
# and sets up tabry configuration files to be used by tabry
#
let

cfg = config.programs.tabry;

tabry = pkgs.callPackage ../default.nix {};

# converts /nix/store/.../foo.tabry to "foo"
commandNameFromTabryFilename = fileName:
(builtins.replaceStrings [".tabry"] [""] (builtins.baseNameOf fileName));

mkInitFish = fileName: let
commandName = commandNameFromTabryFilename fileName;
in ''
tabry_completion_init ${commandName}
'';

tabryFileDir = pkgs.stdenv.mkDerivation {
name = "tabry-files";
dontUnpack = true;
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out
cp {${builtins.concatStringsSep "," cfg.tabryFiles}} $out
'';
};

in {

options.programs.tabry = {
enable = lib.mkEnableOption "tabry, a tab completion library";
enableFishIntegration = lib.mkEnableOption "enables fish completions";
enableBashIntegration = lib.mkEnableOption "enables bash completions";
tabryFiles = lib.mkOption {
type = with lib.types; listOf path;
default = [];
description = ''
*.tabry files to be compiled to completion json
'';
};
};

config = lib.mkIf cfg.enable {
home.packages = [tabry];

# for each file, compile it to json
# then add the dir to $TABRY_IMPORTS_PATH

programs.fish.shellInit = lib.mkIf cfg.enableFishIntegration (
''
set -x TABRY_IMPORTS_PATH "${tabryFileDir}:$TABRY_IMPORTS_PATH"
${tabry}/bin/tabry fish | source
${builtins.concatStringsSep "\n" (map mkInitFish cfg.tabryFiles)}
''
);

programs.bash.initExtra = lib.mkIf cfg.enableBashIntegration (
''
export TABRY_IMPORTS_PATH="${tabryFileDir}:$TABRY_IMPORTS_PATH"
source <(${tabry}/bin/tabry bash)
''
);
};
}

0 comments on commit 766a0fe

Please sign in to comment.