Compare commits

..

No commits in common. "d9d4e43c35987ae4fdba307ce3357c940936bde5" and "ad3ded339f6a68dad9147365202ee60f730ca616" have entirely different histories.

38 changed files with 2556 additions and 3122 deletions

33
;
View file

@ -1,33 +0,0 @@
{
lib,
options,
machine,
...
}:
with lib;
{
options = {
custom.program = mkOption {
type = types.attrsOf (
types.submodule (
{ config, ... }:
{
options = {
name = mkOption {
type = types.string;
};
home-config = mkOption {
type = types.deferredModule;
};
system-config = mkOption {
type = types.deferredModule;
default = _: { };
};
};
config = if builtins.isNull machine.home-only then config.system-config else config.home-config;
}
)
);
};
};
}

View file

@ -1,133 +0,0 @@
inputs@{
nixpkgs,
deploy-rs,
self,
pkgsForSystem,
...
}:
rec {
configs =
configs: builtins.foldl' (acc: val: nixpkgs.lib.recursiveUpdate (config val) acc) { } configs;
config =
{
hostname,
capabilities,
type,
home-only ? null,
extra-modules ? [ ],
system ? "x86_64-linux",
deploy-hostname ? hostname,
deploy-options ? {
user = if builtins.isNull home-only then "root" else home-only;
sshUser = if builtins.isNull home-only then "jana" else home-only;
},
home-manager ? builtins.isNull home-only,
stateVersion ? "26.05",
}:
with nixpkgs.lib;
let
inherit (nixpkgs) lib;
matches-capabilities =
# all requirements are contained in the machine capabilities
requirements: lib.all (req: builtins.elem req capabilities) requirements;
program =
{
inputs,
name,
requirements ? [ ],
home-config,
system-config ? (_: { }),
}:
if (matches-capabilities requirements) then
[ (if builtins.isNull home-only then (system-config inputs) else (home-config inputs)) ]
++
(
if builtins.isNull home-only then
[
(_: {
custom.program.${name}.defered-config = home-config;
})
]
else
[ ]
)
else
[ ];
specialArgsForHomeSystem =
{
system,
type,
capabilities,
}:
home-only: {
pkgs = pkgsForSystem system;
flakes = inputs;
inherit inputs;
inherit (inputs.secrets.packages.${system}) secrets;
machine = {
inherit
type
capabilities
stateVersion
home-only
program
;
};
};
specialArgsForSystem = system: specialArgsForHomeSystem system null;
specialArgs = specialArgsForSystem {
inherit system type capabilities;
};
modules =
extra-modules
++ [ ./hosts/${hostname}/configuration.nix ]
++ (
if builtins.isNull home-only then
[ ./defaults/machine-config.nix ]
else
[ ./defaults/machine-or-home-config.nix ]
)
++ (
if home-manager then
[
inputs.home-manager.nixosModules.default
{
home-manager.extraSpecialArgs = specialArgs;
}
]
else
[ ]
);
in
{
deploy.nodes.${hostname} = {
hostname = deploy-hostname;
fastConnection = true;
profiles.system = {
path =
if (builtins.isNull home-only) then
deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.${hostname}
else
deploy-rs.lib.x86_64-linux.activate.home-manager self.nixosConfigurations.${hostname};
}
// deploy-options;
};
nixosConfigurations.${hostname} =
if builtins.isNull home-only then
(nixosSystem {
inherit system modules specialArgs;
})
else
inputs.home-manager.lib.homeManagerConfiguration {
extraSpecialArgs = specialArgsForHomeSystem {
inherit system type capabilities;
} home-only;
inherit modules;
pkgs = pkgsForSystem system;
};
};
}

View file

@ -1,20 +1,20 @@
{ {
lib, lib,
pkgs, pkgs,
inputs,
flakes, flakes,
machine,
... ...
}: }:
{ {
imports = [ imports = [
./machine-or-home-config.nix (inputs.self + /modules/machine-type.nix)
(inputs.self + /modules/program.nix)
(inputs.self + /programs)
]; ];
system.stateVersion = machine.stateVersion; system.stateVersion = "26.05";
services.resolved.enable = false; services.resolved.enable = false;
xdg.mime.enable = lib.mkForce false;
# Enable SSH # Enable SSH
services.openssh = { services.openssh = {
enable = true; enable = true;

View file

@ -1,9 +0,0 @@
{ inputs, ... }:
{
imports = [
(../modules/program.nix)
(../programs)
(../users)
];
}

500
flake.lock generated
View file

@ -12,7 +12,7 @@
"ragenix", "ragenix",
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_14" "systems": "systems_12"
}, },
"locked": { "locked": {
"lastModified": 1761656077, "lastModified": 1761656077,
@ -70,11 +70,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771587924, "lastModified": 1767967164,
"narHash": "sha256-eVYOGmF8nQBhudJyU6lHdgJI87kvGz8JyCq5/Vi9Mjk=", "narHash": "sha256-Cx4VETh9dGoQYDtWhre7g66d7SAr+h1h6f+SSHxVrck=",
"owner": "catppuccin", "owner": "catppuccin",
"repo": "nix", "repo": "nix",
"rev": "b0c65edbf31c2ad3d84438d82c2310f2c28373f3", "rev": "e973584280e3b0e1d5b5a1a5e9948dc222c54af7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -83,10 +83,32 @@
"type": "github" "type": "github"
} }
}, },
"colmena": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nix-github-actions": "nix-github-actions",
"nixpkgs": "nixpkgs",
"stable": "stable"
},
"locked": {
"lastModified": 1762034856,
"narHash": "sha256-QVey3iP3UEoiFVXgypyjTvCrsIlA4ecx6Acaz5C8/PQ=",
"owner": "zhaofengli",
"repo": "colmena",
"rev": "349b035a5027f23d88eeb3bc41085d7ee29f18ed",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"repo": "colmena",
"type": "github"
}
},
"compiler-construction-2021": { "compiler-construction-2021": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1759157554, "lastModified": 1759157554,
@ -185,29 +207,9 @@
"type": "github" "type": "github"
} }
}, },
"deploy-rs": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
"locked": {
"lastModified": 1770019181,
"narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171",
"type": "github"
},
"original": {
"owner": "serokell",
"repo": "deploy-rs",
"type": "github"
}
},
"dumpasm": { "dumpasm": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
@ -278,11 +280,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1771918157, "lastModified": 1768881817,
"narHash": "sha256-MU/9oxyXCRKyAskjSgku8P7r0XpQiE50tvDKkNDveJg=", "narHash": "sha256-yEG418W8a7C/bcmRI5Lgd03XbBc8K2yV0kp1WUHTYbA=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "921c0db962c553e972d59c3563d29fd575437f03", "rev": "bbd2046d41083954fd28c31cb4f2d3510c9e2b1e",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -311,27 +313,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733328505, "lastModified": 1650374568,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -348,11 +334,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769996383, "lastModified": 1765835352,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "rev": "a34fae9c08a15ad73f295041fec82323541400a9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -362,15 +348,12 @@
} }
}, },
"flake-utils": { "flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1659877975,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -381,7 +364,7 @@
}, },
"flake-utils_10": { "flake-utils_10": {
"inputs": { "inputs": {
"systems": "systems_15" "systems": "systems_13"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -399,7 +382,7 @@
}, },
"flake-utils_11": { "flake-utils_11": {
"inputs": { "inputs": {
"systems": "systems_16" "systems": "systems_14"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -417,7 +400,7 @@
}, },
"flake-utils_12": { "flake-utils_12": {
"inputs": { "inputs": {
"systems": "systems_17" "systems": "systems_15"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -435,7 +418,7 @@
}, },
"flake-utils_13": { "flake-utils_13": {
"inputs": { "inputs": {
"systems": "systems_18" "systems": "systems_16"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -453,7 +436,7 @@
}, },
"flake-utils_14": { "flake-utils_14": {
"inputs": { "inputs": {
"systems": "systems_19" "systems": "systems_17"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -471,7 +454,7 @@
}, },
"flake-utils_15": { "flake-utils_15": {
"inputs": { "inputs": {
"systems": "systems_20" "systems": "systems_18"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -489,7 +472,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -507,7 +490,7 @@
}, },
"flake-utils_3": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -525,14 +508,14 @@
}, },
"flake-utils_4": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": "systems_5" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1731533236,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -543,25 +526,7 @@
}, },
"flake-utils_5": { "flake-utils_5": {
"inputs": { "inputs": {
"systems": "systems_6" "systems": "systems_4"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_6": {
"inputs": {
"systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -577,9 +542,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_7": { "flake-utils_6": {
"inputs": { "inputs": {
"systems": "systems_9" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -595,9 +560,27 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_7": {
"inputs": {
"systems": "systems_6"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_8": { "flake-utils_8": {
"inputs": { "inputs": {
"systems": "systems_11" "systems": "systems_8"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -615,7 +598,7 @@
}, },
"flake-utils_9": { "flake-utils_9": {
"inputs": { "inputs": {
"systems": "systems_12" "systems": "systems_10"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -656,11 +639,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771851181, "lastModified": 1768836546,
"narHash": "sha256-gFgE6mGUftwseV3DUENMb0k0EiHd739lZexPo5O/sdQ=", "narHash": "sha256-nJZkTamcXXMW+SMYiGFB6lB8l0aJw0xjssfN8xYd/Fs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9a4b494b1aa1b93d8edf167f46dc8e0c0011280c", "rev": "b56c5ad14fcf8b5bc887463552483bf000ca562a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -677,11 +660,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771851181, "lastModified": 1768512489,
"narHash": "sha256-gFgE6mGUftwseV3DUENMb0k0EiHd739lZexPo5O/sdQ=", "narHash": "sha256-jZi945d3e6DYhrw3K5Pew+QaL3qSgq3O6xiVaEVLgXs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9a4b494b1aa1b93d8edf167f46dc8e0c0011280c", "rev": "bba859cd85b90dd9e4e6fd44b2af4aa64ae801a1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -714,15 +697,15 @@
}, },
"homepage": { "homepage": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_5",
"nixpkgs": "nixpkgs_5" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1772058280, "lastModified": 1770464309,
"narHash": "sha256-8gZ6wh++43JAe6PH0hmm4Q8gPEScf0S7rkb0MmIxu2U=", "narHash": "sha256-GQh77HwhXATPkWCB10oDeb1q6qZ7KJrPqttNy9NTtLk=",
"owner": "jdonszelmann", "owner": "jdonszelmann",
"repo": "homepage", "repo": "homepage",
"rev": "ead7bebdfa71b207d2513d7f002e164d0b17a264", "rev": "72b2a7932aad8a896f52b788cece4379eefa6663",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -749,18 +732,18 @@
}, },
"jujutsu": { "jujutsu": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_5", "flake-utils": "flake-utils_6",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1771879754, "lastModified": 1768781827,
"narHash": "sha256-X0DpLExFW+/0o+cNCnIJuQZUZGRuBC0Tr9QsbNVXQ1U=", "narHash": "sha256-IbWOHI/IlGC43Mg7AZUu6jCHjIEzFIPAoSlFDJG43A4=",
"owner": "martinvonz", "owner": "martinvonz",
"repo": "jj", "repo": "jj",
"rev": "f89aebceb3a327e33c5ac732b7af548d32ba8199", "rev": "de8531b018a08fd1e2ee67b5c8848146c62be5f4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -787,7 +770,7 @@
}, },
"mapf": { "mapf": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_6", "flake-utils": "flake-utils_7",
"nixpkgs": "nixpkgs_6" "nixpkgs": "nixpkgs_6"
}, },
"locked": { "locked": {
@ -809,36 +792,36 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_8" "systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1770927856, "lastModified": 1768585282,
"narHash": "sha256-2jcqAU8QutF8AE15LYwd8cy7KjayGxUGHxvWnqAiS5M=", "narHash": "sha256-JTH+wQTt8pyS5iPb7+r/70pYfLgi/OFTzimcRmMcs2g=",
"owner": "InioX", "owner": "InioX",
"repo": "matugen", "repo": "matugen",
"rev": "e65259d68edc034905da477b6c1a349e89e2aa8d", "rev": "5905cae968e02d3c1d23ee556e9a0719e5231227",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "InioX", "owner": "InioX",
"ref": "v4.0.0", "ref": "main",
"repo": "matugen", "repo": "matugen",
"type": "github" "type": "github"
} }
}, },
"mifg": { "mifg": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_7", "flake-utils": "flake-utils_8",
"naersk": "naersk", "naersk": "naersk",
"nixpkgs": "nixpkgs_8", "nixpkgs": "nixpkgs_8",
"nixpkgs-mozilla": "nixpkgs-mozilla" "nixpkgs-mozilla": "nixpkgs-mozilla"
}, },
"locked": { "locked": {
"lastModified": 1770456722, "lastModified": 1768926700,
"narHash": "sha256-2zjh754j9iCkhJiYIQgQhwkaDiXo+K8AfGCayJoQLDI=", "narHash": "sha256-/bANzWLzVAzdRDXua/p9wIDS/RGIHSBHqyduXoCd+P8=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "204bf6ed1f899f788c025c7dfc79ce82d3e32002", "rev": "7c883e02e2a77061bfa048d249df0d39b362a5cf",
"revCount": 74, "revCount": 72,
"type": "git", "type": "git",
"url": "ssh://forgejo@git.donsz.nl/jana/money.is.fckn.gay.git" "url": "ssh://forgejo@git.donsz.nl/jana/money.is.fckn.gay.git"
}, },
@ -897,11 +880,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1771917018, "lastModified": 1768767453,
"narHash": "sha256-igOZoXdb9wDhBtADaa8AfANZRgKzhW2lIq0mtqLVT0U=", "narHash": "sha256-Omq1UHEJ1oxkTo2j8l6qQtmyPR7Uj+k7HC5Khd3jVVA=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "1f65cd89e65431c64b492e505033c4b48c94b20e", "rev": "8eab7c21ef4edc97cc56ddb8e76a842e0818d6d7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -933,11 +916,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1771849386, "lastModified": 1768678265,
"narHash": "sha256-CFvjBjS2LxbBMR3Lu6wZhME6ck3CXyKUufRoJA5tlmw=", "narHash": "sha256-Ub8eed4DsfIDWyg30xEe+8bSxL/z5Af/gCjmvJ0V/Hs=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "2dc6f4482c4eeed75ea8b133d89cad8658d38429", "rev": "d7184a04b904e07113f4623610775ae78d32394c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -946,6 +929,27 @@
"type": "github" "type": "github"
} }
}, },
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"colmena",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729742964,
"narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "e04df33f62cdcf93d73e9a04142464753a16db67",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nix-index-database": { "nix-index-database": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -954,11 +958,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771734689, "lastModified": 1765267181,
"narHash": "sha256-/phvMgr1yutyAMjKnZlxkVplzxHiz60i4rc+gKzpwhg=", "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "Mic92", "owner": "Mic92",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "8f590b832326ab9699444f3a48240595954a4b10", "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -989,36 +993,13 @@
"type": "github" "type": "github"
} }
}, },
"nix-minecraft": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_9",
"nixpkgs": [
"p1n3appl3",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769912969,
"narHash": "sha256-RtH34gy6R12oXcmBlUWXygdNeC+KuX3beEsLBXV44Qs=",
"owner": "Yeshey",
"repo": "nix-minecraft",
"rev": "7e3a114dd267e9303d092e29af67ca30c1db86ca",
"type": "github"
},
"original": {
"owner": "Yeshey",
"repo": "nix-minecraft",
"type": "github"
}
},
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1771423359, "lastModified": 1768499669,
"narHash": "sha256-yRKJ7gpVmXbX2ZcA8nFi6CMPkJXZGjie2unsiMzj3Ig=", "narHash": "sha256-jJr/zDxu5evfQxlXtMrFFF68/RNj1UrctS/eIsay4k0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "740a22363033e9f1bb6270fbfb5a9574067af15b", "rev": "7297dfc69ae9b06e984a6f69900ce25e67c76f46",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1045,11 +1026,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1759036355, "lastModified": 1750134718,
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "narHash": "sha256-v263g4GbxXv87hMXMCpjkIxd/viIF7p3JpJrwgKdNiI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "rev": "9e83b64f727c88a7711a2c463a7b16eedb69a84c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1093,11 +1074,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1771714954, "lastModified": 1768621446,
"narHash": "sha256-nhZJPnBavtu40/L2aqpljrfUNb2rxmWTmSjK2c9UKds=", "narHash": "sha256-6YwHV1cjv6arXdF/PQc365h1j+Qje3Pydk501Rm4Q+4=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "afbbf774e2087c3d734266c22f96fca2e78d3620", "rev": "72ac591e737060deab2b86d6952babd1f896d7c5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1109,16 +1090,16 @@
}, },
"nixpkgs-stable_2": { "nixpkgs-stable_2": {
"locked": { "locked": {
"lastModified": 1771714954, "lastModified": 1767313136,
"narHash": "sha256-nhZJPnBavtu40/L2aqpljrfUNb2rxmWTmSjK2c9UKds=", "narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "afbbf774e2087c3d734266c22f96fca2e78d3620", "rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-25.11", "ref": "nixos-25.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -1141,11 +1122,11 @@
}, },
"nixpkgs_11": { "nixpkgs_11": {
"locked": { "locked": {
"lastModified": 1771932323, "lastModified": 1771067046,
"narHash": "sha256-3PadsTzuMJT/x0KmiD/Me1GG6rW8kaHoWVduSs0ue7o=", "narHash": "sha256-fYZMOngn9UX4dyhKcMEqqLjjw3x8T3v3hlYnnbEZh2E=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "89bb5c5da7a857869cc88ef9b856bffdff8af264", "rev": "75c4807ebe5f9cad5622862f4f26ca73c069be06",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1156,11 +1137,11 @@
}, },
"nixpkgs_12": { "nixpkgs_12": {
"locked": { "locked": {
"lastModified": 1771369470, "lastModified": 1768305791,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", "narHash": "sha256-AIdl6WAn9aymeaH/NvBj0H9qM+XuAuYbGMZaP0zcXAQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb", "rev": "1412caf7bf9e660f2f962917c14b1ea1c3bc695e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1204,11 +1185,11 @@
}, },
"nixpkgs_15": { "nixpkgs_15": {
"locked": { "locked": {
"lastModified": 1768564909, "lastModified": 1767379071,
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", "rev": "fb7944c166a3b630f177938e478f0378e64ce108",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1250,11 +1231,11 @@
}, },
"nixpkgs_18": { "nixpkgs_18": {
"locked": { "locked": {
"lastModified": 1771931193, "lastModified": 1769248673,
"narHash": "sha256-IRPLf3y0HxdLirCVYoOYXQyoUBIM8llw7/96OHvyQoM=", "narHash": "sha256-oyxrDiV2yFToXpzwiJUYkxCjFHvL21tMQ2BpQMyMDTw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "12e7188b8c774804377e7b82f45fa95ee87836cb", "rev": "c0301d62ba146fee37e79fbc4b6323af52a2834e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1266,11 +1247,11 @@
}, },
"nixpkgs_19": { "nixpkgs_19": {
"locked": { "locked": {
"lastModified": 1771207753, "lastModified": 1768569498,
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=", "narHash": "sha256-bB6Nt99Cj8Nu5nIUq0GLmpiErIT5KFshMQJGMZwgqUo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf", "rev": "be5afa0fcb31f0a96bf9ecba05a516c66fcd8114",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1282,16 +1263,16 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1743014863, "lastModified": 1759036355,
"narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=", "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f", "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixpkgs-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -1424,11 +1405,11 @@
}, },
"nixpkgs_9": { "nixpkgs_9": {
"locked": { "locked": {
"lastModified": 1771848320, "lastModified": 1768564909,
"narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2fc6539b481e1d2569f25f8799236694180c0993", "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1444,14 +1425,14 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_10" "systems": "systems_9"
}, },
"locked": { "locked": {
"lastModified": 1771135771, "lastModified": 1768795384,
"narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=", "narHash": "sha256-gZIXLzhupxAwRMMRTFgrl669ciYiiPmnA3PwocJ+6jQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba", "rev": "57d393deb53af1b28b14973d3e3885c3d17e7bbe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1467,11 +1448,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771872869, "lastModified": 1768845494,
"narHash": "sha256-evn+p0+T9yNtjdRr5UnYwXnhlHgFB8ilzhGQoYvgXhs=", "narHash": "sha256-PKlKrQMhk+ygsVPny9iOcttZRic870ZbFLTpZEz3MUg=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia-shell", "repo": "noctalia-shell",
"rev": "90e44d6edd604a0877310b01ff20006abcf67e77", "rev": "77aaf6923d19ec824ea142ce02018bfe9a967da4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1486,7 +1467,7 @@
"p1n3appl3", "p1n3appl3",
"nixpkgs" "nixpkgs"
], ],
"utils": "utils_2" "utils": "utils"
}, },
"locked": { "locked": {
"lastModified": 1760151712, "lastModified": 1760151712,
@ -1505,10 +1486,9 @@
"p1n3appl3": { "p1n3appl3": {
"inputs": { "inputs": {
"catppuccin": "catppuccin", "catppuccin": "catppuccin",
"flake-utils": "flake-utils_8", "flake-utils": "flake-utils_9",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"nix-index-database": "nix-index-database", "nix-index-database": "nix-index-database",
"nix-minecraft": "nix-minecraft",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_12", "nixpkgs": "nixpkgs_12",
"nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-stable": "nixpkgs-stable_2",
@ -1520,11 +1500,11 @@
"slippi": "slippi" "slippi": "slippi"
}, },
"locked": { "locked": {
"lastModified": 1771898420, "lastModified": 1768515258,
"narHash": "sha256-8EhIWQZRL55RpAgydge71fk+frXroDdWX1Smt5E0MBI=", "narHash": "sha256-MBDxLHOIIminP+BPP74UQ3WBDnkbFguoW6MV6WXaepE=",
"owner": "p1n3appl3", "owner": "p1n3appl3",
"repo": "config", "repo": "config",
"rev": "cf988820ffaaa44d0f8607f2417f9527d142b52c", "rev": "e6de5bc3c0a67c2a0ed51231df0cd9e0adcfac60",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1679,12 +1659,12 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"colmena": "colmena",
"compiler-construction-2021": "compiler-construction-2021", "compiler-construction-2021": "compiler-construction-2021",
"deploy-rs": "deploy-rs",
"dumpasm": "dumpasm", "dumpasm": "dumpasm",
"firefox-addons": "firefox-addons", "firefox-addons": "firefox-addons",
"firefox-sidebar-css": "firefox-sidebar-css", "firefox-sidebar-css": "firefox-sidebar-css",
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_4",
"harmonica": "harmonica", "harmonica": "harmonica",
"home-manager": "home-manager", "home-manager": "home-manager",
"homepage": "homepage", "homepage": "homepage",
@ -1752,11 +1732,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769482338, "lastModified": 1762915112,
"narHash": "sha256-SVwjMqR981PEdEdRvYj5Mefnd61GLinWmIr7GMu7LW8=", "narHash": "sha256-d9j1g8nKmYDHy+/bIOPQTh9IwjRliqaTM0QLHMV92Ic=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "dc9c76a75a6d382613cdcb1a3f95640e9cedcdea", "rev": "aa1e85921cfa04de7b6914982a94621fbec5cc02",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1869,11 +1849,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768682904, "lastModified": 1760294822,
"narHash": "sha256-d4VEGrKHx9EisLHdGDN15w1PsuS5ZImvewwucTM3rUo=", "narHash": "sha256-VSzDcCkS/kGrALPv81x5yjqjt5o7n4lVjE/gknlz+1w=",
"owner": "lytedev", "owner": "lytedev",
"repo": "slippi-nix", "repo": "slippi-nix",
"rev": "1f309afd4be00afedf34add3645ba2c1b97bdb40", "rev": "abee78f6ad931c2a2f18dae102f51abcaf1a26c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1887,11 +1867,11 @@
"nixpkgs": "nixpkgs_19" "nixpkgs": "nixpkgs_19"
}, },
"locked": { "locked": {
"lastModified": 1771889317, "lastModified": 1768709255,
"narHash": "sha256-YV17Q5lEU0S9ppw08Y+cs4eEQJBuc79AzblFoHORLMU=", "narHash": "sha256-aigyBfxI20FRtqajVMYXHtj5gHXENY2gLAXEhfJ8/WM=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "b027513c32e5b39b59f64626b87fbe168ae02094", "rev": "5e8fae80726b66e9fec023d21cd3b3e638597aa9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1900,6 +1880,22 @@
"type": "github" "type": "github"
} }
}, },
"stable": {
"locked": {
"lastModified": 1750133334,
"narHash": "sha256-urV51uWH7fVnhIvsZIELIYalMYsyr2FCalvlRTzqWRw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "36ab78dab7da2e4e27911007033713bab534187b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2050,21 +2046,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_19": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": { "systems_2": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2080,21 +2061,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_20": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": { "systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2156,21 +2122,6 @@
} }
}, },
"systems_7": { "systems_7": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_8": {
"locked": { "locked": {
"lastModified": 1689347949, "lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@ -2185,6 +2136,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_8": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_9": { "systems_9": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2239,25 +2205,7 @@
}, },
"utils": { "utils": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_11"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"inputs": {
"systems": "systems_13"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -2308,11 +2256,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1771787042, "lastModified": 1768765571,
"narHash": "sha256-7bM6Y4KldhKnfopSALF8XALxcX7ehkomXH9sPl4MXp0=", "narHash": "sha256-C1JbyJ3ftogmN3vmLNfyPtnJw2wY64TiUTIhFtk1Leg=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "33c344fee50504089a447a8fef5878cf4f6215fc", "rev": "ed1cef792b4def3321ff9ab5479df09609f17a69",
"type": "github" "type": "github"
}, },
"original": { "original": {

142
flake.nix
View file

@ -2,16 +2,21 @@
description = "jana's server infrastructure"; description = "jana's server infrastructure";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs"; nixpkgs.url = "github:NixOS/nixpkgs";
colmena.url = "github:zhaofengli/colmena";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
sops-nix.url = "github:Mic92/sops-nix";
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
firefox-addons = {
# deployment url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
deploy-rs.url = "github:serokell/deploy-rs"; inputs.nixpkgs.follows = "nixpkgs";
};
# websites # websites
homepage.url = "github:jdonszelmann/homepage"; homepage.url = "github:jdonszelmann/homepage";
totpal.url = "github:jdonszelmann/totpal"; totpal.url = "github:jdonszelmann/totpal";
harmonica.url = "git+ssh://git@github.com/jdonszelmann/harmonica-tabs"; harmonica.url = "git+ssh://git@github.com/jdonszelmann/harmonica-tabs";
@ -20,39 +25,39 @@
compiler-construction-2021.url = "git+ssh://forgejo@git.donsz.nl/jana/eelco-visser-compiler-construction.git"; compiler-construction-2021.url = "git+ssh://forgejo@git.donsz.nl/jana/eelco-visser-compiler-construction.git";
mifg.url = "git+ssh://forgejo@git.donsz.nl/jana/money.is.fckn.gay.git"; mifg.url = "git+ssh://forgejo@git.donsz.nl/jana/money.is.fckn.gay.git";
# server
raw-data.url = "git+ssh://forgejo@git.donsz.nl/jana/raw-data.git";
secrets.url = "git+ssh://forgejo@git.donsz.nl/jana/server-secrets.git"; secrets.url = "git+ssh://forgejo@git.donsz.nl/jana/server-secrets.git";
sops-nix.url = "github:Mic92/sops-nix";
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
# home
nixvim = { nixvim = {
url = "github:nix-community/nixvim"; url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
t.url = "github:jdonszelmann/t-rs"; t.url = "github:jdonszelmann/t-rs";
dumpasm.url = "github:jdonszelmann/dumpasm"; dumpasm.url = "github:jdonszelmann/dumpasm";
kitty-search = { kitty-search = {
url = "github:trygveaa/kitty-kitten-search"; url = "github:trygveaa/kitty-kitten-search";
flake = false; flake = false;
}; };
jujutsu = { jujutsu = {
url = "github:martinvonz/jj"; url = "github:martinvonz/jj";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
p1n3appl3 = { p1n3appl3 = {
url = "github:p1n3appl3/config"; url = "github:p1n3appl3/config";
inputs.rahul-config.follows = "rahul-config"; inputs.rahul-config.follows = "rahul-config";
}; };
rahul-config.url = "github:jdonszelmann/nix-config"; rahul-config.url = "github:jdonszelmann/nix-config";
niri-unstable.url = "github:YaLTeR/niri"; niri-unstable.url = "github:YaLTeR/niri";
niri = { niri = {
url = "github:sodiboo/niri-flake"; url = "github:sodiboo/niri-flake";
inputs.niri-unstable.follows = "niri-unstable"; inputs.niri-unstable.follows = "niri-unstable";
}; };
matugen = { matugen = {
url = "github:/InioX/matugen/v4.0.0"; url = "github:/InioX/matugen/main";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
noctalia = { noctalia = {
@ -60,23 +65,21 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
pipethon.url = "git+ssh://forgejo@git.donsz.nl/jana/pipethon.git"; pipethon.url = "git+ssh://forgejo@git.donsz.nl/jana/pipethon.git";
firefox-addons = {
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
inputs.nixpkgs.follows = "nixpkgs";
};
firefox-sidebar-css = { firefox-sidebar-css = {
url = "github:drannex/FirefoxSidebar"; url = "github:drannex/FirefoxSidebar";
flake = false; flake = false;
}; };
raw-data.url = "git+ssh://forgejo@git.donsz.nl/jana/raw-data.git";
}; };
outputs = outputs =
{ {
self,
nixpkgs, nixpkgs,
colmena,
flake-utils, flake-utils,
sops-nix, sops-nix,
vpn-confinement, vpn-confinement,
deploy-rs, home-manager,
... ...
}@inputs: }@inputs:
let let
@ -92,40 +95,61 @@
}) })
]; ];
}; };
configs = import ./config.nix (inputs // { inherit pkgsForSystem; });
in in
(configs.configs [ {
{ colmenaHive = colmena.lib.makeHive self.outputs.colmena;
hostname = "fili";
capabilities = [ "cli" ]; colmena = {
type = "server"; meta =
extra-modules = [ let
sops-nix.nixosModules.sops system = "x86_64-linux";
vpn-confinement.nixosModules.default in
]; {
} nixpkgs = pkgsForSystem system;
{ specialArgs = {
hostname = "kili"; flakes = inputs;
deploy-hostname = "localhost"; inherit inputs;
capabilities = [ inherit (inputs.secrets.packages.${system}) secrets;
"cli" };
"graphical" };
"work"
"fun" fili = {
]; deployment = {
type = "pc"; targetHost = "donsz.nl";
} targetPort = 22;
{ replaceUnknownProfiles = false;
hostname = "ragdoll"; tags = [ "server" ];
deploy-hostname = "ragdoll"; # buildOnTarget = true;
home-only = "jana"; targetUser = "jana";
capabilities = [ };
"cli"
"work" imports = [
]; home-manager.nixosModules.home-manager
type = "pc"; ./hosts/fili/configuration.nix
} ./users
]) ./default-machine-config.nix
sops-nix.nixosModules.sops
vpn-confinement.nixosModules.default
];
};
kili = {
deployment = {
allowLocalDeployment = true;
targetHost = null;
replaceUnknownProfiles = false;
tags = [ "laptop" ];
# buildOnTarget = true;
targetUser = "jana";
};
imports = [
home-manager.nixosModules.home-manager
./hosts/kili/configuration.nix
./users
];
};
};
}
// flake-utils.lib.eachDefaultSystem ( // flake-utils.lib.eachDefaultSystem (
system: system:
let let
@ -135,27 +159,17 @@
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [ buildInputs = with pkgs; [
lix lix
(pkgs.writeShellScriptBin "apply-local" '' colmena.packages.${system}.colmena
apply $(hostname)
'')
(pkgs.writeShellScriptBin "apply" '' (pkgs.writeShellScriptBin "apply" ''
set -e colmena apply --no-substitute
if [ $# -eq 0 ] '')
then (pkgs.writeShellScriptBin "apply-local" ''
deploy -s colmena apply-local --sudo
elif [ $# -eq 1 ]
then
deploy -s ".#$@"
else
echo "too many parameters"
exit 1
fi
'') '')
deploy-rs.packages.${system}.deploy-rs
]; ];
shellHook = "exec $NIX_BUILD_SHELL"; shellHook = "exec $NIX_BUILD_SHELL";
}; };
custom-packages = custom pkgs; packages = custom pkgs;
formatter = pkgs.nixfmt; formatter = pkgs.nixfmt;
} }
); );

View file

@ -6,6 +6,13 @@ _: {
./services ./services
]; ];
custom.machine = {
type = "server";
capabilities = [
"cli"
];
};
networking.nameservers = [ networking.nameservers = [
"1.1.1.1" "1.1.1.1"
"9.9.9.9" "9.9.9.9"
@ -43,6 +50,4 @@ _: {
"media" "media"
"nginx" "nginx"
]; ];
users.groups.media = { };
} }

View file

@ -61,7 +61,7 @@ let
}; };
privateUsers = "no"; privateUsers = "no";
imports = config =
{ {
config, config,
pkgs, pkgs,

View file

@ -150,7 +150,7 @@
wget wget
# used in deployments # used in deployments
# flakes.deploy.defaultPackage."x86_64-linux" flakes.colmena.defaultPackage."x86_64-linux"
lix lix
openssh openssh
]; ];

View file

@ -68,21 +68,10 @@
settings = { settings = {
server.externalDomain = "https://photos.donsz.nl"; server.externalDomain = "https://photos.donsz.nl";
logging.level = "log"; logging.level = "verbose";
passwordLogin.enabled = false; passwordLogin.enabled = false;
storageTemplate = {
enabled = true;
# year / album name or "Other" / y m d / filename
template = "{{y}}/{{#if album}}{{album}}{{else}}Other{{/if}}/{{y}}-{{MM}}-{{dd}}/{{filename}}";
hashVerificationEnabled = true;
};
reverseGeocoding = {
enabled = true;
};
oauth = { oauth = {
enabled = true; enabled = true;
@ -95,7 +84,10 @@
roleClaim = "immich_role"; roleClaim = "immich_role";
scope = "openid email profile groups"; scope = "openid email profile groups";
tokenEndpointAuthMethod = "client_secret_post"; tokenEndpointAuthMethod = "client_secret_post";
storageLabelClaim = "preferred_username"; # storageLabelClaim: "",
# "mobileOverrideEnabled": false,
# "mobileRedirectUri": "",
}; };
}; };
mediaLocation = "/storage/storage/media-server/photos"; mediaLocation = "/storage/storage/media-server/photos";

View file

@ -259,7 +259,7 @@ in
}; };
}; };
services.grafana = { services.grafana = {
enable = false; enable = true;
settings = { settings = {
server = { server = {

View file

@ -6,9 +6,19 @@
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./kanata.nix ../../default-machine-config.nix
]; ];
custom.machine = {
type = "pc";
capabilities = [
"cli"
"graphical"
"work"
"fun"
];
};
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
@ -42,7 +52,6 @@
extraGroups = [ extraGroups = [
"networkmanager" "networkmanager"
"wheel" "wheel"
"docker"
]; ];
packages = with pkgs; [ ]; packages = with pkgs; [ ];
}; };
@ -52,8 +61,6 @@
# List packages installed in system profile. To search, run: # List packages installed in system profile. To search, run:
# $ nix search wget # $ nix search wget
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
gcc
docker
firefox firefox
kitty kitty
@ -80,13 +87,8 @@
''; '';
} }
) { }) ) { })
config.boot.kernelPackages.perf
rr
]; ];
virtualisation.docker.enable = true;
services.xserver.enable = true; services.xserver.enable = true;
services.displayManager.gdm.enable = true; services.displayManager.gdm.enable = true;
services.desktopManager.gnome.enable = true; services.desktopManager.gnome.enable = true;
@ -155,13 +157,6 @@
}; };
}; };
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
# programs.mtr.enable = true; # programs.mtr.enable = true;
# programs.gnupg.agent = { # programs.gnupg.agent = {
# enable = true; # enable = true;

View file

@ -1,44 +1,28 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ { config, lib, pkgs, modulesPath, ... }:
config,
lib,
modulesPath,
...
}:
{ {
imports = [ imports =
(modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
"xhci_pci"
"thunderbolt"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" =
device = "/dev/disk/by-uuid/4919727e-d114-4d57-b206-522b5df5fccc"; { device = "/dev/disk/by-uuid/4919727e-d114-4d57-b206-522b5df5fccc";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/26CD-373C"; { device = "/dev/disk/by-uuid/26CD-373C";
fsType = "vfat"; fsType = "vfat";
options = [ options = [ "fmask=0077" "dmask=0077" ];
"fmask=0077" };
"dmask=0077"
];
};
swapDevices = [ ]; swapDevices = [ ];

View file

@ -1,13 +0,0 @@
{ pkgs, ... }:
{
# TODO: make kanata system pkgs only
users.groups.uinput = { };
users.extraUsers.jana.extraGroups = [
"uinput"
"input"
];
environment.systemPackages = [ pkgs.kanata-with-cmd ];
services.udev.extraRules = ''
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
'';
}

View file

@ -1,7 +0,0 @@
{
...
}:
{
imports = [ ];
}

16
modules/home-info.nix Normal file
View file

@ -0,0 +1,16 @@
{
lib,
...
}:
with lib;
{
options = {
custom.home-info = mkOption {
type = types.submodule {
options = {
};
};
};
};
}

25
modules/machine-type.nix Normal file
View file

@ -0,0 +1,25 @@
{
lib,
...
}:
with lib;
{
options = {
custom.machine = mkOption {
type = types.submodule {
options = {
type = mkOption {
type = types.enum [
"server"
"pc"
];
};
capabilities = mkOption {
type = types.listOf (types.enum (import ./capabilities.nix));
default = [ "cli" ];
};
};
};
};
};
}

View file

@ -1,7 +1,6 @@
inputs@{ {
lib, lib,
options, options,
machine,
... ...
}: }:
with lib; with lib;
@ -9,16 +8,28 @@ with lib;
options = { options = {
custom.program = mkOption { custom.program = mkOption {
type = types.attrsOf ( type = types.attrsOf (
types.submodule (_: { types.submodule (
options = { { config, ... }:
name = mkOption { {
type = types.string; options = {
name = mkOption {
type = types.string;
};
requirements = mkOption {
type = types.listOf (types.enum (import ./capabilities.nix));
default = [ "cli" ];
};
home-config = mkOption {
type = types.deferredModule;
};
system-config = mkOption {
# type = types.attrs;
type = types.deferredModule;
default = { };
};
}; };
defered-config = mkOption { }
type = types.deferredModule; )
};
};
})
); );
}; };
}; };

View file

@ -1,31 +1,30 @@
args@{ {
lib, lib,
pkgs, pkgs,
config, config,
machine,
... ...
}: }:
with lib; with lib;
let let
cfg = config.custom.users; cfg = config.custom.users;
inherit (machine) home-only; machine = config.custom.machine;
inherit (machine) stateVersion;
valid-on-machine = valid-on-machine =
on: on:
# TODO: iterate over possibilities # TODO: iterate over possibilities
( if machine.type == "server" then
if machine.type == "server" then on.server
on.server else if machine.type == "pc" then
else if machine.type == "pc" then on.pc
on.pc else
else false;
false matches-capabilities =
); # all requirements are contained in the machine capabilities
requirements: lib.all (req: builtins.elem req machine.capabilities) requirements;
users = lib.filterAttrs (_: value: valid-on-machine value.on) cfg; users = lib.filterAttrs (_: value: valid-on-machine value.on) cfg;
home-users = lib.filterAttrs (_: value: value.apply-home-configs) users; home-users = lib.filterAttrs (_: value: value.apply-home-configs) users;
stateVersion = config.system.stateVersion;
programs = lib.attrsets.attrValues config.custom.program; programs = lib.attrsets.attrValues config.custom.program;
valid-programs = builtins.filter (program: matches-capabilities program.requirements) programs;
in in
{ {
options = options =
@ -76,47 +75,35 @@ in
}; };
}; };
config = lib.mkMerge [ config = lib.mkMerge ([
( {
if (!builtins.isNull home-only) then users.extraUsers = lib.mapAttrs (name: value: {
lib.mkMerge ([ isNormalUser = true;
extraGroups = value.groups;
openssh.authorizedKeys.keys = value.keys;
shell = value.shell;
description = name;
}) users;
home-manager.users = lib.mapAttrs (
name: value:
(
{ pkgs, lib, ... }:
{ {
imports = (
[
./home-info.nix
]
++ (map (program: program.home-config) valid-programs)
);
home = { home = {
inherit stateVersion; inherit stateVersion;
username = toString home-only; username = name;
homeDirectory = "/home/${toString home-only}"; homeDirectory = "/home/${name}";
}; };
} }
]
# ++ map (program: program.home-config) programs
) )
else ) home-users;
(lib.mkMerge ([ }
{ ]);
users.extraUsers = lib.mapAttrs (name: value: {
isNormalUser = true;
extraGroups = value.groups;
openssh.authorizedKeys.keys = value.keys;
inherit (value) shell;
description = name;
}) users;
home-manager.users = lib.mapAttrs (
name: value:
(_: {
imports = (
[
]
++ (map (program: program.defered-config) programs)
);
home = {
inherit stateVersion;
username = name;
homeDirectory = "/home/${name}";
};
})
) home-users;
}
]))
)
];
} }

1
no current target Normal file
View file

@ -0,0 +1 @@
Ptmux;_Gq=2,a=d,d=a\\

View file

@ -1,241 +1,257 @@
{ machine, lib, ... }@inputs: _: {
{ imports = [
./nvim
imports = lib.concatLists [ ./fish
[ ./kanata
./xdg.nix ./kitty
./nvim ./tmux
./fish ./git
./kanata ./jj
./kitty ./niri
./tmux ./zed
./git ./firefox
./jj
./niri
./zed
./firefox
]
(machine.program {
name = "graphcial-packages";
inherit inputs;
requirements = [ "graphical" ];
home-config =
{ pkgs, ... }:
{
home.packages = with pkgs; [
spotify
obsidian
element-desktop
# chromium
bind.dnsutils
mpv
vlc
libreoffice-qt
hunspell
hunspellDicts.en_US
];
};
})
(machine.program {
name = "discord";
inherit inputs;
requirements = [ "graphical" ];
home-config =
{
config,
pkgs,
lib,
...
}:
let
disableFeatures = [
"WebRtcAllowInputVolumeAdjustment"
"ChromeWideEchoCancellation"
];
enableFeatures = [ ];
commandLineArgs =
lib.optionals (enableFeatures != [ ]) [
"--enable-features=${lib.concatStringsSep "," enableFeatures}"
]
++ lib.optionals (disableFeatures != [ ]) [
"--disable-features=${lib.concatStringsSep "," disableFeatures}"
];
joinedArgs = lib.concatStringsSep " " commandLineArgs;
in
{
home.file."${config.xdg.configHome}/discord/settings.json".source = pkgs.writeText "settings.json" (
lib.strings.toJSON (
let
endpoint = "https://inject.shelter.uwu.network/shelter+yt_ad_block+yt_embed_fix";
in
{
SKIP_HOST_UPDATE = true;
MINIMIZE_TO_TRAY = false;
OPEN_ON_STARTUP = false;
DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING = true;
enableHardwareAcceleration = true;
UPDATE_ENDPOINT = endpoint;
NEW_UPDATE_ENDPOINT = "${endpoint}/";
BACKGROUND_COLOR = "#2c2d32";
openasar = {
setup = true;
# using the performance preset breaks vaapi
cmdPreset = "balanced";
# quickstart is buggy and breaks discord sometimes.
quickstart = false;
# this css is made for discord compact mode. if you're not using that, stuff won't align!!
css =
# css
''
/* Hide nitro begging */
@import url("https://raw.codeberg.page/AllPurposeMat/Disblock-Origin/DisblockOrigin.theme.css");
/* Hide the Visual Refresh title bar */
.visual-refresh {
/* Hide the bar itself */
--custom-app-top-bar-height: 0px !important;
/* Title bar buttons are still visible so hide them too */
div.base__5e434 > div.bar_c38106 {
display: none;
}
/* Bring the server list down a few pixels */
ul[data-list-id="guildsnav"] > div.itemsContainer_ef3116 {
margin-top: 8px;
}
}
:root {
/* Disblock settings */
--display-clan-tags: none;
--display-active-now: none;
--display-hover-reaction-emoji: none;
--bool-show-name-gradients: false;
}
/* Make "Read All" vencord button text smaller */
button.vc-ranb-button {
font-size: 9.5pt;
font-weight: normal;
}
/* Hide Discover button */
div[data-list-item-id="guildsnav___guild-discover-button"] {
display: none !important;
}
/* Hide voice settings menus in user panel */
div[class^="micButtonParent__"] button[role="switch"] {
border-radius: var(--radius-sm);
& ~ button { display: none; }
}
/* Also reduce the gap between the buttons */
div.container__37e49 > div.buttons__37e49 {
gap: 1px;
}
'';
};
}
)
);
home.packages = with pkgs; [
(discord.override {
# we disable updates in settings.json
disableUpdates = false;
commandLineArgs = joinedArgs;
withTTS = false;
enableAutoscroll = true;
withOpenASAR = true;
})
];
};
})
(machine.program {
name = "fun-packages";
inherit inputs;
requirements = [ "fun" ];
home-config =
{ pkgs, ... }:
{
home.packages = with pkgs; [
custom.p1n3appl3.tab
prismlauncher
];
};
})
(machine.program {
name = "cli-packages";
inherit inputs;
requirements = [ "cli" ];
home-config =
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
# general cli tools
sops
fzf
htop
ncdu
psmisc
ripgrep
rsync
zoxide
tmux
direnv
atuin
rcon
lix
nix-output-monitor
wget
comma
unzip
pciutils
difftastic
# dev tools
gdb
clang-tools
rustup
git
python3
unixtools.xxd
net-tools
sqlite-interactive
tokei
just
uv
llvmPackages.bintools
(writeShellScriptBin "nas" ''
mkdir -p ~/Documents/nas
${sshfs}/bin/sshfs fili:/storage/storage/data/ ~/Documents/nas
cd ~/Documents/nas
'')
];
# Set up direnv
programs.direnv = {
package = pkgs.direnv;
silent = false;
nix-direnv = {
enable = true;
package = pkgs.nix-direnv;
};
};
home.file = {
"${config.xdg.configHome}/sqlite3/sqliterc".source = pkgs.writeText ".sqliterc" ''
.mode box
'';
};
};
})
]; ];
custom.program.graphcial-packages = {
requirements = [ "graphical" ];
home-config =
{ pkgs, ... }:
{
home.packages = with pkgs; [
spotify
obsidian
element-desktop
chromium
bind.dnsutils
mpv
vlc
];
};
};
custom.program.discord = {
requirements = [ "graphical" ];
home-config =
{
config,
pkgs,
lib,
...
}:
let
disableFeatures = [
"WebRtcAllowInputVolumeAdjustment"
"ChromeWideEchoCancellation"
];
enableFeatures = [ ];
commandLineArgs =
lib.optionals (enableFeatures != [ ]) [
"--enable-features=${lib.concatStringsSep "," enableFeatures}"
]
++ lib.optionals (disableFeatures != [ ]) [
"--disable-features=${lib.concatStringsSep "," disableFeatures}"
];
joinedArgs = lib.concatStringsSep " " commandLineArgs;
in
{
home.file."${config.xdg.configHome}/discord/settings.json".source = pkgs.writeText "settings.json" (
lib.strings.toJSON (
let
endpoint = "https://inject.shelter.uwu.network/shelter+yt_ad_block+yt_embed_fix";
in
{
SKIP_HOST_UPDATE = true;
MINIMIZE_TO_TRAY = false;
OPEN_ON_STARTUP = false;
DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING = true;
enableHardwareAcceleration = true;
UPDATE_ENDPOINT = endpoint;
NEW_UPDATE_ENDPOINT = "${endpoint}/";
BACKGROUND_COLOR = "#2c2d32";
openasar = {
setup = true;
# using the performance preset breaks vaapi
cmdPreset = "balanced";
# quickstart is buggy and breaks discord sometimes.
quickstart = false;
# this css is made for discord compact mode. if you're not using that, stuff won't align!!
css =
# css
''
/* Hide nitro begging */
@import url("https://raw.codeberg.page/AllPurposeMat/Disblock-Origin/DisblockOrigin.theme.css");
/* Hide the Visual Refresh title bar */
.visual-refresh {
/* Hide the bar itself */
--custom-app-top-bar-height: 0px !important;
/* Title bar buttons are still visible so hide them too */
div.base__5e434 > div.bar_c38106 {
display: none;
}
/* Bring the server list down a few pixels */
ul[data-list-id="guildsnav"] > div.itemsContainer_ef3116 {
margin-top: 8px;
}
}
:root {
/* Disblock settings */
--display-clan-tags: none;
--display-active-now: none;
--display-hover-reaction-emoji: none;
--bool-show-name-gradients: false;
}
/* Make "Read All" vencord button text smaller */
button.vc-ranb-button {
font-size: 9.5pt;
font-weight: normal;
}
/* Hide Discover button */
div[data-list-item-id="guildsnav___guild-discover-button"] {
display: none !important;
}
/* Hide voice settings menus in user panel */
div[class^="micButtonParent__"] button[role="switch"] {
border-radius: var(--radius-sm);
& ~ button { display: none; }
}
/* Also reduce the gap between the buttons */
div.container__37e49 > div.buttons__37e49 {
gap: 1px;
}
'';
};
}
)
);
home.packages = with pkgs; [
(discord.override {
# we disable updates in settings.json
disableUpdates = false;
commandLineArgs = joinedArgs;
withTTS = false;
enableAutoscroll = true;
withOpenASAR = true;
})
];
};
};
custom.program.fun-packages = {
requirements = [ "fun" ];
home-config =
{ pkgs, ... }:
{
home.packages = with pkgs; [
custom.p1n3appl3.tab
prismlauncher
];
};
};
custom.program.cli-packages = {
requirements = [ "cli" ];
home-config =
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
# general cli tools
sops
fzf
htop
ncdu
psmisc
ripgrep
rsync
zoxide
tmux
direnv
atuin
rcon
lix
nix-output-monitor
wget
comma
unzip
pciutils
# dev tools
gdb
clang-tools
rustup
git
python3
unixtools.xxd
net-tools
sqlite-interactive
tokei
just
uv
llvmPackages.bintools
(writeShellScriptBin "nas" ''
mkdir -p ~/Documents/nas
${sshfs}/bin/sshfs fili:/storage/storage/data/ ~/Documents/nas
cd ~/Documents/nas
'')
];
# Set up direnv
programs.direnv = {
package = pkgs.direnv;
silent = false;
nix-direnv = {
enable = true;
package = pkgs.nix-direnv;
};
};
home.file = {
"${config.xdg.configHome}/sqlite3/sqliterc".source = pkgs.writeText ".sqliterc" ''
.mode box
'';
};
};
};
custom.program.homedirs = {
home-config =
{ config, ... }:
{
home.file = {
"dl".source = config.lib.file.mkOutOfStoreSymlink "${config.xdg.userDirs.download}";
"doc".source = config.lib.file.mkOutOfStoreSymlink "${config.xdg.userDirs.documents}";
};
};
};
custom.program.xdg = {
home-config =
{ config, ... }:
{
xdg = {
enable = true;
configHome = "${config.home.homeDirectory}/.config";
userDirs = {
enable = true;
documents = "${config.home.homeDirectory}/Documents";
desktop = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
music = "${config.home.homeDirectory}/Documents/personal/music";
pictures = "${config.home.homeDirectory}/Documents/personal/pictures";
};
mime.enable = true;
};
};
};
} }

View file

@ -1,170 +1,165 @@
inputs@{ machine, ... }: _: {
{ custom.program.firefox.requirements = [ "graphical" ];
imports = machine.program { custom.program.firefox.home-config =
name = "firefox"; {
inherit inputs; config,
requirements = [ "graphical" ]; flakes,
home-config = pkgs,
{ ...
config, }:
flakes, let
pkgs, ff-pkgs = flakes.firefox-addons.packages.${pkgs.system};
... lock-false = {
}: Value = false;
let Status = "locked";
ff-pkgs = flakes.firefox-addons.packages.${pkgs.system}; };
lock-false = { # lock-true = {
Value = false; # Value = true;
Status = "locked"; # Status = "locked";
}; # };
# lock-true = { in
# Value = true; {
# Status = "locked"; programs.firefox = {
# }; enable = true;
in package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
{ extraPolicies = {
programs.firefox = { DisableFormHistory = true;
enable = true; OfferToSaveLogins = false;
package = pkgs.wrapFirefox pkgs.firefox-unwrapped { PasswordManagerEnabled = false;
extraPolicies = { AppAutoUpdate = false;
DisableFormHistory = true; DisableFirefoxStudies = true;
OfferToSaveLogins = false; DisablePocket = true;
PasswordManagerEnabled = false; DisableTelemetry = true;
AppAutoUpdate = false; UserMessaging = {
DisableFirefoxStudies = true; WhatsNew = true;
DisablePocket = true; ExtensionRecommendations = false;
DisableTelemetry = true; FeatureRecommendations = false;
UserMessaging = { UrlbarInterventions = false;
WhatsNew = true; SkipOnboarding = true;
ExtensionRecommendations = false; MoreFromMozilla = false;
FeatureRecommendations = false; Locked = true;
UrlbarInterventions = false;
SkipOnboarding = true;
MoreFromMozilla = false;
Locked = true;
};
FirefoxHome = {
Search = true;
TopSites = false;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
SponsoredPocket = false;
Snippets = false;
Locked = false;
};
FirefoxSuggest = {
WebSuggestions = false;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
# TODO: https://github.com/TheRealGramdalf/nixos/blob/83f4339b121175f47940314bf5811080ac42c316/users/games/firefox/privacy.nix
}; };
FirefoxHome = {
Search = true;
TopSites = false;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
SponsoredPocket = false;
Snippets = false;
Locked = false;
};
FirefoxSuggest = {
WebSuggestions = false;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
# TODO: https://github.com/TheRealGramdalf/nixos/blob/83f4339b121175f47940314bf5811080ac42c316/users/games/firefox/privacy.nix
}; };
profiles.default = { };
id = 0;
name = "profile_0";
isDefault = true;
settings = {
# specify profile-specific preferences here; check about:config for options
"browser.newtabpage.activity-stream.feeds.section.highlights" = false;
"browser.startup.page" = 3; # Restore previous tabs
"extensions.autoDisableScopes" = 0;
"extensions.pocket.enabled" = lock-false;
"browser.tabs.closeWindowWithLastTab" = lock-false;
"sidebar.position_start" = false; # sidebar on the right
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.toolbars.bookmarks.visibility" = "always";
};
userChrome = builtins.readFile ./userChrome.css; profiles.default = {
userContent = builtins.readFile ./userChrome.css; id = 0;
name = "profile_0";
isDefault = true;
settings = {
# specify profile-specific preferences here; check about:config for options
"browser.newtabpage.activity-stream.feeds.section.highlights" = false;
"browser.startup.page" = 3; # Restore previous tabs
"extensions.autoDisableScopes" = 0;
"extensions.pocket.enabled" = lock-false;
"browser.tabs.closeWindowWithLastTab" = lock-false;
"sidebar.position_start" = false; # sidebar on the right
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.toolbars.bookmarks.visibility" = "always";
};
extensions.packages = with ff-pkgs; [ userChrome = builtins.readFile ./userChrome.css;
bitwarden userContent = builtins.readFile ./userChrome.css;
ublock-origin
sidebery extensions.packages = with ff-pkgs; [
sponsorblock bitwarden
# vimium ublock-origin
sidebery
sponsorblock
# vimium
];
bookmarks = {
force = true;
settings = [
{
keyword = "!w";
url = "https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s";
}
{
keyword = "!m";
url = "https://www.google.com/maps?q=%s";
}
{
keyword = "!git";
url = "https://github.com/search?q=%s&type=code";
}
{
keyword = "!std";
url = "https://std.rs%s";
}
{
keyword = "!rust";
url = "https://docs.rs/releases/search?query=%s";
}
{
keyword = "!np";
url = "https://search.nixos.org/packages?query=%s";
}
{
keyword = "!hmo";
url = "https://home-manager-options.extranix.com/?query=%s";
}
{
keyword = "!no";
url = "https://search.nixos.org/options?query=%s";
}
# {
# name = "bank";
# toolbar = true;
# url = "https://web.bunq.com/user";
# }
]; ];
bookmarks = {
force = true;
settings = [
{
keyword = "!w";
url = "https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s";
}
{
keyword = "!m";
url = "https://www.google.com/maps?q=%s";
}
{
keyword = "!git";
url = "https://github.com/search?q=%s&type=code";
}
{
keyword = "!std";
url = "https://std.rs%s";
}
{
keyword = "!rust";
url = "https://docs.rs/releases/search?query=%s";
}
{
keyword = "!np";
url = "https://search.nixos.org/packages?query=%s";
}
{
keyword = "!hmo";
url = "https://home-manager-options.extranix.com/?query=%s";
}
{
keyword = "!no";
url = "https://search.nixos.org/options?query=%s";
}
# {
# name = "bank";
# toolbar = true;
# url = "https://web.bunq.com/user";
# }
];
};
# extensions.settings = {
# "${ff-pkgs.sidebery.addonId}".settings = {
# sidebar = {
# # panels = with builtins; with lib; listToAttrs (map ffContainerToSideberryPanel (attrsToList containers));
# # nav = [ "Personal" "Programming"];
# };
# # https://github.com/Dash-L/nixconfig/blob/c30f6d1486a3fe2b3793ab0cb13a88edefe83b7a/home/firefox.nix#L82
# settings = {
# pinnedTabsPosition = "top";
# hideEmptyPanels = false;
# activateAfterClosing = "prev";
# activateAfterClosingStayInPanel = true;
# newTabCtxReopen = true;
# };
# };
# };
}; };
};
xdg.mimeApps = { # extensions.settings = {
defaultApplications."x-scheme-handler/http" = [ # "${ff-pkgs.sidebery.addonId}".settings = {
"firefox.desktop" # sidebar = {
]; # # panels = with builtins; with lib; listToAttrs (map ffContainerToSideberryPanel (attrsToList containers));
defaultApplications."x-scheme-handler/https" = [ # # nav = [ "Personal" "Programming"];
"firefox.desktop" # };
]; # # https://github.com/Dash-L/nixconfig/blob/c30f6d1486a3fe2b3793ab0cb13a88edefe83b7a/home/firefox.nix#L82
defaultApplications."text/html" = [ "firefox.desktop" ]; # settings = {
defaultApplications."x-scheme-handler/about" = [ "firefox.desktop" ]; # pinnedTabsPosition = "top";
defaultApplications."x-scheme-handler/unknown" = [ "firefox.desktop" ]; # hideEmptyPanels = false;
# activateAfterClosing = "prev";
# activateAfterClosingStayInPanel = true;
# newTabCtxReopen = true;
# };
# };
# };
}; };
}; };
};
xdg.mimeApps = {
defaultApplications."x-scheme-handler/http" = [
"firefox.desktop"
];
defaultApplications."x-scheme-handler/https" = [
"firefox.desktop"
];
defaultApplications."text/html" = [ "firefox.desktop" ];
defaultApplications."x-scheme-handler/about" = [ "firefox.desktop" ];
defaultApplications."x-scheme-handler/unknown" = [ "firefox.desktop" ];
};
};
} }

View file

@ -1,260 +1,241 @@
inputs@{ machine, ... }: _: {
{ custom.program.fish.requirements = [ "cli" ];
imports = machine.program { custom.program.fish.home-config =
name = "fish"; {
inherit inputs; config,
requirements = [ "cli" ]; pkgs,
home-config = lib,
{ ...
config, }:
pkgs, with builtins;
lib, with lib.attrsets;
... let
}: scripts = (import ./scripts.nix) pkgs;
with builtins; aliases = with scripts; {
with lib.attrsets; "cp-mov" = cp-media "mov" "movies";
let "cp-ser" = cp-media "ser" "shows";
scripts = (import ./scripts.nix) pkgs; "cp-ani" = cp-media "ani" "anime";
aliases = with scripts; { "dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm";
"cp-mov" = cp-media "mov" "movies"; "p" = builtins.trace calc calc;
"cp-ser" = cp-media "ser" "shows"; "s" = "systemctl";
"cp-ani" = cp-media "ani" "anime"; "j" = "journalctl";
"dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm"; "ju" = "journalctl -u";
"p" = builtins.trace calc calc; "jfu" = "journalctl -fu";
"s" = "systemctl"; "ls" = "${pkgs.eza}/bin/eza --git";
"j" = "journalctl"; "ll" = "${pkgs.eza}/bin/eza --git";
"ju" = "journalctl -u"; "lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
"jfu" = "journalctl -fu"; "open" = "${pkgs.xdg-utils}/bin/xdg-open";
"ls" = "${pkgs.eza}/bin/eza --git"; "cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
"ll" = "${pkgs.eza}/bin/eza --git"; "cat" = "${pkgs.bat}/bin/bat";
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
"open" = "${pkgs.xdg-utils}/bin/xdg-open";
"cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
"cat" = "${pkgs.bat}/bin/bat";
# "pull" = "${pkgs.git}/bin/git pull"; # "pull" = "${pkgs.git}/bin/git pull";
# "push" = "${pkgs.git}/bin/git push"; # "push" = "${pkgs.git}/bin/git push";
# "commit" = "${pkgs.git}/bin/git commit"; # "commit" = "${pkgs.git}/bin/git commit";
# "add" = "${pkgs.git}/bin/git add"; # "add" = "${pkgs.git}/bin/git add";
# "patch" = "${pkgs.git}/bin/git add -p"; # "patch" = "${pkgs.git}/bin/git add -p";
# "amend" = "${pkgs.git}/bin/git commit --amend"; # "amend" = "${pkgs.git}/bin/git commit --amend";
# "log" = "${pkgs.git}/bin/git log --all --graph --decorate"; # "log" = "${pkgs.git}/bin/git log --all --graph --decorate";
# "st" = "${pkgs.git}/bin/git status"; # "st" = "${pkgs.git}/bin/git status";
# "checkout" = "${pkgs.git}/bin/git checkout"; # "checkout" = "${pkgs.git}/bin/git checkout";
# "rebase" = "${pkgs.git}/bin/git rebase"; # "rebase" = "${pkgs.git}/bin/git rebase";
# "stash" = "${pkgs.git}/bin/git stash"; # "stash" = "${pkgs.git}/bin/git stash";
"edit" = "jj edit"; "edit" = "jj edit";
"old" = "jj edit @-"; "old" = "jj edit @-";
"new" = "jj edit @+"; "new" = "jj edit @+";
"rebase" = "jj rebase"; "rebase" = "jj rebase";
"pull" = "jj git fetch; jj catchup"; "pull" = "jj git fetch; jj catchup";
"msg" = "jj describe -m"; "msg" = "jj describe -m";
"branch" = "jj bookmark set"; "branch" = "jj bookmark set";
"stat" = "jj status"; "stat" = "jj status";
"push" = "jj git push"; "push" = "jj git push";
"tidy" = "x test tidy --bless"; "tidy" = "x test tidy --bless";
"ui" = "x test tests/ui/"; "ui" = "x test tests/ui/";
"f" = "nautilus --no-desktop . &"; "f" = "nautilus --no-desktop . &";
}; };
# extracting any compressed format # extracting any compressed format
extract = '' extract = ''
function extract -a file -d "decompress a file" function extract -a file -d "decompress a file"
if not test -f $file if not test -f $file
echo "'$file' is not a valid file" echo "'$file' is not a valid file"
return 1 return 1
end
switch $file
# tar can automatically figure out how to decompress
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
case '*.bz2'; bunzip2 $file; end
case '*.rar'; unrar e $file; end
case '*.gz'; gunzip $file; end
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
case '*.Z'; uncompress $file; end
case '*.7z'; 7z x $file; end
case '*';
echo "'$file' cannot be extracted"
return 1
end
end end
''; switch $file
in # tar can automatically figure out how to decompress
{ case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
programs = { case '*.bz2'; bunzip2 $file; end
atuin = { case '*.rar'; unrar e $file; end
enable = true; case '*.gz'; gunzip $file; end
enableFishIntegration = true; case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
case '*.Z'; uncompress $file; end
case '*.7z'; 7z x $file; end
case '*';
echo "'$file' cannot be extracted"
return 1
end
end
'';
in
{
programs = {
atuin = {
enable = true;
enableFishIntegration = true;
settings = { settings = {
filter_mode_shell_up_key_binding = "workspace"; filter_mode_shell_up_key_binding = "workspace";
exit_mode = "return-original"; exit_mode = "return-original";
inline_height = 20; inline_height = 20;
workspaces = true; workspaces = true;
};
};
zoxide = {
enable = true;
enableFishIntegration = true;
};
direnv = {
enable = true;
# enableFishIntegration = lib.mkDefault true;
};
fzf = {
enable = true;
enableFishIntegration = true;
};
fish = {
enable = true;
shellAliases = aliases;
plugins = with pkgs.fishPlugins; [
{
name = "bang-bang";
src = pkgs.fetchFromGitHub {
owner = "oh-my-fish";
repo = "plugin-bang-bang";
rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419";
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
};
}
{
name = "tide";
inherit (tide) src;
}
{
name = "sponge";
inherit (sponge) src;
}
{
name = "autopair";
inherit (autopair) src;
}
];
functions = {
fish_jj_prompt = {
body = ''
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
return 1
end
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
separate(
" ",
bookmarks.join(", "),
change_id.shortest(),
commit_id.shortest(),
if(conflict, "conflict"),
if(empty, "empty"),
if(divergent, "divergent"),
if(hidden, "hidden"),
)
'
'';
};
_tide_item_jj = {
body = ''
set -l _tide_item_jj_color $_tide_location_color
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
'';
};
_tide_item_git = {
body = ''
if not test -d .jj
fish_git_prompt '%s'
end
'';
};
};
interactiveShellInit = ''
fish_vi_key_bindings
bind \e\[3\;5~ kill-word
bind \cH backward-kill-word
bind \cV beginning-of-line
bind \f end-of-line
bind -M insert \e\[3\;5~ kill-word
bind -M insert \cH backward-kill-word
bind -M insert \cV beginning-of-line
bind -M insert \f end-of-line
bind \cl 'clear; commandline -f repaint'
bind -M insert \cl 'clear; commandline -f repaint'
set -g sponge_successful_exit_codes 0
set -g sponge_allow_previously_successful false
set -g sponge_delay 10
${config.programs.jujutsu.package}/bin/jj util completion fish | source
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
# if test $tide_item_jj_idx
# set tide_left_prompt_items \
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
# jj \
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
# end
# end
function t
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
end
function temp
t $argv
end
function rs
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
cargo init . --bin --name $(basename "$PWD")
vim src/main.rs
end
fish_add_path "$HOME/.cargo/bin"
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/Documents/scripts"
fish_add_path "$HOME/.nix-profile/bin"
function fish_greeting
${pkgs.blahaj}/bin/blahaj -s
echo "welcome to $(uname -n), $(whoami)!"
end
'';
}; };
}; };
home.activation = { zoxide = {
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] '' enable = true;
setupTide() { enableFishIntegration = true;
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${ };
lib.cli.toGNUCommandLineShell { } {
auto = true; direnv = {
style = "Lean"; enable = true;
prompt_colors = "True color"; # enableFishIntegration = lib.mkDefault true;
show_time = "No"; };
lean_prompt_height = "Two lines";
prompt_connection = "Disconnected"; fzf = {
prompt_spacing = "Compact"; enable = true;
icons = "Few icons"; enableFishIntegration = true;
transient = "Yes"; };
}
}"} >/dev/null 2>&1 fish = {
enable = true;
shellAliases = aliases;
plugins = with pkgs.fishPlugins; [
{
name = "bang-bang";
src = pkgs.fetchFromGitHub {
owner = "oh-my-fish";
repo = "plugin-bang-bang";
rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419";
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
};
} }
setupTide {
name = "tide";
inherit (tide) src;
}
{
name = "sponge";
inherit (sponge) src;
}
{
name = "autopair";
inherit (autopair) src;
}
];
functions = {
fish_jj_prompt = {
body = ''
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
return 1
end
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
separate(
" ",
bookmarks.join(", "),
change_id.shortest(),
commit_id.shortest(),
if(conflict, "conflict"),
if(empty, "empty"),
if(divergent, "divergent"),
if(hidden, "hidden"),
)
'
'';
};
_tide_item_jj = {
body = ''
set -l _tide_item_jj_color $_tide_location_color
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
'';
};
_tide_item_git = {
body = ''
if not test -d .jj
fish_git_prompt '%s'
end
'';
};
};
interactiveShellInit = ''
fish_vi_key_bindings
set -g sponge_successful_exit_codes 0
set -g sponge_allow_previously_successful false
set -g sponge_delay 10
${config.programs.jujutsu.package}/bin/jj util completion fish | source
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
# if test $tide_item_jj_idx
# set tide_left_prompt_items \
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
# jj \
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
# end
# end
function t
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
end
function temp
t $argv
end
function rs
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
cargo init . --bin --name $(basename "$PWD")
vim src/main.rs
end
fish_add_path "$HOME/.cargo/bin"
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/Documents/scripts"
fish_add_path "$HOME/.nix-profile/bin"
function fish_greeting
${pkgs.blahaj}/bin/blahaj -s
end
''; '';
}; };
}; };
};
home.activation = {
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
setupTide() {
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
lib.cli.toGNUCommandLineShell { } {
auto = true;
style = "Lean";
prompt_colors = "True color";
show_time = "No";
lean_prompt_height = "Two lines";
prompt_connection = "Disconnected";
prompt_spacing = "Compact";
icons = "Few icons";
transient = "Yes";
}
}"} >/dev/null 2>&1
}
setupTide
'';
};
};
} }

View file

@ -1,44 +1,39 @@
inputs@{ machine, ... }: _: {
{ custom.program.git.requirements = [ "cli" ];
imports = machine.program { custom.program.git.home-config = _: {
name = "git"; programs.git = {
inherit inputs; enable = true;
requirements = [ "cli" ]; signing.key = "/home/jana/.ssh/id_ed25519.pub";
home-config = _: { signing.signByDefault = true;
programs.git = {
enable = true;
signing.key = "/home/jana/.ssh/id_ed25519.pub";
signing.signByDefault = true;
settings = { settings = {
user.email = "jana@donsz.nl"; user.email = "jana@donsz.nl";
user.name = "Jana Dönszelmann"; user.name = "Jana Dönszelmann";
push.autoSetupRemote = true; push.autoSetupRemote = true;
pull.rebase = true; pull.rebase = true;
init.defaultBranch = "main"; init.defaultBranch = "main";
gpg.format = "ssh"; gpg.format = "ssh";
diff.colorMoved = "default"; diff.colorMoved = "default";
rerere.enabled = true; rerere.enabled = true;
alias.conflicts = "diff --check";
};
alias.conflicts = "diff --check";
}; };
programs.delta = { };
enable = true;
options = { programs.delta = {
navigate = true; enable = true;
light = false; options = {
side-by-side = true; navigate = true;
features = "decorations interactive"; light = false;
interactive = { side-by-side = true;
keep-plus-minus-markers = false; features = "decorations interactive";
}; interactive = {
keep-plus-minus-markers = false;
}; };
enableGitIntegration = true;
}; };
enableGitIntegration = true;
}; };
}; };
} }

View file

@ -1,198 +1,193 @@
inputs@{ machine, ... }: _: {
{ custom.program.jujutsu.requirements = [ "cli" ];
imports = machine.program { custom.program.jujutsu.home-config =
name = "jujutsu"; { config, pkgs, ... }:
inherit inputs; {
requirements = [ "cli" ]; programs.jujutsu = {
home-config = enable = true;
{ config, pkgs, ... }: # package = pkgs.custom.jujutsu;
{
programs.jujutsu = {
enable = true;
# package = pkgs.custom.jujutsu;
settings = { settings = {
user = { user = {
email = config.programs.git.settings.user.email; email = config.programs.git.settings.user.email;
name = config.programs.git.settings.user.name; name = config.programs.git.settings.user.name;
}; };
ui = { ui = {
paginate = "never"; paginate = "never";
# pager = "${pkgs.delta}/bin/delta"; # pager = "${pkgs.delta}/bin/delta";
# for delta # for delta
# diff-formatter = ":git"; # diff-formatter = ":git";
diff-formatter = [ diff-formatter = [
"${pkgs.difftastic}/bin/difft" "${pkgs.difftastic}/bin/difft"
"--color=always" "--color=always"
"$left" "$left"
"$right" "$right"
];
default-command = [
"log"
"--reversed"
"--no-pager"
];
merge-editor = [
"${pkgs.meld}/bin/meld"
"$left"
"$base"
"$right"
"-o"
"$output"
"--auto-merge"
];
# diff-editor = "${pkgs.meld}/bin/meld";
};
fsmonitor.backend = "watchman";
fsmonitor.watchman.register-snapshot-trigger = true;
# revsets.log = "@ | ancestors(trunk()..(visible_heads() & mine()), 2) | trunk()";
# revsets.log = "trunk()..@ | @..trunk() | trunk() | @:: | fork_point(trunk() | @)";
revsets.log = "trunk() | ancestors(trunk()..heads(((trunk()..visible_heads()) & my() | @)::), 2)";
revset-aliases = {
"my()" = "user(\"${config.programs.jujutsu.settings.user.email}\")";
"user(x)" = "author(x) | committer(x)";
current = "bookmarks() & my() & ~immutable()";
"closest_bookmark(to)" = "heads(::to & bookmarks())";
};
template-aliases = {
"format_timestamp(timestamp)" = "timestamp.ago()";
log_oneline = ''
if(root,
format_root_commit(self),
label(if(current_working_copy, "working_copy"),
concat(
separate(" ",
format_short_change_id_with_change_offset(self),
if(empty, label("empty", "(empty)")),
if(description,
description.first_line(),
label(if(empty, "empty"), description_placeholder),
),
bookmarks,
tags,
working_copies,
if(conflict, label("conflict", "conflict")),
if(config("ui.show-cryptographic-signatures").as_boolean(),
format_short_cryptographic_signature(signature)),
) ++ "\n",
),
)
)
'';
# if(.contained_in('first_parent(@)'), label("git_head", "HEAD")),
status_summary = "'\n' ++ self.diff().summary() ++ '\n'";
log_oneline_with_status_summary = "log_oneline ++ if(self.current_working_copy() && self.diff().files().len() > 0, status_summary)";
};
aliases =
let
util = script: [
"util"
"exec"
"--"
"bash"
"-c"
script
]; ];
in
default-command = [ {
tug = [
"bookmark"
"move"
"--from"
"heads(@- & bookmarks())"
"--to"
"coalesce(@ & ~empty(), @-)"
];
fuck = [
"bookmark"
"move"
"--from"
"heads(@ & bookmarks())"
"--to"
"@-"
"--allow-backwards"
];
catchup = [
"rebase"
"-b"
"bookmarks() & mine() & ~immutable()"
"-d"
"trunk()"
"--skip-emptied"
];
pull = util ''
jj git fetch
jj catchup
'';
ch = [
"show"
"--stat"
];
move = [
"rebase"
"-r"
];
push = [
"git"
"push"
];
ll = [
"log" "log"
"--reversed" "-T"
"--no-pager" "builtin_log_compact"
]; ];
merge-editor = [ mdiff = [
"${pkgs.meld}/bin/meld" "diff"
"$left" "--from"
"$base" "trunk()"
"$right"
"-o"
"$output"
"--auto-merge"
]; ];
# diff-editor = "${pkgs.meld}/bin/meld";
}; };
fsmonitor.backend = "watchman"; templates = {
fsmonitor.watchman.register-snapshot-trigger = true; log_node = ''
label("node",
revsets.log = "@ | ancestors(trunk()..(visible_heads() & mine()), 2) | trunk()"; coalesce(
# revsets.log = "trunk()..@ | @..trunk() | trunk() | @:: | fork_point(trunk() | @)"; if(!self, label("elided", "~")),
# revsets.log = "trunk() | ancestors(trunk()..heads(((trunk()..visible_heads()) & my() | @)::), 2)"; if(current_working_copy, label("working_copy", "@")),
if(conflict, label("conflict", "×")),
revset-aliases = { if(immutable, label("immutable", "*")),
"my()" = "user(\"${config.programs.jujutsu.settings.user.email}\")"; label("normal", "·")
"user(x)" = "author(x) | committer(x)";
current = "bookmarks() & my() & ~immutable()";
"closest_bookmark(to)" = "heads(::to & bookmarks())";
};
template-aliases = {
"format_timestamp(timestamp)" = "timestamp.ago()";
log_oneline = ''
if(root,
format_root_commit(self),
label(if(current_working_copy, "working_copy"),
concat(
separate(" ",
format_short_change_id_with_change_offset(self),
if(empty, label("empty", "(empty)")),
if(description,
description.first_line(),
label(if(empty, "empty"), description_placeholder),
),
bookmarks,
tags,
working_copies,
if(conflict, label("conflict", "conflict")),
if(config("ui.show-cryptographic-signatures").as_boolean(),
format_short_cryptographic_signature(signature)),
) ++ "\n",
),
)
) )
''; )
# if(.contained_in('first_parent(@)'), label("git_head", "HEAD")), '';
status_summary = "'\n' ++ self.diff().summary() ++ '\n'"; log = "log_oneline_with_status_summary";
log_oneline_with_status_summary = "log_oneline ++ if(self.current_working_copy() && self.diff().files().len() > 0, status_summary)"; git_push_bookmark = ''"jdonszelmann/" ++ change_id.short()'';
}; };
aliases = signing = {
let # sign-all = true;
util = script: [ behavior = "own";
"util" backend = "ssh";
"exec" key = "~/.ssh/id_ed25519.pub";
"--" };
"bash"
"-c"
script
];
in
{
tug = [
"bookmark"
"move"
"--from"
"heads(@- & bookmarks())"
"--to"
"coalesce(@ & ~empty(), @-)"
];
fuck = [
"bookmark"
"move"
"--from"
"heads(@ & bookmarks())"
"--to"
"@-"
"--allow-backwards"
];
catchup = [
"rebase"
"-b"
"bookmarks() & mine() & ~immutable()"
"-d"
"trunk()"
"--skip-emptied"
];
pull = util ''
jj git fetch
jj catchup
'';
ch = [
"show"
"--stat"
];
move = [
"rebase"
"-r"
];
push = [
"git"
"push"
];
ll = [
"log"
"-T"
"builtin_log_compact"
];
mdiff = [
"diff"
"--from"
"trunk()"
];
};
templates = { # remotes.origin.auto-track-bookmarks = true;
log_node = '' # remotes.upstream.auto-track-bookmarks = true;
label("node",
coalesce(
if(!self, label("elided", "~")),
if(current_working_copy, label("working_copy", "@")),
if(conflict, label("conflict", "×")),
if(immutable, label("immutable", "*")),
label("normal", "·")
)
)
'';
log = "log_oneline_with_status_summary";
git_push_bookmark = ''"jdonszelmann/" ++ change_id.short()'';
};
signing = { git = {
# sign-all = true; private-commits = "description(glob:'wip:*') | description(glob:'trial:*')";
behavior = "own"; write-change-id-header = true;
backend = "ssh";
key = "~/.ssh/id_ed25519.pub";
};
# remotes.origin.auto-track-bookmarks = true; fetch = [
# remotes.upstream.auto-track-bookmarks = true; "upstream"
"origin"
git = { ];
private-commits = "description(glob:'wip:*') | description(glob:'trial:*')"; push = "origin";
write-change-id-header = true;
fetch = [
"upstream"
"origin"
];
push = "origin";
};
}; };
}; };
}; };
}; };
} }

View file

@ -1,4 +1,4 @@
inputs@{ machine, pkgs, ... }: { pkgs, ... }:
let let
kanata-config = '' kanata-config = ''
(defcfg (defcfg
@ -26,29 +26,25 @@ let
(deflayer control (deflayer control
@esc @esc
grv 1 2 3 4 5 6 7 8 9 0 - = bspc grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab @mcleft @mup @mcright @replay t y u i o p @wup @wdown \ tab q w e @replay t y u i o p @wup @wdown \
@cap @mleft @mdown @mright f g left down up right ; ' bspc @cap a s d f g left down up right ; ' bspc
lsft z x C-c v bspc n @macro , . C-f rsft lsft z x C-c v bspc n @macro , . C-f rsft
lctl lmet lalt spc ralt @rctl lctl lmet lalt spc ralt @rctl
) )
(deflayermap (other) (deflayermap (programming)
w @mup f (macro f n spc)
a @mleft w (macro w h e r e spc)
s @mdown l (macro l o o p { ret)
d @mright u (macro u s e spc)
i (macro i m p o r t spc)
q @mcleft s (macro s e l f spc)
e @mcright
[ @wup
] @wdown
) )
(defalias (defalias
;; hold esc ;; hold esc
esc (tap-hold 200 200 C-k (macro C-f esc)) esc (tap-hold 800 800 esc caps)
;; control ;; control
cap (tap-hold-release 200 200 cap (tap-hold-release 200 200
@ -62,14 +58,6 @@ let
lmet lmet
) )
mup (movemouse-up 1 1)
mleft (movemouse-left 1 1)
mdown (movemouse-down 1 1)
mright (movemouse-right 1 1)
mcleft mlft
mcright mrgt
macro (dynamic-macro-record 0) macro (dynamic-macro-record 0)
replay (dynamic-macro-play 0) replay (dynamic-macro-play 0)
@ -80,42 +68,38 @@ let
rctl ( rctl (
tap-hold-release tap-hold-release
200 200 200 200
C-k (layer-while-held other) C-k (layer-while-held programming)
) )
) )
''; '';
in in
{ {
imports = machine.program { custom.program.kanata.requirements = [ "graphical" ];
name = "kanata"; custom.program.kanata.home-config =
inherit inputs; { pkgs, config, ... }:
requirements = [ "graphical" ]; {
home-config = systemd.user.services.kanata = {
{ pkgs, ... }: Unit = {
{ Description = "kanata";
systemd.user.services.kanata = {
Unit = {
Description = "kanata";
};
Service = {
Restart = "always";
RestartSec = "3";
ExecStart = "${pkgs.kanata-with-cmd}/bin/kanata --cfg ${pkgs.writeText "kanata.kbd" kanata-config}";
Nice = "-20";
};
Install = {
WantedBy = [ "default.target" ];
};
}; };
home.file.kanata = { Service = {
target = ".config/kanata/kanata.kbd"; Restart = "always";
text = kanata-config; RestartSec = "3";
ExecStart = "${pkgs.kanata-with-cmd}/bin/kanata --cfg ${pkgs.writeText "kanata.kbd" kanata-config}";
Nice = "-20";
};
Install = {
WantedBy = [ "default.target" ];
}; };
}; };
};
home.file.kanata = {
target = ".config/kanata/kanata.kbd";
text = kanata-config;
};
};
# custom.program.kanata.system-config = # custom.program.kanata.system-config =
# { pkgs, ... }: # { pkgs, ... }:
@ -127,6 +111,15 @@ in
# reboot or sudo udevadm control --reload-rules && sudo udevadm trigger # reboot or sudo udevadm control --reload-rules && sudo udevadm trigger
# sudo modprobe uinput # sudo modprobe uinput
users.groups.uinput = { };
users.extraUsers.jana.extraGroups = [
"uinput"
"input"
];
environment.systemPackages = [ pkgs.kanata-with-cmd ];
services.udev.extraRules = ''
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
'';
# }; # };
} }

View file

@ -1,68 +1,59 @@
inputs@{ machine, ... }: _: {
{ custom.program.kitty.requirements = [ "graphical" ];
imports = machine.program { custom.program.kitty.home-config =
name = "kitty"; { pkgs, flakes, ... }:
inherit inputs; {
requirements = [ "graphical" ]; home.packages = pkgs.custom.maple-fonts-pack;
home-config =
{ pkgs, flakes, ... }:
{
home.packages = pkgs.custom.maple-fonts-pack;
programs.kitty = { programs.kitty = {
enable = true; enable = true;
font = { font = {
name = "Maple Mono NF"; name = "Maple Mono NF";
size = 11.0; size = 13.0;
package = pkgs.jetbrains-mono; package = pkgs.jetbrains-mono;
};
settings = {
scrollback_lines = 20000;
allow_hyperlinks = true;
repaint_delay = 10;
input_delay = 3;
enable_audio_bell = false;
update_check_interval = 0;
initial_window_width = "95c";
initial_window_height = "30c";
remember_window_size = "no";
draw_minimal_borders = false;
hide_window_decorations = true;
shell = "${pkgs.tmux}/bin/tmux";
clipboard_control = "write-clipboard write-primary read-clipboard read-primary";
foreground = "#fcfcfc";
background = "#232627";
linux_display_server = "auto";
};
keybindings = {
"ctrl+f" =
"launch --location=hsplit --allow-remote-control kitty +kitten ${flakes.kitty-search}/search.py @active-kitty-window-id";
"ctrl+alt+r" = "load_config_file";
"ctrl+shift+r" = "no_op";
"super+`" = "no_op";
"ctrl+EQUAL" = "change_font_size all +2.0";
"ctrl+minus" = "change_font_size all -2.0";
"ctrl+0" = "change_font_size all 0";
# "ctrl+/" = "send_text all ";
"super+~" = "no_op";
# required for vim!!
# terminals map ctrl+i to tab. I want them to do different things in vim.
"ctrl+i" = "send_text all \\x01";
};
extraConfig = ''
mouse_map left click ungrabbed no-op
'';
}; };
settings = {
scrollback_lines = 20000;
allow_hyperlinks = true;
repaint_delay = 10;
input_delay = 3;
enable_audio_bell = false;
update_check_interval = 0;
initial_window_width = "95c";
initial_window_height = "30c";
remember_window_size = "no";
draw_minimal_borders = false;
hide_window_decorations = true;
shell = "${pkgs.tmux}/bin/tmux";
clipboard_control = "write-clipboard write-primary read-clipboard read-primary";
foreground = "#fcfcfc";
background = "#232627";
linux_display_server = "auto";
};
keybindings = {
"ctrl+f" =
"launch --location=hsplit --allow-remote-control kitty +kitten ${flakes.kitty-search}/search.py @active-kitty-window-id";
"ctrl+alt+r" = "load_config_file";
"ctrl+shift+r" = "no_op";
"super+`" = "no_op";
"ctrl+EQUAL" = "change_font_size all +2.0";
"ctrl+minus" = "change_font_size all -2.0";
"ctrl+0" = "change_font_size all 0";
# "ctrl+/" = "send_text all ";
"super+~" = "no_op";
};
extraConfig = ''
mouse_map left click ungrabbed no-op
'';
}; };
}; };
} }

File diff suppressed because it is too large Load diff

View file

@ -19,32 +19,134 @@ local esc = vim.api.nvim_replace_termcodes(
) )
local api = require('Comment.api') local api = require('Comment.api')
vim.keymap.set("n", "<C-_>", ":lua require('Comment.api').toggle.linewise.current()<CR>j", { remap = true }) vim.keymap.set("n", "<C-_>", ":lua require('Comment.api').toggle.linewise.current()<CR> j", { remap = true })
vim.keymap.set("i", "<C-_>", "<c-o>:lua require('Comment.api').toggle.linewise.current()<CR>", { remap = true }) vim.keymap.set("i", "<C-_>", "<c-o>:lua require('Comment.api').toggle.linewise.current()<CR>", { remap = true })
vim.keymap.set("x", "<C-_>", function() vim.keymap.set("x", "<C-_>", function()
vim.api.nvim_feedkeys(esc, 'nx', false) vim.api.nvim_feedkeys(esc, 'nx', false)
api.toggle.linewise(vim.fn.visualmode()) api.toggle.linewise(vim.fn.visualmode())
end, { remap = true }) end, { remap = true })
vim.keymap.set('n', 'gr', (function() builtin.lsp_references({jump_type="vsplit"}) end), {})
vim.keymap.set('n', 'gd', (function() builtin.lsp_definitions({jump_type="vsplit"}) end), {})
vim.keymap.set('n', 'gt', (function() builtin.lsp_type_definitions({jump_type="vsplit"}) end), {})
local barbar_state = require("barbar.state")
function find_windows_with_buffer(bufnum)
windows = {}
-- vim.keymap.set('n', 'gr', (function() builtin.lsp_references({jump_type="vsplit"}) end), {}) local window_list = vim.api.nvim_list_wins()
-- vim.keymap.set('n', 'gd', (function() builtin.lsp_definitions({jump_type="vsplit"}) end), {})
-- vim.keymap.set('n', 'gt', (function() builtin.lsp_type_definitions({jump_type="vsplit"}) end), {})
-- vim.keymap.set('n', 'gt', (function() builtin.lsp_type_definitions({jump_type="vsplit"}) end), {})
for _, window in ipairs(window_list) do
local win_info = vim.fn.getwininfo(window)
if win_info ~= nil then
for _, buf in ipairs(win_info) do
if buf.bufnr == bufnum then
table.insert(windows, window)
end
end
end
end
-- local function close_floating() return windows
-- for _, win in ipairs(vim.api.nvim_list_wins()) do end
-- local config = vim.api.nvim_win_get_config(win)
-- if config.relative ~= "" then function num_useful_windows()
-- vim.api.nvim_win_close(win, false) local window_list = vim.api.nvim_tabpage_list_wins(0)
-- end local num = 0
-- end
-- end for _, window in ipairs(window_list) do
-- local win_info = vim.fn.getwininfo(window)
-- vim.keymap.set("n", "<Esc>", close_floating, { desc = "Close floats, clear highlights" })
if win_info ~= nil then
for _, win_info in ipairs(win_info) do
if buf_is_useful(win_info.bufnr) then
num = num + 1
end
end
end
end
return num
end
function buf_is_useful(bufnr)
local bufname = vim.api.nvim_buf_get_name(bufnr)
-- if the window's buffer has no name, it's not useful
if bufname == '' then
return false
end
-- print("bufname: ", bufname)
-- if the window's buffer is read only, it's not useful
local readonly = vim.api.nvim_buf_get_option(bufnr, 'readonly')
if readonly then
-- print("=readonly")
return false
end
-- -- if the buffer is not listed, it's not useful
local listed = vim.api.nvim_buf_get_option(bufnr, 'buflisted')
if not listed then
-- print("=unlisted")
return false
end
local buftype = vim.api.nvim_buf_get_option(bufnr, 'buftype')
if buftype == "quickfix" then
-- print("=readonly")
return false
end
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
if #lines > 1 or (#lines == 1 and #lines[1] > 0) then
return true -- If the buffer has content, return false
else
return false
end
-- the window contains a useful buffer
return true
end
function quit_window(window)
vim.api.nvim_win_call(window, function()
vim.cmd "quit"
end)
end
vim.api.nvim_create_user_command('CloseBuffer', function (opts)
if num_useful_windows() > 1 then
vim.cmd {
cmd = "quit",
bang = opts.bang,
}
else
vim.cmd {
cmd = "BufferDelete",
bang = opts.bang,
}
if not buf_is_useful(vim.api.nvim_get_current_buf()) then
vim.cmd {
cmd = "quit",
bang = opts.bang,
}
end
end
end, { desc = "Close Current Buffer", bang = true, })
local function close_floating()
for _, win in ipairs(vim.api.nvim_list_wins()) do
local config = vim.api.nvim_win_get_config(win)
if config.relative ~= "" then
vim.api.nvim_win_close(win, false)
end
end
end
vim.keymap.set("n", "<Esc>", close_floating, { desc = "Close floats, clear highlights" })
local builtin = require('telescope.builtin') local builtin = require('telescope.builtin')

View file

@ -1,160 +1,104 @@
inputs@{ machine, ... }: _: {
{ custom.program.nvim.requirements = [ "cli" ];
imports = machine.program { custom.program.nvim.home-config =
name = "nvim"; { pkgs, flakes, ... }:
inherit inputs; {
requirements = [ "cli" ];
home-config =
{
pkgs,
flakes,
lib,
...
}:
let
nvim_mime_types = [
"application/x-zerosize"
"text/english"
"text/plain"
"text/x-makefile"
"text/x-c++hdr"
"text/x-c++src"
"text/x-chdr"
"text/x-csrc"
"text/x-java"
"text/x-moc"
"text/x-pascal"
"text/x-tcl"
"text/x-tex"
"application/x-shellscript"
"text/x-c"
"text/x-c++"
];
desktop-entry-name = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanvim";
desktop-entry = pkgs.makeDesktopItem {
name = desktop-entry-name;
desktopName = "neovim";
exec = "${./editor-hax.py} %F";
tryExec = "${./editor-hax.py}";
terminal = false;
type = "Application";
categories = [
"Utility"
"TextEditor"
];
icon = "terminal";
mimeTypes = nvim_mime_types;
};
in
{
home = {
sessionVariables = {
EDITOR = "nvim";
};
};
home.file.".local/share/applications/${desktop-entry-name}.desktop" = { home = {
source = "${desktop-entry}/share/applications/${desktop-entry-name}.desktop"; sessionVariables = {
}; EDITOR = "nvim";
xdg.mimeApps.associations.added = lib.mergeAttrsList (
map (mime: {
${mime} = [ "${desktop-entry-name}.desktop" ];
}) nvim_mime_types
);
imports = [
flakes.nixvim.homeModules.nixvim
./options.nix
./plugins.nix
./keys.nix
];
programs.nixvim = {
enable = true;
globals.mapleader = " ";
globals.maplocalleader = " ";
viAlias = true;
vimAlias = true;
# Highlight and remove extra white spaces
# same color as cursorline as per
# https://github.com/joshdick/onedark.vim/blob/390b893d361c356ac1b00778d849815f2aa44ae4/autoload/onedark.vim
highlight.ExtraWhitespace.bg = "#2C323C";
match.ExtraWhitespace = "\\s\\+$";
clipboard.providers.wl-copy.enable = true;
performance = {
byteCompileLua.enable = true;
combinePlugins = {
enable = true;
standalonePlugins = [
# clashes with lualine
"onedark.nvim"
];
};
};
extraLuaPackages = ps: [ ps.magick ];
extraPackages = [ pkgs.imagemagick ];
# package = (import inputs.unstable { inherit (pkgs) system; }).neovim-unwrapped;
package = pkgs.neovim-unwrapped;
colorschemes.onedark = {
enable = true;
settings = {
style = "deep";
highlights = {
# bright green doccomments
"@lsp.type.comment".fg = "#77B767";
"@comment.documentation.rust".fg = "#77B767";
"@comment.documentation".fg = "#77B767";
"@comment".fg = "#426639";
# "Visual".bg = "#2a2e36";
# "Cursorline".bg = "#2a2e36";
};
};
};
extraConfigLuaPre = ''
require("neoconf").setup({})
'';
extraConfigLua = ''
require("render-markdown").setup {
latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text',
}
''
# local lspconfig = require 'lspconfig'
# local configs = require 'lspconfig.configs'
# if not configs.foo_lsp then
# configs.noteslsp = {
# default_config = {
# -- cmd = {'${pkgs.custom.noteslsp}/bin/noteslsp'},
# cmd = {'./noteslsp/target/debug/noteslsp'},
# filetypes = {'markdown'},
# root_dir = function(fname)
# return lspconfig.util.find_git_ancestor(fname)
# end,
# settings = {}
# ,
# },
# }
# end
#
# lspconfig.noteslsp.setup{}
# ''
+ (builtins.readFile ./config.lua);
extraConfigLuaPost = ''
'';
}; };
}; };
};
imports = [
flakes.nixvim.homeModules.nixvim
./options.nix
./plugins.nix
./keys.nix
];
programs.nixvim = {
enable = true;
globals.mapleader = " ";
globals.maplocalleader = " ";
viAlias = true;
vimAlias = true;
# Highlight and remove extra white spaces
# same color as cursorline as per
# https://github.com/joshdick/onedark.vim/blob/390b893d361c356ac1b00778d849815f2aa44ae4/autoload/onedark.vim
highlight.ExtraWhitespace.bg = "#2C323C";
match.ExtraWhitespace = "\\s\\+$";
clipboard.providers.wl-copy.enable = true;
performance = {
byteCompileLua.enable = true;
combinePlugins = {
enable = true;
standalonePlugins = [
# clashes with lualine
"onedark.nvim"
];
};
};
extraLuaPackages = ps: [ ps.magick ];
extraPackages = [ pkgs.imagemagick ];
# package = (import inputs.unstable { inherit (pkgs) system; }).neovim-unwrapped;
package = pkgs.neovim-unwrapped;
colorschemes.onedark = {
enable = true;
settings = {
style = "deep";
highlights = {
# bright green doccomments
"@lsp.type.comment".fg = "#77B767";
"@comment.documentation.rust".fg = "#77B767";
"@comment.documentation".fg = "#77B767";
"@comment".fg = "#426639";
# "Visual".bg = "#2a2e36";
# "Cursorline".bg = "#2a2e36";
};
};
};
extraConfigLuaPre = ''
require("neoconf").setup({})
'';
extraConfigLua = ''
require("render-markdown").setup {
latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text',
}
''
# local lspconfig = require 'lspconfig'
# local configs = require 'lspconfig.configs'
# if not configs.foo_lsp then
# configs.noteslsp = {
# default_config = {
# -- cmd = {'${pkgs.custom.noteslsp}/bin/noteslsp'},
# cmd = {'./noteslsp/target/debug/noteslsp'},
# filetypes = {'markdown'},
# root_dir = function(fname)
# return lspconfig.util.find_git_ancestor(fname)
# end,
# settings = {}
# ,
# },
# }
# end
#
# lspconfig.noteslsp.setup{}
# ''
+ (builtins.readFile ./config.lua);
};
};
} }

View file

@ -1,119 +0,0 @@
#!/usr/bin/env python
import subprocess
import os
import sys
import re
from urllib.parse import urlsplit
extract_line_regex = re.compile(r"(.*?)(?::([0-9]+))?(?::([0-9]+))?(:)?$")
main_editor = "nvim"
editors = [main_editor, "vim", "vi"]
real_editor = os.environ.get("REAL_EDITOR", None)
editor_command = main_editor
if real_editor is not None:
editors.append(real_editor)
editor_command = real_editor
def run(cmd, only_stdout=True):
res = subprocess.run(cmd, capture_output=True, text=True, shell=True)
if only_stdout:
return str(res.stdout)
else:
return res
def find_pane(window):
for editor in editors:
pane = run(f"tmux list-panes -a -f '#{{&&:#{{==:#{{window_id}},{window}}},#{{==:#{{pane_current_command}},{editor}}}}}' -F '#{{pane_id}}'").strip();
if pane != "":
return pane
def create_pane(args):
run(f'tmux split-window -h -P -F "#{{pane_id}}" {editor_command} {args}')
def find_or_create_pane(window, args):
if pane := find_pane(window):
# exit copy mode so we don't send these commands directly to tmux
run(f"tmux send-keys -t {pane} -X cancel")
# Escape for some reason doesn't get sent as the escape key if it shows up next to any other keys???
run(f"tmux send-keys -t {pane} Escape")
# note the space, this tells nvim not to save it in history
run(f"tmux send-keys -t {pane} \": drop {args}\" Enter")
run(f"tmux select-pane -t {pane} -Z")
else:
create_pane(args)
def split_line(filename):
mtch = extract_line_regex.match(filename)
file = mtch.group(1)
line = mtch.group(2)
column = mtch.group(3)
url = urlsplit(line)
if url.scheme == "file" and url.path != file:
file = url.path
file = os.path.abspath(file)
print(f"opening {file}:{line}:{column}")
return file, line, column
def join_line(filename, maybe_line, maybe_column):
assert not (maybe_line is None and maybe_column is not None)
if maybe_line is None:
return filename
if maybe_column is None:
maybe_column = "0"
return f"+normal!{maybe_line}G{maybe_column} {filename}"
def trim(arg):
if arg.startswith("\"") and not arg.endswith("\""):
arg = arg.lstrip("\"")
if arg.endswith("\"") and not arg.startswith("\""):
arg = arg.rstrip("\"")
return arg.strip()
def editor_hax(filename):
args = split_line(trim(filename))
current_window = run("tmux display-message -p \"#{window_id}\"").strip();
find_or_create_pane(current_window, join_line(*args))
def xdg_open(arg):
subprocess.run(f"xdg-open {trim(arg)}", shell=True)
def xdg_open_proxy(*args):
for arg in args:
try:
_file, line, _column = split_line(arg)
if line is not None:
editor_hax(arg)
else:
xdg_open(arg)
except:
xdg_open(arg)
def usage():
print(f"usage: {sys.argv[0]} filename:(line):(column)")
print(" Opens a file with line number and colum in the editor in another pane of the current tmux window")
print(f"usage: {sys.argv[0]} xdg-open-proxy filename:(line):(column)")
print(" Calls xdg-open on the given parameters. However, if any part contains a line number and or column, opens in nvim like editor-hax")
exit(1)
if __name__ == "__main__":
if len(sys.argv) < 2:
usage()
elif sys.argv[1] == "xdg-open-proxy":
if len(sys.argv) < 3:
usage()
else:
xdg_open_proxy(*sys.argv[1:])
elif len(sys.argv) > 2:
usage()
else:
editor_hax(sys.argv[1])

View file

@ -17,23 +17,39 @@ in
# splitting # splitting
(map "n" "<leader>s" "<cmd>vertical sb<cr>") (map "n" "<leader>s" "<cmd>vertical sb<cr>")
# closing
(map "n" "<leader>w" "<cmd>BufferClose<cr>") # single buffer
(map "n" "<leader>cb" "<cmd>BufferClose<cr>") # single buffer
(map "n" "<leader>ct" "<cmd>CloseBuffer<cr>") # buffer or extra tab
(map "n" "<leader>q" "<cmd>CloseBuffer<cr>") # buffer or extra tab
(map "n" "<leader>co" "<cmd>silent! BufferCloseAllButVisible<cr>") # other buffers
(map "n" "<leader>cl" "<cmd>silent! BufferCloseBuffersLeft<cr>") # other buffers (left)
(map "n" "<leader>cr" "<cmd>silent! BufferCloseBuffersRight<cr>") # other buffers (right)
# moving
(map "n" "mL" "<cmd>BufferMovePrevious<cr>") # left
(map "n" "mr" "<cmd>BufferMoveNext<cr>") # right
(map "n" "m0" "<cmd>BufferMoveStart<cr>") # start
(map "n" "m$" "<cmd>BufferMoveEnd<cr>") # end
(map "n" "<leader>jb" "<cmd>BufferPick<cr>") # jump to tab
# jumplist # jumplist
(map "" "<C-a>" "<C-i>") # note: C-a is actually C-i, remapped through kitty. # (map "n" "<leader><Tab>" "<C-o>")
# (map "n" "<leader><S-Tab>" "<C-i>")
(luamap "n" "<leader>r" "${telescope}.jumplist()") (luamap "n" "<leader>r" "${telescope}.jumplist()")
(luamap "n" "<leader>R" "${telescope}.loclist()")
# pickers # pickers
(luamap "n" "<leader><leader>" "${telescope}.find_files()") (luamap "n" "<leader><leader>" "${telescope}.find_files()")
(luamap "n" "<leader>f" "${telescope}.live_grep()") (luamap "n" "<leader>f" "${telescope}.live_grep()")
(luamap "n" "<leader>t" "${telescope}.lsp_document_symbols()") (luamap "n" "<leader>t" "${telescope}.lsp_document_symbols()")
(luamap "n" "<leader>T" "${telescope}.lsp_dynamic_workspace_symbols()") (luamap "n" "<leader>T" "${telescope}.lsp_dynamic_workspace_symbols()")
(luamap "n" "<leader>/" "${telescope}.current_buffer_fuzzy_find()")
# last used pickers/searches # last used pickers/searches
(luamap "n" "<leader>p" "${telescope}.pickers()") (luamap "n" "<leader>h" "${telescope}.pickers()")
(luamap "n" "<leader>m" "${telescope}.search_history()")
# open buffers # open buffers
(luamap "n" "<leader>b" "${telescope}.buffers({sort_mru = true})") (luamap "n" "<leader>b" "${telescope}.buffers({sort_mru = true})")
(luamap "n" "<leader><Tab>" "${telescope}.buffers({sort_mru = true})")
# diagnostics # diagnostics
(map "n" "<leader>d" "<cmd>Trouble diagnostics toggle filter.buf=0<cr>") (map "n" "<leader>d" "<cmd>Trouble diagnostics toggle filter.buf=0<cr>")
@ -53,25 +69,26 @@ in
# expand macro # expand macro
(map "n" "<leader>em" "<cmd>RustLsp expandMacro<cr>") (map "n" "<leader>em" "<cmd>RustLsp expandMacro<cr>")
# easier quitting etc
(map "ca" "W" "w")
(map "ca" "X" "x")
(map "ca" "Q" "CloseBuffer")
(map "ca" "q" "CloseBuffer")
# navigation # navigation
(map "" "<leader><Left>" "<C-w><Left>") (map "" "<leader><Left>" "<C-w><Left>")
(map "" "<leader><Right>" "<C-w><Right>") (map "" "<leader><Right>" "<C-w><Right>")
(map "" "<leader><Up>" "<C-w><Up>") (map "" "<leader><Up>" "<C-w><Up>")
(map "" "<leader><Down>" "<C-w><Down>") (map "" "<leader><Down>" "<C-w><Down>")
(map "" "<leader>h" "<C-w><Left>") (map "" "<leader><Down>" "<C-w><Down>")
(map "" "<leader>l" "<C-w><Right>")
(map "" "<leader>k" "<C-w><Up>")
(map "" "<leader>j" "<C-w><Down>")
# close buffer
(map "" "<leader>c" "<cmd>bd<cr>")
# { # {
# key = "/"; # key = "/";
# action = "<cmd>lua require('spectre').open_file_search({select_word=true})<CR>"; # action = "<cmd>lua require('spectre').open_file_search({select_word=true})<CR>";
# } # }
# (map "n" "t" "<cmd>Neotree toggle<cr>") (map "n" "t" "<cmd>Neotree toggle<cr>")
# tab for indent/dedent # tab for indent/dedent
(map "n" "<tab>" ">>_") (map "n" "<tab>" ">>_")
@ -81,9 +98,6 @@ in
(map "v" "<S-tab>" "<gv") (map "v" "<S-tab>" "<gv")
# to avoid many typos # to avoid many typos
# easier quitting etc
(map "n" ";" ":") (map "n" ";" ":")
(map "ca" "W" "w")
(map "ca" "X" "x")
]; ];
} }

View file

@ -84,9 +84,5 @@ _: {
"noselect" "noselect"
"noinsert" "noinsert"
]; ];
# disable auto-folding
foldlevel = 99;
foldlevelstart = 99;
}; };
} }

View file

@ -10,6 +10,15 @@ let
}; };
}; };
in in
# fzy-lua-native = pkgs.vimUtils.buildVimPlugin {
# name = "fzy-lua-native";
# src = pkgs.fetchFromGitHub {
# owner = "romgrk";
# repo = "fzy-lua-native";
# rev = "9d720745d5c2fb563c0d86c17d77612a3519c506";
# hash = "sha256-pBV5iGa1+5gtM9BcDk8I5SKoQ9sydOJHsmyoBcxAct0=";
# };
# };
{ {
programs.nixvim = { programs.nixvim = {
plugins = { plugins = {
@ -159,11 +168,7 @@ in
crates.enable = true; crates.enable = true;
fidget.enable = true; fidget.enable = true;
nvim-autopairs.enable = true; nvim-autopairs.enable = true;
spider.enable = true; # nvim-highlight-colors.enable = true;
origami = {
enable = true;
settings.autofold.enabled = false;
};
cmp = { cmp = {
enable = true; enable = true;
@ -216,15 +221,11 @@ in
"<C-Space>" = "cmp.mapping.complete()"; "<C-Space>" = "cmp.mapping.complete()";
"<CR>" = "cmp.mapping.confirm({ select = true })"; "<CR>" = "cmp.mapping.confirm({ select = true })";
"<C-d>" = '' "<C-d>" = ''
function(fallback) function()
if cmp.visible() then if cmp.visible_docs() then
if cmp.visible_docs() then cmp.close_docs()
cmp.close_docs()
else
cmp.open_docs()
end
else else
fallback() cmp.open_docs()
end end
end end
''; '';
@ -269,7 +270,7 @@ in
}; };
auto-session = { auto-session = {
enable = false; enable = true;
settings = { settings = {
auto_save_enabled = true; auto_save_enabled = true;
auto_restore_enabled = true; auto_restore_enabled = true;
@ -287,7 +288,7 @@ in
}; };
neo-tree = { neo-tree = {
enable = false; enable = true;
settings = { settings = {
close_if_last_window = true; close_if_last_window = true;
enable_git_status = false; enable_git_status = false;
@ -659,7 +660,7 @@ in
return wilder.renderer_mux({ return wilder.renderer_mux({
[':'] = popupmenu_renderer, [':'] = popupmenu_renderer,
['/'] = wildmenu_renderer, ['/'] = wildmenu_renderer,
substitute = wildmenu_enderer, substitute = wildmenu_renderer,
}) })
end)() end)()
''; '';
@ -694,7 +695,7 @@ in
]; ];
defaults = { defaults = {
path_display = [ "smart" ]; path_display = [ "smart" ];
layout_strategy = "flex"; layout_strategy = "horizontal";
layout_config = { layout_config = {
width = 0.99; width = 0.99;
height = 0.99; height = 0.99;
@ -708,6 +709,15 @@ in
enable = true; enable = true;
}; };
# tabs
barbar = {
enable = true;
settings = {
options.diagnostics = "nvim_lsp";
focus_on_close = "previous";
};
};
# for lsp/cmp inside markdown code blocks # for lsp/cmp inside markdown code blocks
otter = { otter = {
enable = true; enable = true;

View file

@ -1,207 +1,170 @@
inputs@{ machine, ... }: _: {
{ custom.program.tmux.requirements = [ "cli" ];
imports = machine.program { custom.program.tmux.home-config =
name = "tmux"; { pkgs, ... }:
inherit inputs; {
requirements = [ "cli" ]; programs.tmux = {
home-config = enable = true;
{ pkgs, ... }: mouse = true;
{ clock24 = true;
programs.tmux = {
enable = true;
mouse = true;
clock24 = true;
shortcut = "k"; shortcut = "k";
plugins = with pkgs; [ plugins = with pkgs; [
{ {
plugin = tmuxPlugins.mkTmuxPlugin { plugin = tmuxPlugins.mkTmuxPlugin {
pluginName = "suspend"; pluginName = "suspend";
version = "1a2f806"; version = "1a2f806";
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
owner = "MunifTanjim"; owner = "MunifTanjim";
repo = "tmux-suspend"; repo = "tmux-suspend";
rev = "1a2f806666e0bfed37535372279fa00d27d50d14"; rev = "1a2f806666e0bfed37535372279fa00d27d50d14";
sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv"; sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv";
};
}; };
extraConfig = '' };
set -g @suspend_key 'F11' extraConfig = ''
''; set -g @suspend_key 'F11'
} '';
{ }
plugin = tmuxPlugins.mode-indicator; {
} plugin = tmuxPlugins.mode-indicator;
]; }
];
extraConfig = '' extraConfig = ''
# unbind every single normal keybinding # unbind every single normal keybinding
unbind-key -a unbind-key -a
set -g status-left "#{?client_prefix,#[bg=colour2],#[bg=colour1]}#[fg=colour0] #S " # for special characters to work right
# like <C-_>
# set-window-option -g xterm-keys on
set -g default-terminal "screen-256color"
# for special characters to work right set -g set-titles on
# like <C-_> set -g allow-passthrough on
# set-window-option -g xterm-keys on set -s escape-time 0
set -g default-terminal "screen-256color"
set -g set-titles on set-option -g default-shell ${pkgs.fish}/bin/fish
set -g allow-passthrough on set -ga terminal-features "\*:hyperlinks"
set -s escape-time 0
set-option -g default-shell ${pkgs.fish}/bin/fish set-window-option -g mode-keys vi
set -ga terminal-features "\*:hyperlinks"
set-window-option -g mode-keys vi # clipboard stuff
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel
bind v copy-mode
bind p paste-buffer -p
set -s set-clipboard on
# clipboard stuff # get back normal terminal emulator bindings
bind -T copy-mode-vi v send-keys -X begin-selection bind-key -n S-PPage copy-mode -u
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel bind-key -T copy-mode -n S-NPage send-keys -X page-down
bind v copy-mode
bind p paste-buffer -p
set -s set-clipboard on
# get back normal terminal emulator bindings # don't scroll to end when copying with mouse
bind-key -n S-PPage copy-mode -u bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
bind-key -T copy-mode -n S-NPage send-keys -X page-down bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
# don't scroll to end when copying with mouse # window control
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe bind t new-window -c "#{pane_current_path}"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe bind-key Tab next-window
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe bind-key BTab previous-window
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})"
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe set -g renumber-windows on
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe bind-key Q confirm-before -p "kill-window #W? (y/n)" kill-window
bind A last-window
# window control bind-key 1 select-window -t :0
bind t new-window -c "#{pane_current_path}" bind-key 2 select-window -t :1
bind-key Tab next-window bind-key 3 select-window -t :2
bind-key BTab previous-window bind-key 4 select-window -t :3
set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})" bind-key 5 select-window -t :4
set -g renumber-windows on bind-key 6 select-window -t :5
bind-key Q confirm-before -p "kill-window #W? (y/n)" kill-window bind-key 7 select-window -t :6
bind A last-window bind-key 8 select-window -t :7
bind-key 9 select-window -t :8
bind-key 0 select-window -t :9
bind-key 1 select-window -t :0 # pane control
bind-key 2 select-window -t :1 bind h select-pane -L
bind-key 3 select-window -t :2 bind j select-pane -D
bind-key 4 select-window -t :3 bind k select-pane -U
bind-key 5 select-window -t :4 bind l select-pane -R
bind-key 6 select-window -t :5 bind L split-window -h -c "#{pane_current_path}"
bind-key 7 select-window -t :6 bind J split-window -v -c "#{pane_current_path}"
bind-key 8 select-window -t :7 bind H split-window -h -b -c "#{pane_current_path}"
bind-key 9 select-window -t :8 bind K split-window -v -b -c "#{pane_current_path}"
bind-key 0 select-window -t :9 bind x swap-pane -D
# pane control # double-click ^k (or lshift with kanata) for previous pane like ^w in vim
bind h select-pane -L bind -r ^k select-pane -l
bind j select-pane -D bind-key q confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind k select-pane -U
bind l select-pane -R
bind Left select-pane -L
bind Down select-pane -D
bind Up select-pane -U
bind Right select-pane -R
bind L split-window -h -c "#{pane_current_path}"
bind J split-window -v -c "#{pane_current_path}"
bind H split-window -h -b -c "#{pane_current_path}"
bind K split-window -v -b -c "#{pane_current_path}"
bind S-Left split-window -h -c "#{pane_current_path}"
bind S-Down split-window -v -c "#{pane_current_path}"
bind S-Up split-window -h -b -c "#{pane_current_path}"
bind S-Right split-window -v -b -c "#{pane_current_path}"
bind-key -r -T prefix M-h resize-pane -L 5
bind-key -r -T prefix M-j resize-pane -D 5
bind-key -r -T prefix M-k resize-pane -U 5
bind-key -r -T prefix M-l resize-pane -R 5
bind x swap-pane -D
# double-click ^k (or lshift with kanata) for previous pane like ^w in vim bind-key o choose-tree -wZ
bind -r ^k select-pane -l bind-key O choose-tree -sZ
bind-key q confirm-before -p "kill-pane #P? (y/n)" kill-pane
# bind-key o choose-tree -wZ # get back command mode and some other basics...
# bind-key O choose-tree -sZ bind : command-prompt
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
bind-key ? list-keys
# get back command mode and some other basics... # Scroll oin man etc
bind : command-prompt tmux_commands_with_legacy_scroll="nano less more man git"
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
bind-key ? list-keys
# Scroll oin man etc bind-key -T root WheelUpPane \
tmux_commands_with_legacy_scroll="nano less more man git" if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \
'send -Mt=' \
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
"send -t= Up" "copy-mode -et="'
bind-key -T root WheelUpPane \ bind-key -T root WheelDownPane \
if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \ if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \
'send -Mt=' \ 'send -Mt=' \
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \ 'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
"send -t= Up" "copy-mode -et="' "send -t= Down" "send -Mt="'
bind-key -T root WheelDownPane \ bind-key -T copy-mode-vi ] \
if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \ send-keys -X clear-selection \; \
'send -Mt=' \ send-keys -X search-forward "--> " \; \
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \ send-keys -X next-word \; \
"send -t= Down" "send -Mt="' send-keys -X begin-selection \; \
send-keys -X jump-forward ":" \; \
send-keys -X jump-to-forward ":" \;
bind-key -T copy-mode-vi ] \ bind-key -T copy-mode-vi [ \
send-keys -X clear-selection \; \ send-keys -X clear-selection \; \
send-keys -X search-forward "--> " \; \ send-keys -X start-of-line \; \
send-keys -X next-word \; \ send-keys -X search-backward "--> " \; \
send-keys -X begin-selection \; \ send-keys -X next-word \; \
send-keys -X jump-forward ":" \; \ send-keys -X begin-selection \; \
send-keys -X jump-to-forward ":" \; send-keys -X jump-forward ":" \; \
send-keys -X jump-to-forward ":" \;
bind-key -T copy-mode-vi [ \ bind-key [ copy-mode \; send-keys [
send-keys -X clear-selection \; \ bind-key ] copy-mode \; send-keys ]
send-keys -X start-of-line \; \
send-keys -X search-backward "--> " \; \
send-keys -X next-word \; \
send-keys -X begin-selection \; \
send-keys -X jump-forward ":" \; \
send-keys -X jump-to-forward ":" \;
bind-key [ copy-mode \; send-keys [ bind d select-pane -l \; send-keys [
bind-key ] copy-mode \; send-keys ]
bind d select-pane -l \; send-keys [ '';
# f: file search
# unbound: git files
# g: git hashes
# u: urls
# C-d: numbers
# M-i: ips
# include line and column numbers in file search
# rebind `f` so we can reuse it here
bind-key -T prefix C-f command-prompt { find-window -Z "%%" }
# jyn is so sorry, and so am I now
# https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212
# see `search-regex.sh` for wtf this means
# TODO: include shell variable names
bind-key f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
# urls
bind-key u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
# hashes
bind-key g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
# ips
bind-key M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
bind-key -T copy-mode-vi o send-keys -X copy-pipe \
'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \
if -F "#{alternate_on}" { send-keys -X cancel }
# save the buffer, then open an editor in the current pane
bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"'
# search for the highlighted text
bind-key -T copy-mode-vi s send-keys -X copy-pipe \
"cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \
if -F "#{alternate_on}" { send-keys -X cancel }
# save buffer and retype into the shell
bind-key -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
'';
};
}; };
}; # bind-key -T root DoubleClick1Pane run-shell "cd '#{pane_current_path}'; echo '#{mouse_line}' | ${pkgs.writeScriptBin "open-file" ''
# open_file () {
# input=`cat`
# link=$(echo "$input" | grep -Po '[^ \\]*/[^ \\]*\.[^ \\]*\:[0-9]+' | sed 's/\:/|/g')
#
# if [ ! -z "$link" ]; then
# echo "LINK = $link"
# vim_proc=$(pgrep vim | xargs pwdx | grep $(pwd -P) | awk '{print $1}' | sed 's/\:*$//g' | xargs -I{} find /run/user/1000 -depth -maxdepth 1 -name "nvim.{}.0")
#
# nvim --server "$vim_proc" --remote-send "<C-\><C-N>:e $link<cr>"
# fi
# }
#
# open_file 2>&1 >> ~/open-file.log
#
# ''}/bin/open-file"
};
} }

View file

@ -1,159 +0,0 @@
{ machine, ... }@inputs:
let
browsers = [
"firefox.desktop"
];
defaultApps = {
text = [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanvim.desktop"
];
image = [ "org.gnome.Loupe.desktop" ];
audio = [ "mpv.desktop" ];
video = [ "mpv.desktop" ];
directory = [
"nautilus.desktop"
"org.gnome.Nautilus.desktop"
];
mail = [ ] ++ browsers;
calendar = [ ] ++ browsers;
browser = [ ] ++ browsers;
office = [ "libreoffice.desktop" ];
pdf = [ ] ++ browsers;
ebook = [ ];
magnet = [ ];
signal = [ "signal.desktop" ];
};
mimeMap = {
text = [
"text/plain"
"text/english"
"application/x-zerosize"
"text/x-makefile"
"text/x-c++hdr"
"text/x-c++src"
"text/x-chdr"
"text/x-csrc"
"text/x-java"
"text/x-moc"
"text/x-pascal"
"text/x-tcl"
"text/x-tex"
"application/x-shellscript"
"text/x-c"
"text/x-c++"
];
image = [
"image/bmp"
"image/gif"
"image/jpeg"
"image/jpg"
"image/png"
"image/svg+xml"
"image/tiff"
"image/vnd.microsoft.icon"
"image/webp"
];
audio = [
"audio/aac"
"audio/mpeg"
"audio/ogg"
"audio/opus"
"audio/wav"
"audio/webm"
"audio/x-matroska"
];
video = [
"video/mp2t"
"video/mp4"
"video/mpeg"
"video/ogg"
"video/webm"
"video/x-flv"
"video/x-matroska"
"video/x-msvideo"
];
directory = [ "inode/directory" ];
mail = [ "x-scheme-handler/mailto" ];
calendar = [
"text/calendar"
"x-scheme-handler/webcal"
];
browser = [
"text/html"
"x-scheme-handler/about"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/unknown"
];
office = [
"application/vnd.oasis.opendocument.text"
"application/vnd.oasis.opendocument.spreadsheet"
"application/vnd.oasis.opendocument.presentation"
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
"application/msword"
"application/vnd.ms-excel"
"application/vnd.ms-powerpoint"
"application/rtf"
];
pdf = [ "application/pdf" ];
ebook = [ "application/epub+zip" ];
magnet = [ "x-scheme-handler/magnet" ];
signal = [ "signal.desktop" ];
};
associations =
with inputs.lib;
with builtins;
listToAttrs (
flatten (mapAttrsToList (key: map (type: attrsets.nameValuePair type defaultApps."${key}")) mimeMap)
);
removedAssociations = {
"text/plain" = "dev.zed.Zed.desktop";
"application/x-zerosize" = "dev.zed.Zed.desktop";
};
in
{
imports = machine.program {
name = "xdg";
inherit inputs;
requirements = [ ];
home-config =
{ config, ... }:
{
xdg = {
enable = true;
mime.enable = true;
configHome = "${config.home.homeDirectory}/.config";
userDirs = {
enable = true;
documents = "${config.home.homeDirectory}/Documents";
desktop = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
music = "${config.home.homeDirectory}/Documents/personal/music";
pictures = "${config.home.homeDirectory}/Documents/personal/pictures";
};
configFile."mimeapps.list".force = true;
mimeApps = {
enable = true;
associations.added = associations;
associations.removed = removedAssociations;
defaultApplications = associations;
};
};
};
system-config = _: {
xdg = {
mime = {
enable = true;
defaultApplications = associations;
addedAssociations = associations;
inherit removedAssociations;
};
};
};
};
}

View file

@ -1,184 +1,173 @@
inputs@{ machine, ... }: _: {
{ custom.program.zed.requirements = [ "work" ];
imports = machine.program { custom.program.zed.home-config =
name = "zed"; { pkgs, ... }:
inherit inputs; {
requirements = [ home.packages = pkgs.custom.maple-fonts-pack;
"work"
"graphical"
];
home-config =
{ pkgs, ... }:
{
home.packages = pkgs.custom.maple-fonts-pack;
programs.zed-editor = { programs.zed-editor = {
enable = true; enable = true;
extensions = [ extensions = [
"nix" "nix"
"intellij-newui-theme" "intellij-newui-theme"
"charmed-icons" "charmed-icons"
"astro" "astro"
];
userSettings = {
ssh_connections = [
{
host = "icecube";
args = [ ];
projects = [
{
paths = [
"/home/jana/src/eii-test"
];
}
{
paths = [
"/home/jana/src/example"
];
}
{
paths = [
"/home/jana/src/fitgirl-ddl"
];
}
{
paths = [
"/home/jana/src/libs-team/tools/unstable-api"
];
}
{
paths = [
"/home/jana/src/ml-kem-hang"
];
}
{
paths = [
"/home/jana/src/opendal/core"
];
}
{
paths = [
"/home/jana/src/rust"
];
}
{
paths = [
"/home/jana/src/span-lowering-tests"
];
}
];
}
]; ];
userSettings = { icon_theme = "Warm Charmed Icons";
ui_font_size = 16;
buffer_font_size = 16;
theme = {
mode = "system";
light = "One Light";
dark = "JetBrains New Dark";
};
disable_ai = true;
ssh_connections = [ preview_tabs = {
{ enabled = true;
host = "icecube"; enable_preview_from_file_finder = true;
args = [ ]; };
projects = [
{ close_on_file_delete = true;
paths = [ confirm_quit = true;
"/home/jana/src/eii-test"
]; edit_predictions_disabled_in = [
} "comment"
{ "string"
paths = [ ];
"/home/jana/src/example"
]; vim_mode = true;
} cursor_blink = false;
{ vertical_scroll_margin = 0;
paths = [
"/home/jana/src/fitgirl-ddl" inlay_hints = {
]; enabled = true;
} };
{
paths = [ project_panel = {
"/home/jana/src/libs-team/tools/unstable-api" dock = "right";
]; git_status = false;
} };
{ minimap = {
paths = [ show = "auto";
"/home/jana/src/ml-kem-hang" thumb = "always";
]; thumb_border = "left_open";
} };
{ tab_bar = {
paths = [ show = true;
"/home/jana/src/opendal/core" show_nav_history_buttons = false;
]; show_tab_bar_buttons = false;
} };
{ tabs = {
paths = [ file_icons = true;
"/home/jana/src/rust" git_status = false;
]; activate_on_close = "history";
} show_close_button = "hover";
{ };
paths = [ lsp = {
"/home/jana/src/span-lowering-tests" rust-analyzer = {
]; initialization_options = {
} inlayHints = {
]; lifetimeElisionHints = "always";
} discriminantHints = "always";
]; };
icon_theme = "Warm Charmed Icons"; diagnostic = {
ui_font_size = 16; refreshSupport = true;
buffer_font_size = 16; };
theme = { };
mode = "system";
light = "One Light";
dark = "JetBrains New Dark";
}; };
disable_ai = true; nil = {
binary = {
ignore_system_version = false;
path = "${pkgs.lib.getExe' pkgs.nil "nil"}";
};
preview_tabs = { initialization_options = {
enabled = true; formatting = {
enable_preview_from_file_finder = true; command = [ "${pkgs.lib.getExe' pkgs.nixfmt "nixfmt"}" ];
};
};
}; };
};
close_on_file_delete = true; diagnostics = {
confirm_quit = true; button = false;
include_warnings = true;
edit_predictions_disabled_in = [ inline = {
"comment"
"string"
];
vim_mode = true;
cursor_blink = false;
vertical_scroll_margin = 0;
inlay_hints = {
enabled = true; enabled = true;
}; };
};
terminal = {
"dock" = "left";
"env" = {
# "EDITOR": "zeditor --wait"
"EDITOR" = "vim";
};
"font_size" = 12;
"font_family" = "Maple Mono NF";
"line_height" = "standard";
};
buffer_font_family = "Maple Mono NF";
project_panel = { # "diagnostics_max_severity": "off",
dock = "right";
git_status = false;
};
minimap = {
show = "auto";
thumb = "always";
thumb_border = "left_open";
};
tab_bar = {
show = true;
show_nav_history_buttons = false;
show_tab_bar_buttons = false;
};
tabs = {
file_icons = true;
git_status = false;
activate_on_close = "history";
show_close_button = "hover";
};
lsp = {
rust-analyzer = {
initialization_options = {
inlayHints = {
lifetimeElisionHints = "always";
discriminantHints = "always";
};
diagnostic = {
refreshSupport = true;
};
};
binary = {
path_lookup = true;
};
};
nil = {
binary = {
ignore_system_version = false;
path = "${pkgs.lib.getExe' pkgs.nil "nil"}";
};
initialization_options = { "experimental.theme_overrides" = {
formatting = { "syntax" = {
command = [ "${pkgs.lib.getExe' pkgs.nixfmt "nixfmt"}" ]; "comment.doc" = {
}; "color" = "#77B767";
};
};
};
diagnostics = {
button = false;
include_warnings = true;
inline = {
enabled = true;
};
};
terminal = {
"dock" = "left";
"env" = {
# "EDITOR": "zeditor --wait"
"EDITOR" = "vim";
};
"font_size" = 12;
"font_family" = "Maple Mono NF";
"line_height" = "standard";
};
buffer_font_family = "Maple Mono NF";
# "diagnostics_max_severity": "off",
"experimental.theme_overrides" = {
"syntax" = {
"comment.doc" = {
"color" = "#77B767";
};
}; };
}; };
}; };
}; };
}; };
}; };
} }

View file

@ -1,8 +1,9 @@
{ pkgs, ... }: { pkgs, inputs, ... }:
{ {
imports = [ imports = [
(../modules/users.nix) (inputs.self + /modules/users.nix)
]; ];
users.groups.media = { };
custom.users = { custom.users = {
vivian = { vivian = {
@ -18,16 +19,6 @@
]; ];
}; };
mara = {
shell = pkgs.zsh;
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKAzf3UCwTWJlF878EWqlrLUOBsxw/b/6PoLjbKkA8Xh"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIHi5YnRt1VgK8tt6oSPsKo1X+0gcBXVyvCKXM03/vEh"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFWF1MtDV5HJT+GhD8wrKICyDwQK8ZPQTxZdnsfaqWcs"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIHi1EEGRry1aD6uPmdlcRqdiTiIty0JlnfoXeM0qKBC"
];
};
jana = { jana = {
shell = pkgs.fish; shell = pkgs.fish;
keys = [ keys = [