Skip to content

Commit

Permalink
init: nix support (#1131)
Browse files Browse the repository at this point in the history
* init(nix): initial nix support

* nix(compat): add flake-compat

* remove `macro expansion`

* remove `extraEntries` from `makeDesktopItem`

* fix Categories

* add darwin compatibilty
  • Loading branch information
a-kenji committed Feb 27, 2022
1 parent cecc3ea commit 49396fa
Show file tree
Hide file tree
Showing 6 changed files with 249 additions and 1 deletion.
1 change: 1 addition & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
use_flake
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,10 @@ target/
*.new
.vscode
.vim
.DS_Store
.DS_Store
/assets/man/zellij.1

# nix
.direnv/
.result/
./result
13 changes: 13 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(import
(
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{
src = ./.;
}).defaultNix
84 changes: 84 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

132 changes: 132 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
{
description = "Zellij, a terminal workspace with batteries included";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
flake-utils.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.url = "github:oxalica/rust-overlay";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.inputs.flake-utils.follows = "flake-utils";
flake-compat.url = "github:edolstra/flake-compat";
flake-compat.flake = false;
};

outputs = { self, rust-overlay, nixpkgs, flake-utils, flake-compat }:
flake-utils.lib.eachSystem [
"aarch64-linux"
"aarch64-darwin"
"i686-linux"
"x86_64-darwin"
"x86_64-linux"
] (system:
let
overlays = [ (import rust-overlay) ];

pkgs = import nixpkgs { inherit system overlays; };

name = "zellij";
pname = name;
root = toString ./.;

ignoreSource = [ ".git" "target" ];

src = pkgs.nix-gitignore.gitignoreSource ignoreSource root;

rustToolchainToml =
pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain;
cargoLock = { lockFile = ./Cargo.lock; };
cargo = rustToolchainToml;
rustc = rustToolchainToml;

#env
RUST_BACKTRACE = 1;

buildInputs = [
rustToolchainToml

# in order to run tests
pkgs.openssl
];

nativeBuildInputs = [
pkgs.installShellFiles
pkgs.copyDesktopItems

# for openssl/openssl-sys
pkgs.pkg-config
] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
pkgs.libiconv
pkgs.Foundation
];

devInputs = [
pkgs.cargo-make
pkgs.rust-analyzer
pkgs.nixpkgs-fmt
# generates manpages
pkgs.mandown
# optimizes wasm binaries
pkgs.binaryen
];

in rec {

packages.zellij =
(pkgs.makeRustPlatform { inherit cargo rustc; }).buildRustPackage {
inherit src name cargoLock buildInputs nativeBuildInputs;

preCheck = ''
HOME=$TMPDIR
'';

postInstall = ''
# explicit behavior
$out/bin/zellij setup --generate-completion bash > ./completions.bash
installShellCompletion --bash --name ${pname}.bash ./completions.bash
$out/bin/zellij setup --generate-completion fish > ./completions.fish
installShellCompletion --fish --name ${pname}.fish ./completions.fish
$out/bin/zellij setup --generate-completion zsh > ./completions.zsh
installShellCompletion --zsh --name _${pname} ./completions.zsh
install -Dm644 ./assets/logo.png $out/share/icons/hicolor/scalable/apps/zellij.png
copyDesktopItems
'';

desktopItems = [
(pkgs.makeDesktopItem {
type = "Application";
inherit name;
desktopName = "zellij";
terminal = true;
genericName = "Terminal multiplexer";
comment = "Manage your terminal applications";
exec = "zellij";
icon = "zellij";
categories = [ "ConsoleOnly;System" ];
})
];

meta = with pkgs.lib; {
homepage = "https://github.com/zellij-org/zellij/";
description = "A terminal workspace with batteries included";
license = [ licenses.mit ];
};
};

defaultPackage = packages.zellij;

# nix run
apps.zellij = flake-utils.lib.mkApp { drv = packages.zellij; };
defaultApp = apps.zellij;

devShell = pkgs.mkShell {
name = "zellij-dev";
inherit buildInputs RUST_BACKTRACE;
nativeBuildInputs = nativeBuildInputs ++ devInputs;
};

});
}
13 changes: 13 additions & 0 deletions shell.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(import
(
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{
src = ./.;
}).shellNix

0 comments on commit 49396fa

Please sign in to comment.