/nix/store/dlwqlnbaj5vfm9aw20r1yxk8y56lmgif-repo/header.tmpl

Compare commits

..

No commits in common. "877ea04a6cdf30cb9eb70ac548ff6c7a7b907e17" and "c7975eb119459b25d490d62e93949ff3aefd2e70" have entirely different histories.

26 changed files with 967 additions and 1240 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use nix

View file

@ -15,6 +15,7 @@ let
mkSystem = mkSystem =
hostname: hostname:
nixosSystem { nixosSystem {
system = null;
specialArgs = { specialArgs = {
inherit sources; inherit sources;
self = ./.; self = ./.;

603
flake.lock generated
View file

@ -1,603 +0,0 @@
{
"nodes": {
"__flake-compat": {
"flake": false,
"locked": {
"lastModified": 1751685974,
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"ref": "refs/heads/main",
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"revCount": 92,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
"crane": {
"locked": {
"lastModified": 1754269165,
"narHash": "sha256-0tcS8FHd4QjbCVoxN9jI+PjHgA4vc/IjkUSp+N3zy0U=",
"owner": "ipetkov",
"repo": "crane",
"rev": "444e81206df3f7d92780680e45858e31d2f07a08",
"type": "github"
},
"original": {
"owner": "ipetkov",
"repo": "crane",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"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"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754091436,
"narHash": "sha256-XKqDMN1/Qj1DKivQvscI4vmHfDfvYR2pfuFOJiCeewM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "67df8c627c2c39c41dbec76a1f201929929ab0bd",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"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"
}
},
"ghostty": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
],
"zig": "zig",
"zon2nix": "zon2nix"
},
"locked": {
"lastModified": 1756698714,
"narHash": "sha256-oK95HUGRpKcP49ROtXbvjn0I+m0ep9v7uuiozHqVMdI=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "5ef6412823f789d530dcba54705a533b2e6ce0a7",
"type": "github"
},
"original": {
"owner": "ghostty-org",
"repo": "ghostty",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"pre-commit-hooks-nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"hjem": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"smfh": "smfh"
},
"locked": {
"lastModified": 1756255328,
"narHash": "sha256-WJ70Dv+tJjIl7mMOqUgcdcz+RrujDRoeKptiU6oh1lI=",
"owner": "feel-co",
"repo": "hjem",
"rev": "2426d6ad20e767895e936ed0c9563cc4e2b6c96f",
"type": "github"
},
"original": {
"owner": "feel-co",
"repo": "hjem",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"lanzaboote": {
"inputs": {
"crane": "crane",
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1754297745,
"narHash": "sha256-aD6/scLN3L4ZszmNbhhd3JQ9Pzv1ScYFphz14wHinfs=",
"owner": "nix-community",
"repo": "lanzaboote",
"rev": "892cbdca865d6b42f9c0d222fe309f7720259855",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "lanzaboote",
"type": "github"
}
},
"nh": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756647477,
"narHash": "sha256-1pxbBTSCew43iYpKGYBixZuhZaI38brfQj3HGEEiEwc=",
"owner": "nix-community",
"repo": "nh",
"rev": "99b47b919d58cd1c8985329097e493ad69c6d10b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nh",
"type": "github"
}
},
"nil": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1754679101,
"narHash": "sha256-nFK2XhrDS5igmkDQWmyTcgiJsEr3KOcR31DaSy+Fy9s=",
"owner": "oxalica",
"repo": "nil",
"rev": "f80fe365cb441624d1608235e6e793e5dce47fb0",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "nil",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1755972213,
"narHash": "sha256-VYK7aDAv8H1enXn1ECRHmGbeY6RqLnNwUJkOwloIsko=",
"rev": "73e96df7cff5783f45e21342a75a1540c4eddce4",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable-small/nixos-25.11pre850642.73e96df7cff5/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable-small/nixexprs.tar.xz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 315532800,
"narHash": "sha256-JaSDu+RYnaHrkMCcW95rc8pG9QjD7nzX+/VHleiPVxA=",
"rev": "37ff64b7108517f8b6ba5705ee5085eac636a249",
"type": "tarball",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre854301.37ff64b71085/nixexprs.tar.xz?rev=37ff64b7108517f8b6ba5705ee5085eac636a249"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1754214453,
"narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks-nix": {
"inputs": {
"flake-compat": [
"lanzaboote",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756352679,
"narHash": "sha256-UkKaPXTPzT7HAcBOV4NlWx2GAEJaTf0eb5OX6Q6jPqg=",
"ref": "refs/heads/master",
"rev": "f7597cdae2d537c5b12843599955856090dc49d5",
"revCount": 668,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"root": {
"inputs": {
"__flake-compat": "__flake-compat",
"ghostty": "ghostty",
"hjem": "hjem",
"impermanence": "impermanence",
"lanzaboote": "lanzaboote",
"nh": "nh",
"nil": "nil",
"nixpkgs": "nixpkgs_2",
"quickshell": "quickshell",
"sops-nix": "sops-nix",
"watt": "watt",
"zedless": "zedless",
"zen-browser-flake": "zen-browser-flake"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"hjem",
"smfh",
"nixpkgs"
]
},
"locked": {
"lastModified": 1747622321,
"narHash": "sha256-W0dYIWgsUu6rvOJRtKLhKskkv0VhQhJYGNIq+gGUc8g=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "bd030fd9983f7fddf87be1c64aa3064c8afa24c4",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754189623,
"narHash": "sha256-fstu5eb30UYwsxow0aQqkzxNxGn80UZjyehQVNVHuBk=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "c582ff7f0d8a7ea689ae836dfb1773f1814f472a",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"smfh": {
"inputs": {
"nixpkgs": [
"hjem",
"nixpkgs"
],
"rust-overlay": "rust-overlay",
"systems": "systems_2"
},
"locked": {
"lastModified": 1749906619,
"narHash": "sha256-/9Ww10kYopxfCNNnNDwENTubs7Wzqlw+O6PJAHNOYQw=",
"owner": "feel-co",
"repo": "smfh",
"rev": "39f5c06153f63100376bc607b1465850b6df77fd",
"type": "github"
},
"original": {
"owner": "feel-co",
"repo": "smfh",
"type": "github"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1754988908,
"narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=",
"owner": "mic92",
"repo": "sops-nix",
"rev": "3223c7a92724b5d804e9988c6b447a0d09017d48",
"type": "github"
},
"original": {
"owner": "mic92",
"repo": "sops-nix",
"type": "github"
}
},
"systems": {
"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": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"watt": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1754314403,
"narHash": "sha256-pETi/Fs+8FF2ZuE+JyK9+NcFaDPMHx71UdWgmzjxvkQ=",
"owner": "notashelf",
"repo": "watt",
"rev": "f68a9795616699870d213dc9e641dab655aa434a",
"type": "github"
},
"original": {
"owner": "notashelf",
"repo": "watt",
"type": "github"
}
},
"zedless": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1754831523,
"narHash": "sha256-tkdq7WR0AvIy/eof2L2ELXKh6b73P7dcWcgJC7ww3aM=",
"owner": "zedless-editor",
"repo": "zed",
"rev": "adb21022b5063757c035d851a0e458f8e4ae954b",
"type": "github"
},
"original": {
"owner": "zedless-editor",
"repo": "zed",
"type": "github"
}
},
"zen-browser-flake": {
"inputs": {
"home-manager": [],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756614150,
"narHash": "sha256-ZT+IHU78RzOiO7RhZ64VQyG8HgYz3/sUmUGll/8j8XA=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "8c898b127c9989453ebda9c0d1e77c968ef4f0ec",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
},
"zig": {
"inputs": {
"flake-compat": [
"ghostty",
"flake-compat"
],
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs"
]
},
"locked": {
"lastModified": 1748261582,
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
},
"zon2nix": {
"inputs": {
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1756000480,
"narHash": "sha256-fR5pdcjO0II5MNdCzqvyokyuFkmff7/FyBAjUS6sMfA=",
"owner": "jcollie",
"repo": "zon2nix",
"rev": "d9dc9ef1ab9ae45b5c9d80c6a747cc9968ee0c60",
"type": "github"
},
"original": {
"owner": "jcollie",
"repo": "zon2nix",
"rev": "d9dc9ef1ab9ae45b5c9d80c6a747cc9968ee0c60",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,66 +0,0 @@
{
inputs = {
# Unstable nixpkgs, using the new Lockable HTTP Tarball protocol
# https://github.com/NixOS/infra/pull/562.
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
impermanence.url = "github:nix-community/impermanence";
watt = {
url = "github:notashelf/watt";
inputs.nixpkgs.follows = "nixpkgs";
};
quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
# THIS IS IMPORTANT
# Mismatched system dependencies will lead to crashes and other issues.
inputs.nixpkgs.follows = "nixpkgs";
};
# secure booting
lanzaboote = {
url = "github:nix-community/lanzaboote";
inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser-flake = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "";
};
hjem = {
url = "github:feel-co/hjem";
inputs.nixpkgs.follows = "nixpkgs";
};
zedless.url = "github:zedless-editor/zed";
nh = {
url = "github:nix-community/nh";
inputs.nixpkgs.follows = "nixpkgs";
};
nil = {
url = "github:oxalica/nil";
inputs.nixpkgs.follows = "nixpkgs";
};
ghostty = {
url = "github:ghostty-org/ghostty";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
__flake-compat = {
url = "git+https://git.lix.systems/lix-project/flake-compat.git";
flake = false;
};
};
outputs = _: { };
}

View file

@ -1,12 +1,12 @@
{ {
inputs,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
inherit (lib.attrsets) mapAttrs' nameValuePair; inherit (lib.attrsets) mapAttrs' nameValuePair;
inherit (lib) getFlakePkg; inherit (lib.meta) getExe;
helix = pkgs.helix.overrideAttrs ( helix = pkgs.helix.overrideAttrs (
finalAttrs: _: { finalAttrs: _: {
@ -32,7 +32,21 @@ let
let let
inherit (lib.meta) getExe getExe'; inherit (lib.meta) getExe getExe';
nil = getFlakePkg inputs.nil; nixfmt = pkgs.callPackage "${sources.nixfmt}/default.nix" { };
nil = pkgs.rustPlatform.buildRustPackage {
pname = "nil";
version = "unstable";
src = sources.nil;
cargoLock = {
lockFile = "${sources.nil}/Cargo.lock";
allowBuiltinFetchGit = false;
};
nativeBuildInputs = [ pkgs.nixVersions.latest ];
doInstallCheck = false;
meta.mainProgram = "nil";
};
new-deadnix = pkgs.deadnix.overrideAttrs ( new-deadnix = pkgs.deadnix.overrideAttrs (
_: _: { _: _: {
@ -106,10 +120,10 @@ let
{ {
name = "javascript"; name = "javascript";
auto-format = true; auto-format = true;
# language-servers = [ language-servers = [
# "dprint" "dprint"
# "typescript-language-server" "typescript-language-server"
# ]; ];
} }
{ {
name = "json"; name = "json";
@ -143,10 +157,10 @@ let
{ {
name = "typescript"; name = "typescript";
auto-format = true; auto-format = true;
# language-servers = [ language-servers = [
# "dprint" "dprint"
# "typescript-language-server" "typescript-language-server"
# ]; ];
} }
{ {
name = "rust"; name = "rust";
@ -237,15 +251,15 @@ let
}; };
}; };
}; };
# dprint = { dprint = {
# command = getExe pkgs.dprint; command = getExe pkgs.dprint;
# args = [ "lsp" ]; args = [ "lsp" ];
# }; };
nil = { nil = {
command = getExe nil; command = getExe nil;
config.nil = { config.nil = {
formatting.command = [ "${getExe pkgs.nixfmt}" ]; formatting.command = [ "${getExe nixfmt}" ];
diagnostics = { diagnostics = {
bindingEndHintMinLines = 10; bindingEndHintMinLines = 10;
}; };
@ -343,7 +357,7 @@ let
snippets = true; snippets = true;
}; };
file-picker = { file-picker = {
hidden = true; hidden = false;
}; };
line-number = "relative"; line-number = "relative";
completion-timeout = 5; completion-timeout = 5;
@ -402,7 +416,6 @@ let
":redraw" ":redraw"
]; ];
i = ":toggle lsp.display-inlay-hints"; i = ":toggle lsp.display-inlay-hints";
u = ":toggle file-picker.hidden";
}; };
esc = [ esc = [
"collapse_selection" "collapse_selection"
@ -449,7 +462,6 @@ in
taplo taplo
kdlfmt kdlfmt
gopls gopls
asm-lsp
; ;
}; };
@ -465,6 +477,4 @@ in
} }
) themes; ) themes;
# osConfig.environment.variables.EDITOR = "hx";
} }

View file

@ -1,8 +1,8 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
@ -16,7 +16,11 @@ in
{ {
imports = [ imports = [
inputs.hjem.nixosModules.default (import sources.flake-compat {
src = sources.hjem;
copySourceTreeToStore = false;
useBuiltinsFetchTree = true;
}).outputs.nixosModules.default
]; ];
config = { config = {
@ -31,7 +35,7 @@ in
}; };
extraModules = (listFilesRecursive ./.) |> filter (hasSuffix ".hjem.nix"); extraModules = (listFilesRecursive ./.) |> filter (hasSuffix ".hjem.nix");
specialArgs = { specialArgs = {
inherit inputs; inherit sources;
}; };
}; };
}; };

View file

@ -1,7 +1,7 @@
{ {
inputs,
lib, lib,
osConfig, osConfig,
pkgs,
... ...
}: }:
let let
@ -9,16 +9,9 @@ let
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.attrsets) mapAttrsToList; inherit (lib.attrsets) mapAttrsToList;
inherit (lib.strings) concatStringsSep; inherit (lib.strings) concatStringsSep;
inherit (lib) getFlakePkg;
inherit (osConfig.meta.mainUser.defaultShell) name package; inherit (osConfig.meta.mainUser.defaultShell) name package;
ghostty = (getFlakePkg inputs.ghostty).override {
optimize = "ReleaseFast";
enableX11 = false;
enableWayland = true;
};
# Shell integration for ghostty only supports # Shell integration for ghostty only supports
# bash, fish and zsh for now. # bash, fish and zsh for now.
shell-integration = shell-integration =
@ -35,12 +28,11 @@ let
ghostty-settings = { ghostty-settings = {
font-size = 14; font-size = 14;
# font-family = "JetBrainsMonoNerdFont"; font-family = "JetBrainsMonoNerdFont";
font-family = "Berkeley Mono";
app-notifications = "no-clipboard-copy"; app-notifications = "no-clipboard-copy";
background-opacity = 1.0; background-opacity = 1.0;
bold-is-bright = true; bold-is-bright = "true";
confirm-close-surface = "false"; confirm-close-surface = "false";
cursor-style-blink = "false"; cursor-style-blink = "false";
gtk-single-instance = "true"; gtk-single-instance = "true";
@ -68,7 +60,7 @@ let
in in
{ {
packages = builtins.attrValues { packages = builtins.attrValues {
inherit ghostty; inherit (pkgs) ghostty;
}; };
files.".config/ghostty/config".text = files.".config/ghostty/config".text =

View file

@ -2,6 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
@ -11,6 +12,7 @@ let
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
in in
{ {
imports = [ (sources.hjem + "/modules/nixos") ];
options.meta = { options.meta = {
users = mkOption { users = mkOption {
type = listOf str; type = listOf str;
@ -55,8 +57,8 @@ in
}; };
}; };
config = { config = {
environment.shells = [ pkgs.nushell ]; # environment.shells = [ pkgs.nushell ];
programs.zsh.enable = false; programs.zsh.enable = true;
users = { users = {
mutableUsers = true; mutableUsers = true;
users = { users = {
@ -71,7 +73,7 @@ in
"nix" "nix"
"docker" "docker"
]; ];
shell = pkgs.nushell; shell = pkgs.zsh;
}; };
}; };
}; };

View file

@ -1,117 +1,109 @@
{ {
inputs,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
nil = pkgs.rustPlatform.buildRustPackage { nixfmt = pkgs.callPackage "${sources.nixfmt}/default.nix" { };
pname = "nil"; comma = pkgs.callPackage (
_:
pkgs.rustPlatform.buildRustPackage {
pname = "comma";
version = "unstable"; version = "unstable";
src = inputs.nil.outPath; src = sources.comma;
cargoLock = { cargoLock = {
lockFile = "${inputs.nil.outPath}/Cargo.lock"; allowBuiltinFetchGit = true;
allowBuiltinFetchGit = false; lockFile = "${sources.comma}/Cargo.lock";
}; };
nativeBuildInputs = [ pkgs.nixVersions.latest ]; nativeBuildInputs = [ pkgs.makeBinaryWrapper ];
doInstallCheck = false; doInstallCheck = false;
meta.mainProgram = "nil";
}; postInstall = ''
wrapProgram $out/bin/comma \
--prefix PATH : ${
lib.makeBinPath [
pkgs.fzy
pkgs.nix-index-unwrapped
]
}
ln -s $out/bin/comma $out/bin/,
'';
}
) { };
in in
{ {
environment = { environment.systemPackages =
defaultPackages = [ ];
systemPackages =
with pkgs; with pkgs;
[ [
asciinema
atuin
bat
bvi
cachix
calc
cpufetch
curlie
delta
diff-so-fancy
difftastic
difftastic
dig
direnv
dust
element
entr
eza
eza
fd
ffmpeg-full
figlet
fzf
gcc
git
glow
gnumake
hexyl
httpie
hyperfine
iamb
imagemagick
inetutils
inetutils
jq
jujutsu
just
kondo
lazygit
linuxHeaders
microfetch
microfetch
mprocs
mprocs
neofetch
nmap
nmap
ouch
procs
pv
ripgrep
ripgrep
rsync
sd
serpl
sesh
smartmontools
starship
tealdeer
television
tig
timg
tokei
trash-cli
universal-android-debloater universal-android-debloater
unzip emacs-pgtk
util-linux # better cd
w3m zoxide
watchman ouch
wget # pipe viewer
wireguard-tools pv
# hex editor
bvi
#better ls
eza
atuin
# better cat
bat
# clipboard
# yazi
serpl
diff-so-fancy
tig
direnv
sesh
mprocs
curlie
entr
procs
sd
# mult
glow
# dua-cli
dust
iamb
kondo
# better grep
ripgrep
# IP stuff
dig
# simply the best fetch tool out there
microfetch
fzf
element
difftastic
hexyl
yazi yazi
zed-editor gnumake
asciinema
inetutils
tokei
starship
wget
cpufetch
watchman
# yt-dlp # borked check phase
tealdeer
hyperfine
imagemagick
ffmpeg-full
# catimg
timg
nmap
fd
jq
rsync
figlet
unzip
zip zip
zip
zoxide
(lib.hiPrio pkgs.uutils-coreutils-noprefix)
zoxide
nixfmt
radare2
uv
ty
python3
comma
] ]
++ [ ++ [
nil nixfmt
comma
]; ];
};
} }

View file

@ -1,7 +1,8 @@
{ {
config, config,
inputs,
lib, lib,
pkgs,
sources,
... ...
}: }:
let let
@ -9,8 +10,9 @@ let
inherit (config.modules.other.system) username; inherit (config.modules.other.system) username;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
inherit (lib) getFlakePkg; nh = (pkgs.callPackage "${sources.nh}/package.nix" { }).overrideAttrs (_: {
nh = getFlakePkg inputs.nh; doInstallCheck = false;
});
in in
{ {
options.modules.programs.nh.enable = mkEnableOption "nh"; options.modules.programs.nh.enable = mkEnableOption "nh";

View file

@ -7,33 +7,6 @@
let let
inherit (config.modules.system) isGraphical; inherit (config.modules.system) isGraphical;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.meta) getExe;
inherit (builtins) readFile;
inherit (config.meta.mainUser) username;
realEmail = readFile config.sops.secrets.real_email.path;
bitwardenUrl = readFile config.sops.secrets.bitwarden_url.path;
fix_ssh_keys = pkgs.writeText "patch" ''
diff --git a/src/api.rs b/src/api.rs
index 8cad5b6..ea352fa 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -1115,13 +1115,14 @@ impl Client {
.get(self.api_url("/sync"))
.header("Authorization", format!("Bearer {access_token}"))
// This is necessary for vaultwarden to include the ssh keys in the response
- .header("Bitwarden-Client-Version", "2024.12.0")
+ .header("Bitwarden-Client-Version", "2025.08.0")
.send()
.await
.map_err(|source| Error::Reqwest { source })?;
match res.status() {
reqwest::StatusCode::OK => {
let sync_res: SyncRes = res.json_with_path().await?;
+ eprintln!("sync res: {sync_res:?}");
let folders = sync_res.folders.clone();
let ciphers = sync_res
.ciphers '';
bitwarden-desktop-wrapped = pkgs.symlinkJoin { bitwarden-desktop-wrapped = pkgs.symlinkJoin {
name = "bitwarden-desktop-wrapped"; name = "bitwarden-desktop-wrapped";
@ -44,45 +17,19 @@ let
BITWARDEN_SSH_AUTH_SOCK /run/user/1000/ssh-agent.sock BITWARDEN_SSH_AUTH_SOCK /run/user/1000/ssh-agent.sock
''; '';
}; };
rbw = pkgs.rbw.overrideAttrs (finalAttrs: {
version = "1.14.1";
src = pkgs.fetchzip {
url = "https://git.tozt.net/rbw/snapshot/rbw-${finalAttrs.version}.tar.gz";
hash = "sha256-4wNDDMaz9zjNYahOZXARDbNdGKl0kS0pF3qQuM7fK4s=";
};
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
inherit (rbw) src;
hash = "sha256-H1DSP3Kyklv8ncn7zDP0njDlwB8Qh+h7mqWRAJcpWrE=";
};
patches = [
fix_ssh_keys
];
});
in in
{ {
config = mkIf isGraphical { config = mkIf isGraphical {
hjem.users.${username}.xdg.config.files."rbw/config.json".text =
builtins.toJSON
<| {
email = realEmail;
pinentry = getExe pkgs.pinentry-qt;
base_url = bitwardenUrl;
};
environment = { environment = {
systemPackages = lib.attrValues { systemPackages = lib.attrValues {
inherit (pkgs) inherit (pkgs)
bitwarden-cli bitwarden-cli
pinentry-qt
; ;
inherit bitwarden-desktop-wrapped rbw; inherit bitwarden-desktop-wrapped;
}; };
# Set the ssh socket globally. This alows all applications and shells to use # Set the ssh socket globally. This alows all applications and shells to use
# the ssh-agent. # the ssh-agent.
sessionVariables."SSH_AUTH_SOCK" = "/run/user/1000/ssh-agent.sock"; variables."SSH_AUTH_SOCK" = "/run/user/1000/ssh-agent.sock";
}; };
}; };
} }

View file

@ -1,138 +0,0 @@
{
lib,
inputs,
...
}:
let
inherit (lib) getFlakePkg';
zen-browser = getFlakePkg' inputs.zen-browser-flake "beta";
inherit (lib.modules) mkForce;
in
{
programs.firefox = {
enable = true;
package = zen-browser;
languagePacks = [
"de"
"en-US"
"ru"
];
policies = {
# Updates & Background Services
AppAutoUpdate = false;
BackgroundAppUpdate = false;
# Feature Disabling
DisableBuiltinPDFViewer = false;
DisableFirefoxStudies = true;
DisableFirefoxAccounts = true;
DisableFirefoxScreenshots = true;
DisableForgetButton = true;
DisableMasterPasswordCreation = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableSetDesktopBackground = true;
DisablePocket = true;
DisableTelemetry = true;
DisableFormHistory = true;
DisablePasswordReveal = true;
# Access Restrictions
BlockAboutConfig = false;
BlockAboutProfiles = true;
BlockAboutSupport = true;
# UI and Behavior
DisplayMenuBar = "never";
DontCheckDefaultBrowser = true;
HardwareAcceleration = true;
OfferToSaveLogins = false;
# Extensions
ExtensionSettings =
let
moz = short: "https://addons.mozilla.org/firefox/downloads/latest/${short}/latest.xpi";
in
{
# Block all extensions by default.
"*".installation_mode = "blocked";
"uBlock0@raymondhill.net" = {
install_url = moz "ublock-origin";
installation_mode = "force_installed";
updates_disabled = true;
};
"{73a6fe31-595d-460b-a920-fcc0f8843232}" = {
install_url = moz "noscript";
installation_mode = "force_installed";
updates_disabled = true;
};
"3rdparty".Extensions = {
"uBlock0@raymondhill.net".adminSettings = {
userSettings = rec {
uiTheme = "dark";
uiAccentCustom = true;
uiAccentCustom0 = "#8300ff";
cloudStorageEnabled = mkForce false;
importedLists = [
"https:#filters.adtidy.org/extension/ublock/filters/3.txt"
"https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"https://raw.githubusercontent.com/yokoffing/filterlists/refs/heads/main/privacy_essentials.txt"
"https://raw.githubusercontent.com/hagezi/dns-blocklists/refs/heads/main/adblock/pro.plus.mini.txt"
"https://raw.githubusercontent.com/DandelionSprout/adfilt/refs/heads/master/LegitimateURLShortener.txt"
"https://raw.githubusercontent.com/yokoffing/filterlists/refs/heads/main/annoyance_list.txt"
"https://raw.githubusercontent.com/DandelionSprout/adfilt/refs/heads/master/BrowseWebsitesWithoutLoggingIn.txt"
];
externalLists = lib.concatStringsSep "\n" importedLists;
};
selectedFilterLists = [
"CZE-0"
"adguard-generic"
"adguard-annoyance"
"adguard-social"
"adguard-spyware-url"
"easylist"
"easyprivacy"
"https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-abuse"
"ublock-badware"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
"https://raw.githubusercontent.com/yokoffing/filterlists/refs/heads/main/privacy_essentials.txt"
"https://raw.githubusercontent.com/hagezi/dns-blocklists/refs/heads/main/adblock/pro.plus.mini.txt"
"https://raw.githubusercontent.com/DandelionSprout/adfilt/refs/heads/master/LegitimateURLShortener.txt"
"https://raw.githubusercontent.com/yokoffing/filterlists/refs/heads/main/annoyance_list.txt"
"https://raw.githubusercontent.com/DandelionSprout/adfilt/refs/heads/master/BrowseWebsitesWithoutLoggingIn.txt"
];
};
};
};
SearchEngines = {
Add = [
{
"Name" = "Kagi";
"URLTemplate" = "https://kagi.com/search?q={searchTerms}";
"Method" = "'GET' | 'POST'";
"IconURL" = "https://www.example.org/favicon.ico";
"Alias" = "Kagi";
"Description" = "Kagi search engine";
"PostData" = "name=value&q={searchTerms}";
"SuggestURLTemplate" = "https://kagi.com/api/autosuggest?q={searchTerms}";
}
];
};
};
};
}

View file

@ -1,40 +1,32 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
inherit (lib) getFlakePkg;
cfg = config.modules.theming.quickshell; cfg = config.modules.theming.quickshell;
quickshell = getFlakePkg inputs.quickshell;
in in
{ {
options.modules.theming.quickshell.enable = mkEnableOption "quickshell"; options.modules.theming.quickshell.enable = mkEnableOption "quickshell";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = builtins.attrValues { environment.systemPackages = with pkgs; [
inherit (pkgs.callPackage (sources.quickshell + "/default.nix") { })
quickshell qt6.qtimageformats
; qt6.qt5compat
inherit (pkgs.qt6) qt6.qtmultimedia
qtimageformats qt6.qtdeclarative
qt5compat qt6.qtsvg
qtmultimedia qt6.qtwayland
qtdeclarative qt6.qtbase
qtsvg kdePackages.breeze
qtwayland kdePackages.breeze-icons
qtbase ];
;
inherit (pkgs.kdePackages)
breeze
breeze-icons
;
};
# taken from outfoxxed. # taken from outfoxxed.
qt.enable = true; qt.enable = true;

View file

@ -1,20 +1,22 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.boot.lanzaboote; cfg = config.modules.system.boot.lanzaboote;
in in {
{
options.modules.system.boot.lanzaboote.enable = mkEnableOption "Lanzaboote"; options.modules.system.boot.lanzaboote.enable = mkEnableOption "Lanzaboote";
imports = [ imports = [
inputs.lanzaboote.nixosModules.lanzaboote (import sources.flake-compat {
src = sources.lanzaboote;
copySourceTreeToStore = false;
useBuiltinsFetchTree = true;
}).outputs.nixosModules.lanzaboote
]; ];
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,16 +1,16 @@
{ {
config, config,
inputs, sources,
lib, lib,
pkgs, pkgs,
... ...
}: }:
let let
inherit (lib.modules) mkDefault mkForce; inherit (lib.modules) mkDefault;
in in
{ {
imports = [ imports = [
inputs.watt.nixosModules.default # (sources.watt + "/nix/module.nix")
]; ];
config = { config = {
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
@ -29,19 +29,195 @@ in
}; };
hardware.acpilight.enable = false; hardware.acpilight.enable = false;
# services.watt = {
# enable = true;
# # sample config from https://github.com/NotAShelf/watt#sample-configuration
# settings = {
# rule = [
# {
# cpu = {
# energy-performance-preference = "power";
# frequency-mhz-maximum = 2000;
# governor = "powersave";
# turbo = false;
# };
# "if" = {
# is-more-than = 85;
# value = "$cpu-temperature";
# };
# priority = 100;
# }
# {
# cpu = {
# energy-performance-preference = "power";
# frequency-mhz-maximum = 800;
# governor = "powersave";
# turbo = false;
# };
# "if" = {
# all = [
# "?discharging"
# {
# is-less-than = 0.3;
# value = "%power-supply-charge";
# }
# ];
# };
# power = {platform-profile = "low-power";};
# priority = 90;
# }
# {
# cpu = {
# energy-performance-preference = "performance";
# governor = "performance";
# turbo = true;
# };
# "if" = {
# all = [
# {
# is-more-than = 0.8;
# value = "%cpu-usage";
# }
# {
# is-less-than = 30;
# value = "$cpu-idle-seconds";
# }
# {
# is-less-than = 75;
# value = "$cpu-temperature";
# }
# ];
# };
# priority = 80;
# }
# {
# cpu = {
# energy-performance-bias = "balance_performance";
# energy-performance-preference = "performance";
# governor = "performance";
# turbo = true;
# };
# "if" = {
# all = [
# {not = "?discharging";}
# {
# is-more-than = 0.1;
# value = "%cpu-usage";
# }
# {
# is-less-than = 80;
# value = "$cpu-temperature";
# }
# ];
# };
# priority = 70;
# }
# {
# cpu = {
# energy-performance-preference = "balance_performance";
# governor = "schedutil";
# };
# "if" = {
# all = [
# {
# is-more-than = 0.4;
# value = "%cpu-usage";
# }
# {
# is-less-than = 0.8;
# value = "%cpu-usage";
# }
# ];
# };
# priority = 60;
# }
# {
# cpu = {
# energy-performance-preference = "power";
# governor = "powersave";
# turbo = false;
# };
# "if" = {
# all = [
# {
# is-less-than = 0.2;
# value = "%cpu-usage";
# }
# {
# is-more-than = 60;
# value = "$cpu-idle-seconds";
# }
# ];
# };
# priority = 50;
# }
# {
# cpu = {
# energy-performance-preference = "power";
# frequency-mhz-maximum = 1600;
# governor = "powersave";
# turbo = false;
# };
# "if" = {
# is-more-than = 300;
# value = "$cpu-idle-seconds";
# };
# priority = 40;
# }
# {
# cpu = {
# energy-performance-preference = "power";
# frequency-mhz-maximum = 2000;
# governor = "powersave";
# turbo = false;
# };
# "if" = {
# all = [
# "?discharging"
# {
# is-less-than = 0.5;
# value = "%power-supply-charge";
# }
# ];
# };
# power = {platform-profile = "low-power";};
# priority = 30;
# }
# {
# cpu = {
# energy-performance-bias = "balance_power";
# energy-performance-preference = "power";
# frequency-mhz-maximum = 1800;
# frequency-mhz-minimum = 200;
# governor = "powersave";
# turbo = false;
# };
# "if" = "?discharging";
# priority = 20;
# }
# {
# cpu = {
# energy-performance-preference = "balance_performance";
# governor = "schedutil";
# };
# priority = 0;
# }
# ];
# };
# };
services = { services = {
watt.enable = true;
thermald.enable = true;
upower = { upower = {
enable = true; enable = true;
percentageLow = 15; percentageLow = 15;
percentageCritical = 5; percentageCritical = 5;
}; };
acpid = { acpid = {
enable = true; enable = true;
logEvents = true; logEvents = true;
}; };
power-profiles-daemon.enable = mkForce false;
auto-cpufreq = { auto-cpufreq = {
enable = false; enable = false;
settings = { settings = {
@ -62,7 +238,6 @@ in
}; };
}; };
}; };
}; };
}; };
} }

View file

@ -1,16 +1,20 @@
# credits to raf
{ {
inputs, sources,
lib, lib,
pkgs, pkgs,
... ...
}: }:
let let
inherit (lib.modules) mkForce; inherit (lib.modules) mkForce;
inherit (builtins) removeAttrs;
lix = pkgs.callPackage "${sources.lix}/package.nix" {
stdenv = pkgs.clangStdenv;
};
in in
{ {
nix = { nix = {
package = pkgs.lixPackageSets.stable.lix; package = lix;
# Check that Nix can parse the generated nix.conf. # Check that Nix can parse the generated nix.conf.
checkConfig = true; checkConfig = true;
@ -21,14 +25,18 @@ in
channel.enable = mkForce false; channel.enable = mkForce false;
# this is taken from sioodmy. # this is taken from sioodmy.
# Pin the registry to avoid downloading and evaling a new nixpkgs version every time. # pin the registry to avoid downloading and evaling a new nixpkgs version every time
registry = lib.mapAttrs (_: v: { flake = v; }) (removeAttrs inputs [ "__flake-compat" ]) // { # registry =
system.flake = inputs.self; # lib.mapAttrs (_: v: {flake = v.outPath;}) sources
# // {system.flake = sources.nichts;};
registry.nixpkgs.to = {
type = "path";
source = sources.nixpkgs;
}; };
# Add inputs to the system's legacy channels # Add inputs to the system's legacy channels
# to make legacy nix commands consistent as well # to make legacy nix commands consistent as well
nixPath = [ "nixpkgs=${inputs.nixpkgs.outPath}" ]; nixPath = [ "nixpkgs=/etc/nixos/nixpkgs" ];
# Run the Nix daemon on lowest possible priority # Run the Nix daemon on lowest possible priority
daemonCPUSchedPolicy = "idle"; daemonCPUSchedPolicy = "idle";
@ -59,10 +67,7 @@ in
# manually, as Nix won't do it for us. # manually, as Nix won't do it for us.
use-xdg-base-directories = true; use-xdg-base-directories = true;
# If set to true, Nix automatically detects files in the store that have # Automatically optimise symlinks
# identical contents, and replaces them with hard links to a single copy.
# This saves disk space. If set to false (the default), you can still run
# nix-store --optimise to get rid of duplicate files.
auto-optimise-store = true; auto-optimise-store = true;
# Users that are allowed to connect to the Nix daemon. # Users that are allowed to connect to the Nix daemon.
@ -119,7 +124,6 @@ in
"nix-command" # experimental nix commands "nix-command" # experimental nix commands
"cgroups" # allow nix to execute builds inside cgroups "cgroups" # allow nix to execute builds inside cgroups
"pipe-operator" "pipe-operator"
"no-url-literals"
]; ];
# Ensures that the result of Nix expressions is fully determined by # Ensures that the result of Nix expressions is fully determined by
@ -153,8 +157,6 @@ in
keep-derivations = true; keep-derivations = true;
keep-outputs = true; keep-outputs = true;
bash-prompt-suffix = "\[\033[m\]|\[\033[1;35m\]\t\[\033[m\]|\[\e[1m\]\u\[\e[1;36m\]\[\033[m\]@\[\e[1;36m\]\h\[\033[m\]:\[\e[0m\]\[\e[1;32m\][\W]> \[\e[0m\]";
# Use binary cache # Use binary cache
builders-use-substitutes = true; builders-use-substitutes = true;
@ -166,11 +168,15 @@ in
trusted-public-keys = [ trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
]; ];
# Determinate nix config
# ===========================================
# lazy-trees = true;
# ===========================================
}; };
}; };
environment.etc = { environment.etc = {
"nixos/nixpkgs".source = builtins.storePath inputs.nixpkgs.outPath; "nixos/nixpkgs".source = builtins.storePath sources.nixpkgs;
}; };
systemd.services = { systemd.services = {
# WE DONT WANT TO BUILD STUFF ON TMPFS # WE DONT WANT TO BUILD STUFF ON TMPFS

View file

@ -1,6 +1,6 @@
{ {
inputs,
lib, lib,
sources,
pkgs, pkgs,
... ...
}: }:
@ -11,7 +11,7 @@ in
{ {
imports = [ imports = [
# Going full schizo # Going full schizo
# "${sources.nixpkgs}/nixos/modules/misc/nixpkgs/read-only.nix" "${sources.nixpkgs}/nixos/modules/misc/nixpkgs/read-only.nix"
]; ];
options.nixpkgs.system = mkOption { options.nixpkgs.system = mkOption {
@ -19,9 +19,8 @@ in
default = pkgs.system; default = pkgs.system;
readOnly = true; readOnly = true;
}; };
config.nixpkgs = {
# flake.source = inputs.nixpkgs; config.nixpkgs.pkgs = import sources.nixpkgs {
pkgs = import inputs.nixpkgs {
inherit (pkgs.stdenv) hostPlatform; inherit (pkgs.stdenv) hostPlatform;
overlays = [ ]; overlays = [ ];
config = { config = {
@ -58,5 +57,4 @@ in
showDerivationWarnings = [ ]; showDerivationWarnings = [ ];
}; };
}; };
};
} }

View file

@ -2,6 +2,7 @@
inputs, inputs,
config, config,
lib, lib,
sources,
... ...
}: }:
let let
@ -12,7 +13,7 @@ let
in in
{ {
imports = [ imports = [
inputs.impermanence.nixosModules.default (sources.impermanence + "/nixos.nix")
]; ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
users = { users = {

View file

@ -1,24 +0,0 @@
{
"real_name": "ENC[AES256_GCM,data:R7Kac0dwMbxmCw4hpw==,iv:CijNtk8WiPlEwIg0OLu4ILLE2wh0W9HXm9OK9/Da+ng=,tag:NK2N6faooEknURwLuVP7OQ==,type:str]",
"real_email": "ENC[AES256_GCM,data:wwXcdxZQDxt2gnWP1qf9cw==,iv:fkx0m72FF7pB15fHRxObsTaLdnkOsexCgzOyfpoGFmE=,tag:mj2/4cofrJSIOqdAWiWstg==,type:str]",
"university_email": "ENC[AES256_GCM,data:WPy2AckQPWn+1OHJuTM=,iv:o2AT+RMUfCFVWaoD5D/GV5aq9kOgD/rCaHzwqYFIjig=,tag:KprTGSH2NvsrOCvhxLL/9w==,type:str]",
"organization_short_name": "ENC[AES256_GCM,data:dTVFz51V,iv:5sUc4qUIu+QNzmWihAXgyfRwZAdjEq9/prJCxpB2jbg=,tag:r91kaPi6p4heizRy5duFrw==,type:str]",
"organization_email": "ENC[AES256_GCM,data:GNBt9fXxBkh3z8L+DeD/mhBz14mJjkeX1wk9rHkUTg==,iv:7/VLeL3s9/CL2VtDiWFJNx+VJuGsGamWbcIG/MxNlC8=,tag:/KOXA6gII3Wrmgd9wjhD+g==,type:str]",
"bitwarden_url": "ENC[AES256_GCM,data:vhEVMZwDyQhQtXYR1diLQIDf6urqu03VC+M=,iv:icG6ieX9WjAj5Y4DpmSJaBvcqjksll3tWtWE5psaK08=,tag:+tIURDxZxv6qXR8B/eVyfg==,type:str]",
"sops": {
"age": [
{
"recipient": "age1a4jv2avdlj5zzq9p7ss9958t4wt3an95c3j86eclge7q2qc6n3wq4ucymc",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYZzJqMmdzdklJVXBWaXFr\nTlJuVVIvTEhndkhyWWEvb1JzbnJuQ2NrTDI4ClVxYUNTSms2Y29xV3RkbTlFR0Fl\nS3p2dlFVTnp0bmhsRVk5eGJNR0s0SzAKLS0tIHpkTTJ4djg3K2FSNFM2RDFXbWd5\neFpsMUdRczZpSnY0eE41WGtyQmI2amMKx+TPSzzdaXWc24ibbbI44O0Tg23MlQk7\nypgcVAaG+Q1HyBH2hZ+6HNAXIvko4CvAQu2kjipN8kN1vVFVO7pM8A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age12neldqxts6h3zstmk5hvmn2pq8s9qfhkt7cjcdd9wygekqrmparq6djsff",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBL1ExSlArditYSytuUzNC\nMEpVSUVGbGhkNklmT1ZnK1VJWGxGZWlreUFNClU1NjdPdHNPRVlWa0tCdjRvRDNY\nMFpSajY0d21ZTnFVbDZkSG4yS3ZkZmMKLS0tIGdLK1B2TUZyWXVHNkhRWkVIRVFJ\nWEtpS2NEanIzR3YzVHhDOVc0WTgzdHcKXrFMFf5niLKK+oN2RbpH5wy/2SjDuP8O\nyxUdKX9R0Hu2ZPk4cJXwn/PZDNP1M3wFlPnF+kJ4bSBRzV+M51W2jw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-01T21:25:00Z",
"mac": "ENC[AES256_GCM,data:CUMEpOwIw+/RIOyr6aE2YVZiJLGY8FhMv0IOUIFV1kHveOEtAkNWbRzOV1o1cq9pA9ot0dKn4KZRLuUZ+uJzCrxwBHILBZMFksS0czSPgLfg0uz9mJ2u1pPjvoUcQRuIOUN1Id32zQ/W36nPEpR3J/Jomx5nCVNiFmZSteZCx+E=,iv:wGzjsGMJ72ejDCiHN6Xo1ZP5ho1F++WZrwE2YwCN8ns=,tag:Ev1xjuwta6KL8lnPbhliyw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View file

@ -1,18 +0,0 @@
{
"sops": {
"age": [
{
"recipient": "age1a4jv2avdlj5zzq9p7ss9958t4wt3an95c3j86eclge7q2qc6n3wq4ucymc",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRT1VLNEVwZ09TODBYd0ZR\nQ2FUOXYzZGxQWkNmSUt5N0JhYlk5Wm9kWnc0Cm5XbUQyU1lBWUFBNVdLSk50aHI0\naTk0by9KOWw4VkJ2a0tHdjUyRzB1bU0KLS0tIDVEekdTNnNBamV5WWhmcmJMV3Vh\nKzZaVHBVT1F6U2FoQUZrenNyQnZJZUkKwQc4NaU0xk1TWqSHGYnbnKZGtC22j2MD\nUmlg9qmuGOy371Djx6dgdnXQy1367PTpoT+MWFWsMEPNbTbimHmJxA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age12neldqxts6h3zstmk5hvmn2pq8s9qfhkt7cjcdd9wygekqrmparq6djsff",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2QkJqblYxNjBPNitUeW5j\nZloxL2VwV0dTOTErSTd1ajNqTlRqTWdOMmhzCnlsT1ZiYVdCVVVQOXlCY0hKeVJz\nbDgyeXhUaWFGY0lNM0JyNHAvR2dSRE0KLS0tIGVBdlB6ZU1PNStkbloyeHhPdG1L\nUnhzYm9qQldOVVhjV2o3R3cvNFRoYzgK+D7d7VuBTm3SZJ5ErURJmBzC4mh6hH/0\nP81s+n3No8QEIzt9FVj/WuKo0T9wm9X7l4ItzD27Y3xOCmAtpM7Fwg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-01T22:22:52Z",
"mac": "ENC[AES256_GCM,data:FJo1PM2DqR3ImZoo7zl3IZRVKHdkTD1f5UIf/qSIVNA5UiSZuGX22XCZQRaGFc0XhI6oFLlnqXHGFUjcm5W487oVa9L/DiLE8iqCnMFcg2TmDb2n0BBzTkFusRaG1xBk4DvXGwXyRqY6kkn3vL1MoOmKJK13UkpTcgKa0bVWwBM=,iv:Qc0S5CBkgBAyKpEeBaqhZZsnDXkr5pHvTFVR99uGcNw=,tag:KBGcvx2j/BEPcd9bpLuY7A==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View file

@ -1,100 +0,0 @@
{
config,
inputs,
lib,
pkgs,
...
}:
let
inherit (lib.attrsets) attrValues attrNames;
inherit (lib.strings) concatStringsSep hasSuffix;
inherit (lib.lists) flatten remove;
inherit (builtins)
fromJSON
listToAttrs
map
readFile
filter
readDir
;
fromYAML = (pkgs.formats.yaml { }).generate;
# sops_master_key
master_key = "age1a4jv2avdlj5zzq9p7ss9958t4wt3an95c3j86eclge7q2qc6n3wq4ucymc";
# hermit /etc/ssh/ssh_host_ed25519_key
hermit_host_key = "age12neldqxts6h3zstmk5hvmn2pq8s9qfhkt7cjcdd9wygekqrmparq6djsff";
keys = concatStringsSep "," [
master_key
hermit_host_key
];
sops = pkgs.symlinkJoin {
name = "sops-wrapped";
paths = [ pkgs.sops ];
nativeBuildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/sops --add-flags "--age ${keys} --config ${sopsConfig}"
'';
};
mkRecipients = list: [ { age = list; } ];
sopsConfig = fromYAML ".sops.yaml" {
keys = [
master_key
hermit_host_key
];
creation_rules = [
{
path_regex = "secrets.json";
key_groups = mkRecipients [
master_key
hermit_host_key
];
}
{
path_regex = "personal_info.json";
key_groups = mkRecipients [
master_key
hermit_host_key
];
}
];
};
secretFiles = filter (file: hasSuffix "json" file) <| attrNames <| readDir ./.;
secretNames = file: remove "sops" <| attrNames <| fromJSON <| readFile <| ./. + "/${file}";
fileModes."personal_info.json" = "0444";
generateSecrets =
file:
map (n: {
name = n;
value = {
sopsFile = ./. + "/${file}";
mode = fileModes.${file} or "0400";
};
})
<| secretNames file;
in
{
imports = [
inputs.sops-nix.nixosModules.sops
];
config = {
sops = {
defaultSopsFile = ./secrets.json;
defaultSopsFormat = "json";
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
secrets = listToAttrs <| filter (x: x != [ ]) <| flatten <| map generateSecrets secretFiles;
};
environment.systemPackages = attrValues {
inherit sops;
};
};
}

View file

@ -6,8 +6,6 @@ in
system = { system = {
# My state version. # My state version.
stateVersion = "23.11"; stateVersion = "23.11";
disableInstallerTools = true;
tools.nixos-option.enable = false;
}; };
environment.etc."machine-id".text = "${machine-id}\n"; environment.etc."machine-id".text = "${machine-id}\n";
} }

View file

@ -2,6 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
sources,
... ...
}: }:
let let
@ -12,6 +13,96 @@ let
cfg = config.modules.desktops.niri; cfg = config.modules.desktops.niri;
niri = pkgs.callPackage (
_:
pkgs.rustPlatform.buildRustPackage {
pname = "niri";
version = "unstable";
src = sources.niri;
postPatch = ''
patchShebangs resources/niri-session
substituteInPlace resources/niri.service \
--replace-fail '/usr/bin' "$out/bin"
'';
cargoLock = {
allowBuiltinFetchGit = true;
lockFile = "${sources.niri}/Cargo.lock";
};
doCheck = false;
nativeBuildInputs = with pkgs; [
rustPlatform.bindgenHook
pkg-config
installShellFiles
];
buildInputs = with pkgs; [
cairo
dbus
libGL
libdisplay-info
libinput
seatd
libxkbcommon
libgbm
pango
wayland
dbus
pipewire
# Also includes libudev
systemd
];
buildFeatures = [
"dbus"
"dinit"
"xdp-gnome-screencast"
"systemd"
];
buildNoDefaultFeatures = true;
postInstall = ''
installShellCompletion --cmd niri \
--bash <($out/bin/niri completions bash) \
--fish <($out/bin/niri completions fish) \
--zsh <($out/bin/niri completions zsh)
install -Dm644 resources/niri.desktop -t $out/share/wayland-sessions
install -Dm644 resources/niri-portals.conf -t $out/share/xdg-desktop-portal
install -Dm755 resources/niri-session $out/bin/niri-session
install -Dm644 resources/niri{.service,-shutdown.target} -t $out/share/systemd/user
'';
env = {
# Force linking with libEGL and libwayland-client
# so they can be discovered by `dlopen()`
RUSTFLAGS = toString (
map (arg: "-C link-arg=" + arg) [
"-Wl,--push-state,--no-as-needed"
"-lEGL"
"-lwayland-client"
"-Wl,--pop-state"
]
++ [
"-Ctarget-cpu=native"
"-Cpanic=abort"
"-Clto=thin"
"-Cembed-bitcode=yes"
]
);
};
passthru = {
providedSessions = [ "niri" ];
};
meta.mainProgram = "niri";
}
) { };
kdl = pkgs.callPackage ./kdl.nix { }; kdl = pkgs.callPackage ./kdl.nix { };
node = name: args: children: { node = name: args: children: {
@ -60,7 +151,7 @@ in
config = mkIf (cfg.enable || isGraphical) { config = mkIf (cfg.enable || isGraphical) {
programs.niri = { programs.niri = {
enable = true; enable = true;
package = pkgs.niri; package = niri;
}; };
# The niri module auto enables the gnome keyring, # The niri module auto enables the gnome keyring,
# which is something I direly want to avoid. # which is something I direly want to avoid.

210
npins/default.nix Normal file
View file

@ -0,0 +1,210 @@
/*
This file is provided under the MIT licence:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
# Generated by npins. Do not modify; will be overwritten regularly
let
# Backwards-compatibly make something that previously didn't take any arguments take some
# The function must return an attrset, and will unfortunately be eagerly evaluated
# Same thing, but it catches eval errors on the default argument so that one may still call it with other arguments
mkFunctor =
fn:
let
e = (builtins.tryEval (fn { }));
in
(if e.success then e.value else { error = fn { }; }) // { __functor = _self: fn; };
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
range =
first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1);
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
concatMapStrings = f: list: concatStrings (map f list);
concatStrings = builtins.concatStringsSep "";
# If the environment variable NPINS_OVERRIDE_${name} is set, then use
# the path directly as opposed to the fetched source.
# (Taken from Niv for compatibility)
mayOverride =
name: path:
let
envVarName = "NPINS_OVERRIDE_${saneName}";
saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name;
ersatz = builtins.getEnv envVarName;
in
if ersatz == "" then
path
else
# this turns the string into an actual Nix path (for both absolute and
# relative paths)
builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" (
if builtins.substring 0 1 ersatz == "/" then
/. + ersatz
else
/. + builtins.getEnv "PWD" + "/${ersatz}"
);
mkSource =
name: spec:
{
pkgs ? null,
}:
assert spec ? type;
let
# Unify across builtin and pkgs fetchers.
# `fetchGit` requires a wrapper because of slight API differences.
fetchers =
if pkgs == null then
{
inherit (builtins) fetchTarball fetchurl;
# For some fucking reason, fetchGit has a different signature than the other builtin fetchers …
fetchGit = args: (builtins.fetchGit args).outPath;
}
else
{
fetchTarball = pkgs.fetchzip;
inherit (pkgs) fetchurl;
fetchGit =
{
url,
submodules,
rev,
name,
narHash,
}:
pkgs.fetchgit {
inherit url rev name;
fetchSubmodules = submodules;
hash = narHash;
};
};
# Dispatch to the correct code path based on the type
path =
if spec.type == "Git" then
mkGitSource fetchers spec
else if spec.type == "GitRelease" then
mkGitSource fetchers spec
else if spec.type == "PyPi" then
mkPyPiSource fetchers spec
else if spec.type == "Channel" then
mkChannelSource fetchers spec
else if spec.type == "Tarball" then
mkTarballSource fetchers spec
else
builtins.throw "Unknown source type ${spec.type}";
in
spec // { outPath = mayOverride name path; };
mkGitSource =
{ fetchTarball, fetchGit, ... }:
{
repository,
revision,
url ? null,
submodules,
hash,
branch ? null,
...
}:
assert repository ? type;
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
# In the latter case, there we will always be an url to the tarball
if url != null && !submodules then
fetchTarball {
inherit url;
sha256 = hash;
}
else
let
url =
if repository.type == "Git" then
repository.url
else if repository.type == "GitHub" then
"https://github.com/${repository.owner}/${repository.repo}.git"
else if repository.type == "GitLab" then
"${repository.server}/${repository.repo_path}.git"
else
throw "Unrecognized repository type ${repository.type}";
urlToName =
url: rev:
let
matched = builtins.match "^.*/([^/]*)(\\.git)?$" url;
short = builtins.substring 0 7 rev;
appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else "";
in
"${if matched == null then "source" else builtins.head matched}${appendShort}";
name = urlToName url revision;
in
fetchGit {
rev = revision;
narHash = hash;
inherit name submodules url;
};
mkPyPiSource =
{ fetchurl, ... }:
{ url, hash, ... }:
fetchurl {
inherit url;
sha256 = hash;
};
mkChannelSource =
{ fetchTarball, ... }:
{ url, hash, ... }:
fetchTarball {
inherit url;
sha256 = hash;
};
mkTarballSource =
{ fetchTarball, ... }:
{
url,
locked_url ? url,
hash,
...
}:
fetchTarball {
url = locked_url;
sha256 = hash;
};
in
mkFunctor (
{
input ? ./sources.json,
}:
let
data =
if builtins.isPath input then
# while `readFile` will throw an error anyways if the path doesn't exist,
# we still need to check beforehand because *our* error can be caught but not the one from the builtin
# *piegames sighs*
if builtins.pathExists input then
builtins.fromJSON (builtins.readFile input)
else
throw "Input path ${toString input} does not exist"
else if builtins.isAttrs input then
input
else
throw "Unsupported input type ${builtins.typeOf input}, must be a path or an attrset";
version = data.version;
in
if version == 6 then
builtins.mapAttrs (name: spec: mkFunctor (mkSource name spec)) data.pins
else
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
)

240
npins/sources.json Normal file
View file

@ -0,0 +1,240 @@
{
"pins": {
"comma": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "nix-community",
"repo": "comma"
},
"branch": "master",
"submodules": false,
"revision": "531e5219b25c1584461cc4b7fb11729a9b928b2b",
"url": "https://github.com/nix-community/comma/archive/531e5219b25c1584461cc4b7fb11729a9b928b2b.tar.gz",
"hash": "sha256-QmHTqpPugYmv7as7DqbVQLiXKdm73f0EpMg7nZvHQQQ="
},
"flake-compat": {
"type": "Git",
"repository": {
"type": "Forgejo",
"server": "https://git.lix.systems/",
"owner": "lix-project",
"repo": "flake-compat"
},
"branch": "main",
"submodules": false,
"revision": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"url": "https://git.lix.systems/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz",
"hash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw="
},
"ghostty": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "ghostty-org",
"repo": "ghostty"
},
"branch": "main",
"submodules": false,
"revision": "d3cadf24952a6088affee9f752f75c3db8287801",
"url": "https://github.com/ghostty-org/ghostty/archive/d3cadf24952a6088affee9f752f75c3db8287801.tar.gz",
"hash": "sha256-OKeY9b+enmrLNKV9J2OCWYWNDC6MZuBbObknFCK8Qfs="
},
"hjem": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "feel-co",
"repo": "hjem"
},
"branch": "main",
"submodules": false,
"revision": "2426d6ad20e767895e936ed0c9563cc4e2b6c96f",
"url": "https://github.com/feel-co/hjem/archive/2426d6ad20e767895e936ed0c9563cc4e2b6c96f.tar.gz",
"hash": "sha256-WJ70Dv+tJjIl7mMOqUgcdcz+RrujDRoeKptiU6oh1lI="
},
"impermanence": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "nix-community",
"repo": "impermanence"
},
"branch": "master",
"submodules": false,
"revision": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"url": "https://github.com/nix-community/impermanence/archive/4b3e914cdf97a5b536a889e939fb2fd2b043a170.tar.gz",
"hash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI="
},
"lanzaboote": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "nix-community",
"repo": "lanzaboote"
},
"branch": "master",
"submodules": false,
"revision": "892cbdca865d6b42f9c0d222fe309f7720259855",
"url": "https://github.com/nix-community/lanzaboote/archive/892cbdca865d6b42f9c0d222fe309f7720259855.tar.gz",
"hash": "sha256-aD6/scLN3L4ZszmNbhhd3JQ9Pzv1ScYFphz14wHinfs="
},
"lix": {
"type": "Git",
"repository": {
"type": "Forgejo",
"server": "https://git.lix.systems/",
"owner": "lix-project",
"repo": "lix"
},
"branch": "main",
"submodules": false,
"revision": "fe6395cd4d7aa1ffd415cb2267ff431b5c66152f",
"url": "https://git.lix.systems/lix-project/lix/archive/fe6395cd4d7aa1ffd415cb2267ff431b5c66152f.tar.gz",
"hash": "sha256-AGzXkcbafClvd31K/C/Nb9MByIws+WV0lYKQ1JzvVQA="
},
"lix-module": {
"type": "Git",
"repository": {
"type": "Forgejo",
"server": "https://git.lix.systems/",
"owner": "lix-project",
"repo": "nixos-module"
},
"branch": "main",
"submodules": false,
"revision": "1c906dd92e032bcb5a27f98cf53833cae889537f",
"url": "https://git.lix.systems/lix-project/nixos-module/archive/1c906dd92e032bcb5a27f98cf53833cae889537f.tar.gz",
"hash": "sha256-IgD1JR7scSEwlK/YAbmrcTWpAYT30LPldCUHdzXkaMs="
},
"nh": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "nix-community",
"repo": "nh"
},
"branch": "master",
"submodules": false,
"revision": "6cd62b00023932effbf57f21879f4d2deae4b256",
"url": "https://github.com/nix-community/nh/archive/6cd62b00023932effbf57f21879f4d2deae4b256.tar.gz",
"hash": "sha256-28NHVSsYAp4vdSApAmbbdkG4bjhBODPDiyx/E4uMGpc="
},
"nil": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "oxalica",
"repo": "nil"
},
"branch": "main",
"submodules": false,
"revision": "f80fe365cb441624d1608235e6e793e5dce47fb0",
"url": "https://github.com/oxalica/nil/archive/f80fe365cb441624d1608235e6e793e5dce47fb0.tar.gz",
"hash": "sha256-nFK2XhrDS5igmkDQWmyTcgiJsEr3KOcR31DaSy+Fy9s="
},
"niri": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "yalter",
"repo": "niri"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v25.05.1",
"revision": "61e306c1c6b13ae99bf7f51532a6aa86cd50d690",
"url": "https://api.github.com/repos/yalter/niri/tarball/refs/tags/v25.05.1",
"hash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs="
},
"nixfmt": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "nixos",
"repo": "nixfmt"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v1.0.0",
"revision": "1f2589cb7198529c6c1eec9699eccd4d507d3600",
"url": "https://api.github.com/repos/nixos/nixfmt/tarball/refs/tags/v1.0.0",
"hash": "sha256-d8SYpFoCpi1GrqlKwxxq9qhyjDANeLgr8WWJNRK6wkc="
},
"nixpkgs": {
"type": "Channel",
"name": "nixpkgs-unstable",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre852965.c3e5d9f86b3f/nixexprs.tar.xz",
"hash": "sha256-izg2LuZgjCZx+B6J+lYhk1Jo4L0yAHsZTRD8vHRhD9A="
},
"npins": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "andir",
"repo": "npins"
},
"branch": "master",
"submodules": false,
"revision": "e4683671e145c652c371b6b8ad9b0d757c88853c",
"url": "https://github.com/andir/npins/archive/e4683671e145c652c371b6b8ad9b0d757c88853c.tar.gz",
"hash": "sha256-Nu86s1xok+1EFM0J9e55hrYPgfoutEZUDBpeXReCOaY="
},
"quickshell": {
"type": "Git",
"repository": {
"type": "Git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"branch": "master",
"submodules": false,
"revision": "f7597cdae2d537c5b12843599955856090dc49d5",
"url": null,
"hash": "sha256-UkKaPXTPzT7HAcBOV4NlWx2GAEJaTf0eb5OX6Q6jPqg="
},
"spicetify-nix": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "Gerg-L",
"repo": "spicetify-nix"
},
"branch": "master",
"submodules": false,
"revision": "2bedaf52261ef2adbe71af70820aeb41dfe9a5ef",
"url": "https://github.com/Gerg-L/spicetify-nix/archive/2bedaf52261ef2adbe71af70820aeb41dfe9a5ef.tar.gz",
"hash": "sha256-lD4Zn37DWEx0X1DqM3npH68b7oh81H8BaaO3c6Ol/DQ="
},
"systems": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "nix-systems",
"repo": "default-linux"
},
"branch": "main",
"submodules": false,
"revision": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"url": "https://github.com/nix-systems/default-linux/archive/31732fcf5e8fea42e59c2488ad31a0e651500f68.tar.gz",
"hash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80="
},
"watt": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "notashelf",
"repo": "watt"
},
"branch": "main",
"submodules": false,
"revision": "f68a9795616699870d213dc9e641dab655aa434a",
"url": "https://github.com/notashelf/watt/archive/f68a9795616699870d213dc9e641dab655aa434a.tar.gz",
"hash": "sha256-pETi/Fs+8FF2ZuE+JyK9+NcFaDPMHx71UdWgmzjxvkQ="
}
},
"version": 6
}

12
shell.nix Normal file
View file

@ -0,0 +1,12 @@
{
pkgs ? import <nixpkgs> { },
sources ? import ./npins,
}:
pkgs.mkShellNoCC {
packages = [
(pkgs.callPackage (sources.npins + "/npins.nix") { })
pkgs.nil
pkgs.nixfmt
];
}