oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
2,231 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.zig
27
          pkgs.zls
28
          pkgs.alacritty
29
          pkgs.just
30
          pkgs.xorg.xorgserver
31
        ];
32
        shellHook = ''
33
          export PS1="(oxwm-dev) $PS1"
34
        '';
35
      };
36
    });
37
38
    formatter = forAllSystems (pkgs: pkgs.alejandra);
39
40
    nixosModules.default = {
41
      config,
42
      lib,
43
      pkgs,
44
      ...
45
    }: let
46
      inherit (lib) mkEnableOption mkOption mkIf types;
47
      cfg = config.services.xserver.windowManager.oxwm;
48
    in {
49
      options.services.xserver.windowManager.oxwm = {
50
        enable = mkEnableOption "oxwm window manager";
51
        package = mkOption {
52
          type = types.package;
53
          default = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
54
          description = "The oxwm package to use";
55
        };
56
        extraSessionCommands = mkOption {
57
          type = types.lines;
58
          default = "";
59
          description = "Shell commands executed just before oxwm is started";
60
        };
61
      };
62
63
      config = mkIf cfg.enable {
64
        services.xserver.windowManager.session = lib.singleton {
65
          name = "oxwm";
66
          start = ''
67
            ${cfg.extraSessionCommands}
68
            export _JAVA_AWT_WM_NONREPARENTING=1
69
            ${cfg.package}/bin/oxwm &
70
            waitPID=$!
71
          '';
72
        };
73
74
        environment.systemPackages = [
75
          cfg.package
76
        ];
77
78
        environment.pathsToLink = [
79
          "/share/oxwm"
80
          "/share/xsessions"
81
        ];
82
      };
83
    };
84
  };
85
}