oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
2,320 bytes raw
1
{
2
  description = "oxwm - A dynamic window manager.";
3
  inputs = {
4
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
5
  };
6
  outputs = {
7
    self,
8
    nixpkgs,
9
  }: let
10
    systems = ["x86_64-linux" "aarch64-linux"];
11
12
    forAllSystems = fn: nixpkgs.lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system});
13
  in {
14
    packages = forAllSystems (pkgs: rec {
15
      default = pkgs.callPackage ./default.nix {
16
        # use git rev for non tagged releases
17
        gitRev = self.rev or self.dirtyRev or null;
18
      };
19
      oxwm = default;
20
    });
21
22
    devShells = forAllSystems (pkgs: {
23
      default = pkgs.mkShell {
24
        inputsFrom = [self.packages.${pkgs.stdenv.hostPlatform.system}.oxwm];
25
        packages = [
26
          pkgs.rustc
27
          pkgs.cargo
28
          pkgs.clippy
29
          pkgs.alacritty
30
          pkgs.just
31
          pkgs.xorg.xorgserver
32
        ];
33
        shellHook = ''
34
          export PS1="(oxwm-dev) $PS1"
35
        '';
36
        env.RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
37
      };
38
    });
39
40
    formatter = forAllSystems (pkgs: pkgs.alejandra);
41
42
    nixosModules.default = {
43
      config,
44
      lib,
45
      pkgs,
46
      ...
47
    }: let
48
      inherit (lib) mkEnableOption mkOption mkIf types;
49
      cfg = config.services.xserver.windowManager.oxwm;
50
    in {
51
      options.services.xserver.windowManager.oxwm = {
52
        enable = mkEnableOption "oxwm window manager";
53
        package = mkOption {
54
          type = types.package;
55
          default = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
56
          description = "The oxwm package to use";
57
        };
58
        extraSessionCommands = mkOption {
59
          type = types.lines;
60
          default = "";
61
          description = "Shell commands executed just before oxwm is started";
62
        };
63
      };
64
65
      config = mkIf cfg.enable {
66
        services.xserver.windowManager.session = lib.singleton {
67
          name = "oxwm";
68
          start = ''
69
            ${cfg.extraSessionCommands}
70
            export _JAVA_AWT_WM_NONREPARENTING=1
71
            ${cfg.package}/bin/oxwm &
72
            waitPID=$!
73
          '';
74
        };
75
76
        environment.systemPackages = [
77
          cfg.package
78
        ];
79
80
        environment.pathsToLink = [
81
          "/share/oxwm"
82
          "/share/xsessions"
83
        ];
84
      };
85
    };
86
  };
87
}