1{
2 description = "A profile manager for qutebrowser";
3
4 inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
5 inputs.pyproject-nix.url = "github:nix-community/pyproject.nix";
6 inputs.pyproject-nix.inputs.nixpkgs.follows = "nixpkgs";
7
8 outputs =
9 {
10 self,
11 nixpkgs,
12 pyproject-nix,
13 }:
14 let
15 pyproject = pyproject-nix.lib.project.loadPyproject { projectRoot = ./.; };
16 pyprojectPackage =
17 python: args:
18 python.pkgs.buildPythonApplication (
19 args // pyproject.renderers.buildPythonPackage { inherit python; }
20 );
21 pyprojectEnv =
22 python: extraPackages:
23 python.withPackages (pyproject.renderers.withPackages { inherit python extraPackages; });
24 forAllSystems =
25 mkOutputs:
26 nixpkgs.lib.genAttrs [
27 "aarch64-linux"
28 "aarch64-darwin"
29 "x86_64-darwin"
30 "x86_64-linux"
31 ] (system: mkOutputs nixpkgs.legacyPackages.${system});
32 in
33 {
34 packages = forAllSystems (pkgs: {
35 qbpm = pyprojectPackage pkgs.python3 {
36 nativeBuildInputs = [
37 pkgs.scdoc
38 pkgs.installShellFiles
39 ];
40 nativeCheckInputs = [ pkgs.python3.pkgs.pytestCheckHook ];
41 postInstallCheck = "$out/bin/qbpm --help";
42 postInstall = ''
43 _QBPM_COMPLETE=bash_source $out/bin/qbpm > completions/qbpm.bash
44 _QBPM_COMPLETE=zsh_source $out/bin/qbpm > completions/qbpm.zsh
45 installShellCompletion completions/qbpm.{bash,zsh,fish}
46 scdoc < qbpm.1.scd > qbpm.1
47 installManPage qbpm.1
48 '';
49
50 meta = {
51 homepage = "https://github.com/pvsr/qbpm";
52 changelog = "https://github.com/pvsr/qbpm/blob/main/CHANGELOG.md";
53 description = "A profile manager for qutebrowser";
54 license = pkgs.lib.licenses.gpl3Plus;
55 };
56 };
57 default = self.packages.${pkgs.system}.qbpm;
58 });
59
60 apps = forAllSystems (pkgs: {
61 qbpm = {
62 type = "app";
63 program = pkgs.lib.getExe self.packages.${pkgs.system}.qbpm;
64 };
65 default = self.apps.${pkgs.system}.qbpm;
66 });
67
68 devShells = forAllSystems (pkgs: {
69 default = pkgs.mkShell {
70 packages = [
71 pkgs.ruff
72 (pyprojectEnv pkgs.python3 (ps: [
73 ps.flit
74 ps.pytest
75 ps.pytest-cov
76 ps.mypy
77 ps.pylsp-mypy
78 ]))
79 ];
80 };
81 });
82
83 formatter = forAllSystems (
84 pkgs:
85 pkgs.nixfmt-tree.override {
86 runtimeInputs = [ pkgs.ruff ];
87 settings = {
88 tree-root-file = "flake.nix";
89 formatter.ruff = {
90 command = "ruff";
91 options = [ "format" ];
92 includes = [ "*.py" ];
93 };
94 };
95 }
96 );
97 };
98}