1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00

autotiling: init module

This commit is contained in:
Leon Schwarzäugl 2025-10-11 14:25:28 +02:00 committed by Austin Horstman
parent 7afeff9d81
commit ac16cc25c6
5 changed files with 151 additions and 0 deletions

View file

@ -0,0 +1,9 @@
{ pkgs, ... }:
{
time = "2025-10-11T14:06:00+00:00";
condition = pkgs.stdenv.hostPlatform.isLinux;
message = ''
A new service is available: 'services.autotiling'.
autotiling is a script for Sway and i3 to automatically switch the horizontal / vertical window split orientation.
'';
}

View file

@ -0,0 +1,70 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
mkOption
types
;
cfg = config.services.autotiling;
in
{
meta.maintainers = [ lib.hm.maintainers.swarsel ];
options.services.autotiling = {
enable = lib.mkEnableOption "enable autotiling service";
package = lib.mkPackageOption pkgs "autotiling" { };
extraArgs = mkOption {
type = with types; listOf str;
default = [ ];
example = [
"--workspaces"
"8"
"9"
];
description = ''
Extra arguments to pass to autotiling.
'';
};
systemdTarget = mkOption {
type = types.str;
default = "graphical-session.target";
description = ''
Systemd target to bind to.
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.autotiling" pkgs lib.platforms.linux)
];
systemd.user.services.autotiling = {
Unit = {
Description = "Split orientation manager";
PartOf = [ cfg.systemdTarget ];
After = [ cfg.systemdTarget ];
};
Service = {
Type = "simple";
Restart = "always";
ExecStart = "${lib.getExe cfg.package} ${lib.escapeShellArgs cfg.extraArgs}";
};
Install = {
WantedBy = [ cfg.systemdTarget ];
};
};
};
}

27
tests/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1760038930,
"narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,40 @@
{ config, ... }:
{
services.autotiling = {
enable = true;
package = config.lib.test.mkStubPackage { outPath = "@autotiling@"; };
extraArgs = [
"--outputs"
"DP-1"
"--workspaces"
"8"
"9"
"--limit"
"2"
];
};
nmt.script = ''
serviceFile=home-files/.config/systemd/user/autotiling.service
assertFileExists "$serviceFile"
serviceFileNormalized="$(normalizeStorePaths "$serviceFile")"
assertFileContent "$serviceFileNormalized" ${builtins.toFile "expected.service" ''
[Install]
WantedBy=graphical-session.target
[Service]
ExecStart=@autotiling@/bin/dummy --outputs DP-1 --workspaces 8 9 --limit 2
Restart=always
Type=simple
[Unit]
After=graphical-session.target
Description=Split orientation manager
PartOf=graphical-session.target
''}
'';
}

View file

@ -0,0 +1,5 @@
{ lib, pkgs, ... }:
lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
autotiling-basic-config = ./autotiling-basic-config.nix;
}