Compare commits

..

34 Commits

Author SHA1 Message Date
6cc089cea8 update 2026-01-16 22:44:53 +00:00
842aea64f1 pingbox backups 2026-01-06 22:16:19 +00:00
c048ce696a some shit 2026-01-06 22:16:04 +00:00
81684c7650 update 2025-12-19 21:19:25 +00:00
d1d2a6f0e2 fixes 2025-12-19 21:19:25 +00:00
4eac39f381 idk 2025-12-01 22:45:42 +00:00
195d2042ca fs idk 2025-11-24 23:35:25 +00:00
d9ec914402 update 2025-11-10 21:08:41 +00:00
d218fc2b06 alsdkjf 2025-11-10 20:22:40 +00:00
42c6f9aa68 Stuff 2025-11-10 20:20:57 +00:00
8367b03304 Add leviathan 2025-10-26 18:29:58 +00:00
fdf7719a4e Niri stuff 2025-08-19 22:41:03 +01:00
8959111f3e Update 2025-08-19 22:40:42 +01:00
7b6b65cd1d make zed work 2025-08-04 00:11:49 +01:00
888ce3e9d3 updates 2025-08-01 16:14:23 +01:00
0929e6a15a Staf 2025-08-01 16:12:43 +01:00
7a9083d0ef Update and stuff 2025-08-01 16:09:40 +01:00
1409e3b988 laptop stuff 2025-05-28 23:29:47 +01:00
f1ae7a7f08 Lidarr etc 2025-05-28 23:21:28 +01:00
27047ed38f music 2025-05-24 18:30:01 +01:00
23a653ad1c cool 2025-05-13 01:08:52 +01:00
fb2370516e Kickstart Ranni 2025-05-12 22:31:34 +01:00
dd5d771387 Rekey secrets 2025-05-10 00:40:10 +01:00
0252a728d9 Ranni 2025-05-10 00:34:47 +01:00
03011c7617 fuck devenv 2025-05-09 00:43:53 +01:00
1f137c2f0c Loadsamoney 2025-05-09 00:22:34 +01:00
a3afa8eb2c Stuff 2025-05-01 00:16:28 +01:00
bebe8ddc78 Some stuff 2025-04-21 15:00:48 +01:00
5b9f5bb9c7 some stuff 2025-04-15 20:12:39 +01:00
4e43f7a0ef idk 2025-03-23 14:45:56 +00:00
bd54abed0b Add zen 2025-03-15 01:05:15 +00:00
c13476e500 Goo 2025-03-15 00:01:02 +00:00
0e91761bf6 idk 2025-03-14 23:59:13 +00:00
c18090ec1f Stuff 2025-03-14 15:19:49 +00:00
48 changed files with 2191 additions and 390 deletions

410
flake.lock generated
View File

@@ -10,11 +10,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1736955230, "lastModified": 1762618334,
"narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", "narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", "rev": "fcdea223397448d35d9b31f798479227e80183f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -29,19 +29,24 @@
"devenv" "devenv"
], ],
"flake-compat": [ "flake-compat": [
"devenv" "devenv",
"flake-compat"
], ],
"git-hooks": [ "git-hooks": [
"devenv" "devenv",
"git-hooks"
], ],
"nixpkgs": "nixpkgs" "nixpkgs": [
"devenv",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1737621947, "lastModified": 1760971495,
"narHash": "sha256-8HFvG7fvIFbgtaYAY2628Tb89fA55nPm2jSiNs0/Cws=", "narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=",
"owner": "cachix", "owner": "cachix",
"repo": "cachix", "repo": "cachix",
"rev": "f65a3cd5e339c223471e64c051434616e18cc4f5", "rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -51,6 +56,27 @@
"type": "github" "type": "github"
} }
}, },
"copyparty": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1768598221,
"narHash": "sha256-09F+4yMnno3yI1us7t0Gt/wEbyZNk5U8EW9IE9HGXg8=",
"owner": "9001",
"repo": "copyparty",
"rev": "72c59405e7a49686389414913787245aa8e66164",
"type": "github"
},
"original": {
"owner": "9001",
"repo": "copyparty",
"type": "github"
}
},
"darwin": { "darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -59,11 +85,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1700795494, "lastModified": 1744478979,
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", "rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -77,18 +103,20 @@
"inputs": { "inputs": {
"cachix": "cachix", "cachix": "cachix",
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks", "git-hooks": "git-hooks",
"nix": "nix", "nix": "nix",
"nixd": "nixd",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1741953770, "lastModified": 1768597968,
"narHash": "sha256-MTMEe69JXo7pSyoz1J+WgcSHZy991yhIz5GCsLf4M1g=", "narHash": "sha256-WdkoFB2QyMkZOmsi/08394clBRyEtNseH+jYGUs9eDU=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv", "repo": "devenv",
"rev": "984272189d4c23e3663a4d7e83b3cf3a532aa53d", "rev": "92ad9c70fad164e8f4a3656dec91717a5c42cd98",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -100,11 +128,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733328505, "lastModified": 1761588595,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -133,16 +161,15 @@
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"devenv", "devenv",
"nix",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1712014858, "lastModified": 1760948891,
"narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -151,7 +178,37 @@
"type": "github" "type": "github"
} }
}, },
"flake-root": {
"locked": {
"lastModified": 1723604017,
"narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=",
"owner": "srid",
"repo": "flake-root",
"rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e",
"type": "github"
},
"original": {
"owner": "srid",
"repo": "flake-root",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": { "locked": {
"lastModified": 1649676176, "lastModified": 1649676176,
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
@@ -166,13 +223,16 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": { "flake-utils_3": {
"inputs": {
"systems": "systems_3"
},
"locked": { "locked": {
"lastModified": 1659877975, "lastModified": 1731533236,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -181,9 +241,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1705309234, "lastModified": 1705309234,
@@ -202,7 +262,8 @@
"git-hooks": { "git-hooks": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
"devenv" "devenv",
"flake-compat"
], ],
"gitignore": "gitignore", "gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
@@ -211,11 +272,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1740849354, "lastModified": 1760663237,
"narHash": "sha256-oy33+t09FraucSZ2rZ6qnD1Y1c8azKKmQuCvF2ytUko=", "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "4a709a8ce9f8c08fa7ddb86761fe488ff7858a07", "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -251,15 +312,14 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"parts": "parts",
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1741890415, "lastModified": 1766068170,
"narHash": "sha256-sDth10S5bzq1iVJs950x+haFL/CP9xTOEQsgkscIwlE=", "narHash": "sha256-gsG+gYgr9GJX+RAAACK+46nWoJzcAtcrrjPZKd9mbbs=",
"owner": "tailscale", "owner": "tailscale",
"repo": "golink", "repo": "golink",
"rev": "6826e7057912f9c0e01b8cfa5c81ec875a0aba41", "rev": "e6795d11f3b2d7a90678e1ea471967e8137b36ef",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -276,11 +336,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1703113217, "lastModified": 1745494811,
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -296,11 +356,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1741955947, "lastModified": 1768598210,
"narHash": "sha256-2lbURKclgKqBNm7hVRtWh0A7NrdsibD0EaWhahUVhhY=", "narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "4e12151c9e014e2449e0beca2c0e9534b96a26b4", "rev": "c47b2cc64a629f8e075de52e4742de688f930dc6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -310,9 +370,30 @@
"type": "github" "type": "github"
} }
}, },
"home-manager_3": {
"inputs": {
"nixpkgs": [
"zen-browser",
"nixpkgs"
]
},
"locked": {
"lastModified": 1767104570,
"narHash": "sha256-GKgwu5//R+cLdKysZjGqvUEEOGXXLdt93sNXeb2M/Lk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e4e78a2cbeaddd07ab7238971b16468cc1d14daf",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"i3utils": { "i3utils": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
@@ -332,68 +413,86 @@
"url": "https://git.sr.ht/~dpatterbee/i3utils" "url": "https://git.sr.ht/~dpatterbee/i3utils"
} }
}, },
"libgit2": {
"flake": false,
"locked": {
"lastModified": 1697646580,
"narHash": "sha256-oX4Z3S9WtJlwvj0uH9HlYcWv+x1hqp8mhXl7HsLu2f0=",
"owner": "libgit2",
"repo": "libgit2",
"rev": "45fd9ed7ae1a9b74b957ef4f337bc3c8b3df01b5",
"type": "github"
},
"original": {
"owner": "libgit2",
"repo": "libgit2",
"type": "github"
}
},
"nix": { "nix": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
"devenv" "devenv",
"flake-compat"
],
"flake-parts": [
"devenv",
"flake-parts"
],
"git-hooks-nix": [
"devenv",
"git-hooks"
],
"nixpkgs": [
"devenv",
"nixpkgs"
], ],
"flake-parts": "flake-parts",
"libgit2": "libgit2",
"nixpkgs": "nixpkgs_2",
"nixpkgs-23-11": [ "nixpkgs-23-11": [
"devenv" "devenv"
], ],
"nixpkgs-regression": [ "nixpkgs-regression": [
"devenv" "devenv"
],
"pre-commit-hooks": [
"devenv"
] ]
}, },
"locked": { "locked": {
"lastModified": 1734114420, "lastModified": 1768491252,
"narHash": "sha256-n52PUzub5jZWc8nI/sR7UICOheU8rNA+YZ73YaHeCBg=", "narHash": "sha256-ZlIPlKCYXwQJsw9WYVeyCapF5Y8JZL2Hctf22+IbHqo=",
"owner": "domenkozar", "owner": "cachix",
"repo": "nix", "repo": "nix",
"rev": "bde6a1a0d1f2af86caa4d20d23eca019f3d57eee", "rev": "9f0da1cd90b271569752a4c83f3ff700b8fcbe12",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "domenkozar", "owner": "cachix",
"ref": "devenv-2.24", "ref": "devenv-2.32",
"repo": "nix", "repo": "nix",
"type": "github" "type": "github"
} }
}, },
"nixd": {
"inputs": {
"flake-parts": [
"devenv",
"flake-parts"
],
"flake-root": "flake-root",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1763964548,
"narHash": "sha256-JTRoaEWvPsVIMFJWeS4G2isPo15wqXY/otsiHPN0zww=",
"owner": "nix-community",
"repo": "nixd",
"rev": "d4bf15e56540422e2acc7bc26b20b0a0934e3f5e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixd",
"type": "github"
}
},
"nixgl": { "nixgl": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1713543440, "lastModified": 1762090880,
"narHash": "sha256-lnzZQYG0+EXl/6NkGpyIz+FEOc/DSEG57AP1VsdeNrM=", "narHash": "sha256-fbRQzIGPkjZa83MowjbD2ALaJf9y6KMDdJBQMKFeY/8=",
"owner": "guibou", "owner": "guibou",
"repo": "nixGL", "repo": "nixGL",
"rev": "310f8e49a149e4c9ea52f1adf70cdc768ec53f8a", "rev": "b6105297e6f0cd041670c3e8628394d4ee247ed5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -404,55 +503,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1733212471, "lastModified": 1768564909,
"narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=", "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "55d15ad12a74eb7d4646254e13638ad0c4128776", "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1733096140,
"narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1717432640,
"narHash": "sha256-+f9c4/ZX5MWDOuB1rKoWj+lBNm0z0rs4CK47HBLxy1o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "88269ab3044128b7c2f4c7d68448b2fb50456870",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1741851582,
"narHash": "sha256-cPfs8qMccim2RBgtKGF+x9IBCduRvd/N5F4nYpU0TVE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6607cf789e541e7873d40d3a8f7815ea92204f32",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -461,7 +516,23 @@
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_4": { "nixpkgs-stable": {
"locked": {
"lastModified": 1751274312,
"narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1708161998, "lastModified": 1708161998,
"narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=", "narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=",
@@ -477,33 +548,18 @@
"type": "github" "type": "github"
} }
}, },
"parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"copyparty": "copyparty",
"devenv": "devenv", "devenv": "devenv",
"golink": "golink", "golink": "golink",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"i3utils": "i3utils", "i3utils": "i3utils",
"nixgl": "nixgl", "nixgl": "nixgl",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable",
"zen-browser": "zen-browser",
"zig": "zig" "zig": "zig"
} }
}, },
@@ -552,18 +608,76 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"devenv",
"nixd",
"nixpkgs"
]
},
"locked": {
"lastModified": 1734704479,
"narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"home-manager": "home-manager_3",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1768379550,
"narHash": "sha256-z94S29l5V86h11LZbPIMbHTJyksDG63aqISsZkTTuJY=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "06f61b4e4f4f6ba8027c96a5611c63dc0db12b90",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
},
"zig": { "zig": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1741825901, "lastModified": 1768565720,
"narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=", "narHash": "sha256-PUDjT7pkY4WaKjS7flnjfwd8Q2piVsrNH/t/D+iYQ0g=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "0b14285e283f5a747f372fb2931835dd937c4383", "rev": "27fb45c107ca8c2eda2b6f255bdd33bb82f3026c",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -4,9 +4,14 @@
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs.url = "nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.inputs.nixpkgs.follows = "nixpkgs";
copyparty.url = "github:9001/copyparty";
copyparty.inputs.nixpkgs.follows = "nixpkgs";
devenv.url = "github:cachix/devenv"; devenv.url = "github:cachix/devenv";
devenv.inputs.nixpkgs.follows = "nixpkgs"; devenv.inputs.nixpkgs.follows = "nixpkgs";
@@ -22,31 +27,40 @@
nixgl.url = "github:/guibou/nixGL"; nixgl.url = "github:/guibou/nixGL";
nixgl.inputs.nixpkgs.follows = "nixpkgs"; nixgl.inputs.nixpkgs.follows = "nixpkgs";
zen-browser.url = "github:0xc000022070/zen-browser-flake";
zen-browser.inputs.nixpkgs.follows = "nixpkgs";
zig.url = "github:mitchellh/zig-overlay"; zig.url = "github:mitchellh/zig-overlay";
}; };
outputs = { outputs = {
nixpkgs, nixpkgs,
nixpkgs-stable,
agenix, agenix,
copyparty,
devenv, devenv,
golink, golink,
home-manager, home-manager,
i3utils, i3utils,
nixgl, nixgl,
zen-browser,
zig, zig,
... ...
} @ inputs: let } @ inputs: let
system = "x86_64-linux"; system = "x86_64-linux";
overlays = [
copyparty.overlays.default
golink.overlays.default
nixgl.overlay
zig.overlays.default
];
pkgs = pkgs =
(import nixpkgs { (import nixpkgs {
inherit system; inherit system;
config.allowUnfree = true; config.allowUnfree = true;
overlays = [ overlays = overlays;
golink.overlays.default
nixgl.overlay
zig.overlays.default
];
config.permittedInsecurePackages = [ config.permittedInsecurePackages = [
"electron-25.9.0" "electron-25.9.0"
]; ];
@@ -71,16 +85,29 @@
hostSystem = { hostSystem = {
hostname, hostname,
headless, headless,
np,
}: }:
lib.nixosSystem { np.lib.nixosSystem {
inherit system; inherit system;
inherit pkgs; pkgs = import np {
inherit system;
config.allowUnfree = true;
overlays = overlays;
config.permittedInsecurePackages = [
"electron-25.9.0"
"jujutsu-0.23.0"
];
};
modules = [ modules = [
{nixpkgs.overlays = overlays;}
./hosts/${hostname}/configuration.nix ./hosts/${hostname}/configuration.nix
agenix.nixosModules.default agenix.nixosModules.default
copyparty.nixosModules.default
golink.nixosModules.default golink.nixosModules.default
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
@@ -91,6 +118,7 @@
extraSpecialArgs = { extraSpecialArgs = {
inherit hostname; inherit hostname;
inherit headless; inherit headless;
inherit inputs;
}; };
}; };
} }
@@ -101,30 +129,47 @@
dingbox = hostSystem { dingbox = hostSystem {
hostname = "dingbox"; hostname = "dingbox";
headless = false; headless = false;
np = nixpkgs;
}; };
elderbug = hostSystem { elderbug = hostSystem {
hostname = "elderbug"; hostname = "elderbug";
headless = false; headless = false;
np = nixpkgs;
}; };
miniding = hostSystem { miniding = hostSystem {
hostname = "miniding"; hostname = "miniding";
headless = false; headless = false;
np = nixpkgs;
}; };
pingbox = hostSystem { pingbox = hostSystem {
hostname = "pingbox"; hostname = "pingbox";
headless = false; headless = false;
np = nixpkgs;
}; };
dingserver = hostSystem { dingserver = hostSystem {
hostname = "dingserver"; hostname = "dingserver";
headless = true; headless = true;
np = nixpkgs;
}; };
bigding = hostSystem { bigding = hostSystem {
hostname = "bigding"; hostname = "bigding";
headless = true; headless = true;
np = nixpkgs;
}; };
sidon = hostSystem { sidon = hostSystem {
hostname = "sidon"; hostname = "sidon";
headless = false; headless = false;
np = nixpkgs;
};
ranni = hostSystem {
hostname = "ranni";
headless = false;
np = nixpkgs;
};
leviathan = hostSystem {
hostname = "leviathan";
headless = true;
np = nixpkgs;
}; };
}; };
homeConfigurations = { homeConfigurations = {
@@ -133,27 +178,14 @@
}; };
}; };
devShell.${system} = devenv.lib.mkShell { devShell.${system} = pkgs.mkShell {
inherit inputs pkgs; packages = [
modules = [ pkgs.alejandra
{ (
# https://devenv.sh/reference/options/ pkgs.writeScriptBin "tidy" ''
packages = with pkgs; [ alejandra .
alejandra ''
]; )
enterShell = ''
'';
env = {
};
scripts = {
tidy.exec = ''
alejandra .
'';
};
}
]; ];
}; };
}; };

View File

@@ -3,7 +3,29 @@
pkgs, pkgs,
lib, lib,
... ...
}: { }: let
mkVHost = baseUrl: {
service,
port,
}: {
name = "${service}.${baseUrl}";
value = {
listenAddresses = ["100.91.249.54"];
extraConfig = ''
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
}
reverse_proxy localhost:${builtins.toString port}
'';
};
};
mkVHosts = baseUrl: hosts: builtins.listToAttrs (builtins.map (mkVHost baseUrl) hosts);
in {
imports = [ imports = [
../common ../common
./hardware-configuration.nix ./hardware-configuration.nix
@@ -26,6 +48,7 @@
interfaces.ens3.useDHCP = true; interfaces.ens3.useDHCP = true;
firewall = { firewall = {
allowedTCPPorts = [80 8448 443];
allowedTCPPortRanges = [ allowedTCPPortRanges = [
{ {
from = 12500; from = 12500;
@@ -46,6 +69,8 @@
}; };
}; };
services.tailscale.permitCertUid = "caddy";
services.syncthing = { services.syncthing = {
settings = { settings = {
gui = { gui = {
@@ -55,6 +80,105 @@
guiAddress = "localhost:8387"; guiAddress = "localhost:8387";
}; };
users.groups."media".name = "media";
age.secrets = {
caddy_porkbun_api_env.file = ../../secrets/caddy_porkbun_api_env.age;
};
services.sabnzbd = {
enable = true;
group = "media";
};
services.radarr = {
enable = true;
group = "media";
};
services.caddy = {
enable = true;
enableReload = false;
environmentFile = config.age.secrets.caddy_porkbun_api_env.path;
package = pkgs.caddy.withPlugins {
plugins = ["github.com/caddy-dns/porkbun@v0.2.1"];
hash = "sha256-X8QbRc2ahW1B5niV8i3sbfpe1OPYoaQ4LwbfeaWvfjg=";
};
logFormat = "level INFO";
virtualHosts =
(mkVHosts "broccoli.town" [
{
service = "radarr";
port = 7878;
}
{
service = "sonarr";
port = 8989;
}
{
service = "sab";
port = 8085;
}
{
service = "transmission";
port = 9091;
}
])
// {
"danielpatterson.dev" = {
extraConfig = ''
header {
proof proven.lol/de4a14
}
root * /srv/site/danielpatterson.dev
encode zstd gzip
file_server
'';
};
"movies.danielpatterson.dev" = {
extraConfig = ''
reverse_proxy localhost:8096
'';
};
"git.broccoli.town" = {
extraConfig = ''
reverse_proxy localhost:3030
'';
};
};
};
# containers.radarr = {
# autoStart = false;
# bindMounts = {
# "/data" = {
# hostPath = "/var/media";
# mountPoint = "/data";
# isReadOnly = false;
# };
# };
# forwardPorts = [
# {
# containerPort = 7878;
# hostPort = 7979;
# }
# ];
# config = {config, pkgs, lib, ...}: {
# services.radarr = {
# enable = true;
# };
# };
# };
services.sonarr = {
enable = true;
group = "media";
};
services.prowlarr = {
enable = true;
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
helix helix
kitty # For terminfo kitty # For terminfo

View File

@@ -11,7 +11,7 @@
isNormalUser = true; isNormalUser = true;
home = "/home/${userName}"; home = "/home/${userName}";
initialPassword = "password"; initialPassword = "password";
extraGroups = ["wheel" "networkmanager" "docker" "video" "syncthing"]; extraGroups = ["wheel" "networkmanager" "docker" "video" "syncthing" "audio" "media"];
uid = uid; uid = uid;
group = "users"; group = "users";
shell = pkgs.zsh; shell = pkgs.zsh;
@@ -29,12 +29,18 @@ in {
# nix flakes compatibility # nix flakes compatibility
nix = { nix = {
settings.trusted-users = [
"root"
"daniel"
];
extraOptions = '' extraOptions = ''
experimental-features = nix-command flakes experimental-features = nix-command flakes
warn-dirty = false warn-dirty = false
''; '';
}; };
security.sudo.wheelNeedsPassword = false;
# Set time zone. # Set time zone.
time.timeZone = "Europe/London"; time.timeZone = "Europe/London";
@@ -47,6 +53,7 @@ in {
}; };
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
virtualisation.podman.enable = true;
hardware.cpu.intel.updateMicrocode = true; hardware.cpu.intel.updateMicrocode = true;
@@ -102,7 +109,7 @@ in {
}; };
tailscale = { tailscale = {
enable = true; enable = lib.mkDefault true;
}; };
}; };
} }

View File

@@ -1,6 +1,7 @@
{ {
config, config,
pkgs, pkgs,
lib,
inputs, inputs,
... ...
}: { }: {
@@ -8,8 +9,8 @@
# Enable the X11 windowing system. # Enable the X11 windowing system.
hardware.graphics.enable32Bit = true; hardware.graphics.enable32Bit = true;
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
hardware.pulseaudio.enable = false; services.pulseaudio.enable = false;
services.blueman.enable = true; services.blueman.enable = lib.mkDefault true;
programs.partition-manager.enable = true; programs.partition-manager.enable = true;
networking = { networking = {
@@ -42,10 +43,11 @@
fraunces fraunces
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-emoji noto-fonts-color-emoji
nerd-fonts.iosevka nerd-fonts.iosevka
monocraft monocraft
ubuntu_font_family source-code-pro
ubuntu-classic
]; ];
fontDir.enable = true; fontDir.enable = true;
@@ -57,6 +59,8 @@
steam = { steam = {
enable = true; enable = true;
}; };
thunar.enable = true;
}; };
services = { services = {
@@ -69,6 +73,18 @@
}; };
}; };
displayManager.sddm = {
enable = true;
package = lib.mkDefault pkgs.kdePackages.sddm;
wayland.enable = true;
# extraPackages = with pkgs; [(catppuccin-sddm.override {flavor = "macchiato";})];
theme = "maldives";
};
# desktopManager.plasma6 = {
# enable = true;
# };
pipewire = { pipewire = {
enable = true; enable = true;
pulse.enable = true; pulse.enable = true;
@@ -87,7 +103,7 @@
]; ];
extraRules = '' extraRules = ''
# Raspberry Pi Picoprobe # Raspberry Pi Picoprobe
SUBSYSTEM="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0666" # SUBSYSTEM="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0666"
''; '';
}; };
@@ -96,12 +112,6 @@
xserver = { xserver = {
enable = true; enable = true;
xkb.layout = "gb"; xkb.layout = "gb";
displayManager = {
gdm = {
enable = true;
};
};
}; };
}; };
} }

View File

@@ -0,0 +1,181 @@
{
config,
lib,
pkgs,
...
}: let
zfsCompatibleKernelPackages =
lib.filterAttrs (
name: kernelPackages:
(builtins.match "linux_[0-9]+_[0-9]+" name)
!= null
&& (builtins.tryEval kernelPackages).success
&& (!kernelPackages.${config.boot.zfs.package.kernelModuleAttribute}.meta.broken)
)
pkgs.linuxKernel.packages;
latestKernelPackage = lib.last (
lib.sort (a: b: (lib.versionOlder a.kernel.version b.kernel.version)) (
builtins.attrValues zfsCompatibleKernelPackages
)
);
in {
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
../common
(import ../../modules).leviathan
];
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = lib.mkForce latestKernelPackage;
boot.supportedFilesystems = ["zfs"];
networking = {
useDHCP = false;
hostName = "leviathan";
hostId = "abcd1234";
interfaces.enp1s0.useDHCP = true;
nameservers = [
"1.1.1.1"
];
firewall.allowedTCPPorts = [8000 8123 8095];
};
environment.systemPackages = with pkgs; [
helix
kitty # For terminfo
lazygit
];
containers.radarr = {
autoStart = true;
bindMounts = {
"/data" = {
hostPath = "/store/media";
mountPoint = "/store/media";
isReadOnly = false;
};
};
config = {
config,
pkgs,
lib,
...
}: {
services.radarr = {
enable = true;
user = "root";
group = "root";
};
system.stateVersion = "24.11";
};
};
services.openssh.settings.PermitRootLogin = "yes";
security.rtkit.enable = true;
users.groups."media".name = "media";
services = {
copyparty = {
enable = true;
settings = {
i = "100.64.214.3";
};
accounts = {
};
volumes = {
"/" = {
path = "/srv/copyparty";
access = {
rw = "*";
};
};
};
};
jellyfin = {
enable = true;
group = "media";
};
music-assistant = {
enable = true;
providers = [
"builtin_player"
"chromecast"
"hass"
"hass_players"
"soundcloud"
"spotify"
"spotify_connect"
"ytmusic"
];
};
pipewire = {
enable = true;
pulse.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
wireplumber.enable = true;
};
};
programs.virt-manager.enable = true;
virtualisation = {
libvirtd = {
enable = true;
allowedBridges = ["br0"];
};
oci-containers = {
backend = "podman";
containers.homeassistant = {
volumes = ["home-assistant:/config"];
environment.TZ = "Europe/Berlin";
image = "ghcr.io/home-assistant/home-assistant:2025.10.2";
extraOptions = [
# Use the host network namespace for all sockets
"--network=host"
# Pass devices into the container, so Home Assistant can discover and make use of them
"--device=/dev/ttyUSB0:/dev/ttyUSB0"
];
};
};
};
# systemd.services.libvirt-default-network = {
# description = "Start libvirt bridge network";
# after = ["libvirtd.service"];
# wantedBy = ["multi-user.target"];
# serviceConfig = {
# Type = "oneshot";
# RemainAfterExit = true;
# ExecStart = "${pkgs.libvirt}/bin/virsh net-start bridged-network";
# ExecStop = "${pkgs.libvirt}/bin/virsh net-destroy bridged-network";
# User = "root";
# };
# };
# systemd.services.libvirt-home-assistant = {
# description = "Start home assistant VM";
# after = ["libvirt-default-network.service"];
# wantedBy = ["multi-user.target"];
# serviceConfig = {
# Type = "oneshot";
# RemainAfterExit = true;
# ExecStart = "${pkgs.libvirt}/bin/virsh start hass";
# ExecStop = "${pkgs.libvirt}/bin/virsh destroy hass";
# User = "root";
# };
# };
system.stateVersion = "25.05"; # Did you read the comment?
}

View File

@@ -0,0 +1,67 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "zpool/root";
fsType = "zfs";
options = ["zfsutil"];
};
fileSystems."/nix" = {
device = "zpool/nix";
fsType = "zfs";
options = ["zfsutil"];
};
fileSystems."/var" = {
device = "zpool/var";
fsType = "zfs";
options = ["zfsutil"];
};
fileSystems."/home" = {
device = "zpool/home";
fsType = "zfs";
options = ["zfsutil"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/95BF-1B15";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [
{
device = "/dev/disk/by-partuuid/db6bcd05-29fb-470a-aeba-f9f2648564af";
randomEncryption = true;
}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -26,17 +26,29 @@
enable = true; enable = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
intel-media-driver intel-media-driver
vaapiIntel intel-vaapi-driver
]; ];
}; };
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
programs.niri.enable = true;
# programs.virt-manager.enable = true;
# users.groups.libvirtd.members = ["daniel"];
# virtualisation.libvirtd.enable = true;
# virtualisation.spiceUSBRedirection.enable = true;
networking = { networking = {
hostName = "pingbox"; hostName = "pingbox";
interfaces.wlp170s0.useDHCP = true; interfaces.wlp170s0.useDHCP = true;
}; };
environment.pathsToLink = ["/share/xdg-desktop-portal" "/share/applications"];
services = { services = {
fprintd.enable = true; fprintd.enable = true;
@@ -68,6 +80,13 @@
logind = { logind = {
lidSwitch = "suspend-then-hibernate"; lidSwitch = "suspend-then-hibernate";
}; };
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
printing.enable = true;
}; };
systemd.sleep.extraConfig = '' systemd.sleep.extraConfig = ''

View File

@@ -0,0 +1,346 @@
{
config,
pkgs,
lib,
...
}: let
mkVHost = baseUrl: {
service,
port,
}: {
name = "${service}.${baseUrl}";
value = {
listenAddresses = ["100.76.159.53"];
extraConfig = ''
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
}
reverse_proxy localhost:${builtins.toString port}
'';
};
};
mkVHosts = baseUrl: hosts: builtins.listToAttrs (builtins.map (mkVHost baseUrl) hosts);
zfsCompatibleKernelPackages =
lib.filterAttrs (
name: kernelPackages:
(builtins.match "linux_[0-9]+_[0-9]+" name)
!= null
&& (builtins.tryEval kernelPackages).success
&& (!kernelPackages.${config.boot.zfs.package.kernelModuleAttribute}.meta.broken)
)
pkgs.linuxKernel.packages;
latestKernelPackage = lib.last (
lib.sort (a: b: (lib.versionOlder a.kernel.version b.kernel.version)) (
builtins.attrValues zfsCompatibleKernelPackages
)
);
in {
imports = [
../common
./hardware-configuration.nix
(import ../../modules).ranni
];
boot.kernelPackages = lib.mkForce latestKernelPackage;
boot.loader.systemd-boot.enable = false;
boot.loader.grub = {
enable = true;
efiSupport = false;
devices = ["/dev/disk/by-id/ata-ST4000NM0245-1Z2107_ZC1A059L" "/dev/disk/by-id/ata-ST4000NM0245-1Z2107_ZC19X508"];
copyKernels = true;
};
boot.supportedFilesystems = ["zfs"];
boot.swraid.enable = true;
boot.kernelParams = ["boot.shell_on_fail"];
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver
vaapiIntel
];
};
networking = {
hostName = "ranni";
hostId = "00000001";
useDHCP = false;
interfaces."enp0s31f6" = {
ipv4.addresses = [
{
address = "95.216.12.238";
# Hetzner requires /32, see:
# https://docs.hetzner.com/robot/dedicated-server/network/net-config-debian-ubuntu/#ipv4.
# NixOS automatically sets up a route to the gateway
# (but only because we set "networking.defaultGateway.interface" below), see
# https://github.com/NixOS/nixops/pull/1032#issuecomment-2763497444
prefixLength = 32;
}
];
ipv6.addresses = [
{
address = "2a01:4f9:2a:d05::1";
prefixLength = 64;
}
];
};
defaultGateway = {
address = "95.216.12.193";
# Interface must be given for Hetzner networking to work, see comment above.
interface = "enp0s31f6";
};
defaultGateway6 = {
address = "fe80::1";
interface = "enp0s31f6";
};
nameservers = [
# cloudflare
"1.1.1.1"
"2606:4700:4700::1111"
"2606:4700:4700::1001"
# google
"8.8.8.8"
"2001:4860:4860::8888"
"2001:4860:4860::8844"
];
firewall = {
allowedTCPPorts = [80 8448 443];
allowedTCPPortRanges = [
{
from = 12500;
to = 12515;
}
];
allowedUDPPortRanges = [
{
from = 12500;
to = 12515;
}
];
interfaces = {
"tailscale0" = {
allowedUDPPorts = [41641];
};
};
};
};
services.tailscale.permitCertUid = "caddy";
services.syncthing = {
settings = {
gui = {
insecureSkipHostcheck = true;
};
};
guiAddress = "localhost:8387";
};
services = {
jellyfin.enable = true;
jellyfin.group = "media";
};
users.groups."media".name = "media";
age.secrets = {
caddy_porkbun_api_env.file = ../../secrets/caddy_porkbun_api_env.age;
danflix_hetzner_storage_box_pub_key.file = ../../secrets/danflix_hetzner_storage_box_pub_key.age;
danflix_rclone_config.file = ../../secrets/danflix_rclone_config.age;
};
services.sabnzbd = {
enable = true;
group = "media";
};
containers.radarr = {
autoStart = true;
bindMounts = {
"/data" = {
hostPath = "/var/media";
mountPoint = "/var/media";
isReadOnly = false;
};
};
config = {
config,
pkgs,
lib,
...
}: {
services.radarr = {
enable = true;
user = "root";
group = "root";
};
system.stateVersion = "24.11";
};
};
# containers.radarr-small = {
# autoStart = true;
# bindMounts = {
# "/data" = {
# hostPath = "/var/media";
# mountPoint = "/var/media";
# isReadOnly = false;
# };
# };
# forwardPorts = [
# {
# containerPort = 7878;
# hostPort = 7979;
# }
# ];
# config = {
# config,
# pkgs,
# lib,
# ...
# }: {
# environment.systemPackages = with pkgs; [
# ghostty
# helix
# ];
# services.radarr = {
# enable = true;
# user = "root";
# group = "root";
# };
# system.stateVersion = "24.11";
# };
# };
containers.sonarr = {
autoStart = true;
bindMounts = {
"/data" = {
hostPath = "/var/media";
mountPoint = "/var/media";
isReadOnly = false;
};
};
config = {
config,
pkgs,
lib,
...
}: {
services.sonarr = {
enable = true;
user = "root";
group = "root";
};
system.stateVersion = "24.11";
};
};
containers.lidarr = {
autoStart = true;
bindMounts = {
"/var/media" = {
hostPath = "/var/media";
mountPoint = "/var/media";
isReadOnly = false;
};
};
config = {
config,
pkgs,
lib,
...
}: {
services.lidarr = {
enable = true;
user = "root";
group = "root";
};
system.stateVersion = "24.11";
};
};
services.prowlarr = {
enable = true;
};
services.caddy = {
enable = true;
enableReload = false;
environmentFile = config.age.secrets.caddy_porkbun_api_env.path;
package = pkgs.caddy.withPlugins {
plugins = ["github.com/caddy-dns/porkbun@v0.3.1"];
hash = "sha256-sa+L2YoTM1ZfhfowoCZwmggrUsqw0NmGWRK45TevxFo=";
};
logFormat = "level INFO";
virtualHosts =
(mkVHosts "broccoli.town" [
{
service = "radarr";
port = 7878;
}
{
service = "sonarr";
port = 8989;
}
{
service = "sab";
port = 8085;
}
{
service = "lidarr";
port = 8686;
}
])
// {
"http://ranni:8085" = {
listenAddresses = ["100.76.159.53"];
extraConfig = ''
reverse_proxy localhost:8085
'';
};
"http://ranni:8384" = {
listenAddresses = ["100.76.159.53"];
extraConfig = ''
reverse_proxy localhost:8387
'';
};
"movies.danielpatterson.dev" = {
extraConfig = ''
reverse_proxy localhost:8096
'';
};
"git.broccoli.town" = {
extraConfig = ''
reverse_proxy localhost:3030
'';
};
};
};
environment.systemPackages = with pkgs; [
helix
kitty # For terminfo
lazygit
];
system.stateVersion = "24.11"; # Did you read the comment?
}

View File

@@ -0,0 +1,58 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["ahci" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "root_pool/root/nixos";
fsType = "zfs";
};
fileSystems."/home" = {
device = "root_pool/home";
fsType = "zfs";
};
fileSystems."/var/lib/postgres" = {
device = "root_pool/postgres";
fsType = "zfs";
};
fileSystems."/var/media" = {
device = "root_pool/media";
fsType = "zfs";
};
fileSystems."/boot/efi" = {
device = "/dev/disk/by-uuid/555A-CAFA";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eth0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.swraid.enable = true;
}

View File

@@ -38,11 +38,22 @@
wlr-randr wlr-randr
]; ];
specialisation = {
niri.configuration = {
programs.niri.enable = true;
};
plasma.configuration = {
boot.loader.systemd-boot.sortKey = "default";
services.blueman.enable = false;
services.desktopManager.plasma6.enable = true;
};
};
security.pam.u2f = { security.pam.u2f = {
enable = true; enable = true;
}; };
hardware.opengl.enable = true; hardware.graphics.enable = true;
networking.hostName = "sidon"; # Define your hostname. networking.hostName = "sidon"; # Define your hostname.

View File

@@ -0,0 +1,58 @@
{
pkgs,
config,
...
}: {
age.secrets = {
pingbox_backup_s3_creds.file = ../../../secrets/pingbox_backup_s3_creds.age;
pingbox_backup_repo_password.file = ../../../secrets/pingbox_backup_repo_password.age;
};
services.restic.backups = {
"system" = {
initialize = true;
passwordFile = config.age.secrets.pingbox_backup_repo_password.path;
timerConfig = {
OnCalendar = "daily";
Persistent = true;
RandomizedDelaySec = "15m";
};
repository = "s3:s3.eu-central-003.backblazeb2.com/pingbox-backup";
environmentFile = config.age.secrets.pingbox_backup_s3_creds.path;
progressFps = 0.1;
paths = [
"/etc/ssh"
"/etc/NetworkManager/system-connections"
"/home"
"/var/backup"
];
exclude = [
"/home/*/.cache"
"/home/*/.local/share/Trash"
"/var/cache"
"/var/tmp"
"/home/*/.nix-profile"
"/home/*/.nix-defexpr"
"/home/*/.rustup"
"/home/*/.cargo/registry"
"/home/*/.cargo/git"
"/home/*/.npm"
"/home/*/.bun"
"/home/*/.hex"
"/home/*/.go/pkg"
"/home/*/.android/avd"
"/home/*/.steam/root/steamapps"
"/home/*/.local/share/Steam/steamapps"
"/home/*/.steam/steam/steamapps"
];
backupPrepareCommand = ''
'';
};
};
}

View File

@@ -2,16 +2,12 @@
log { log {
level ERROR level ERROR
} }
admin off # admin off
servers { servers {
metrics metrics
} }
} }
http://localhost:2019 {
metrics /metrics
}
matrix.broccoli.town { matrix.broccoli.town {
reverse_proxy /_matrix/* http://localhost:8008 reverse_proxy /_matrix/* http://localhost:8008
reverse_proxy /_synapse/client/* http://localhost:8008 reverse_proxy /_synapse/client/* http://localhost:8008
@@ -25,26 +21,56 @@ broccoli.town:8448 {
reverse_proxy http://localhost:8008 reverse_proxy http://localhost:8008
} }
broccoli.town { radarr.broccoli.town {
header /.well-known/* "Access-Control-Allow-Origin" "*" bind 100.91.249.54
respond /.well-known/matrix/client `{ "m.homeserver": { "base_url": "https://broccoli.town" } }` tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
}
reverse_proxy /_matrix/* http://localhost:8008 reverse_proxy http://localhost:7878
reverse_proxy /_synapse/client/* http://localhost:8008
redir / https://chat.broccoli.town
} }
chat.broccoli.town { sab.broccoli.town {
header { bind 100.91.249.54
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1; mode=block" tls {
X-Content-Type-Options "nosniff" dns porkbun {
X-Robots-Tag "noindex, noarchive, nofollow" api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
} }
root * @element@
file_server reverse_proxy http://localhost:8085
}
sonarr.broccoli.town {
bind 100.91.249.54
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
}
reverse_proxy localhost:8989
}
transmission.broccoli.town {
bind 100.91.249.54
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_SECRET_KEY}
}
}
reverse_proxy localhost:9091
} }
danielpatterson.dev { danielpatterson.dev {
@@ -69,19 +95,14 @@ git.broccoli.town {
} }
http://bigding:8384 { http://bigding:8384 {
bind 100.91.249.54
reverse_proxy localhost:8387 reverse_proxy localhost:8387
} }
bigding.squirrel-clownfish.ts.net {
tls {
get_certificate tailscale
}
reverse_proxy localhost:9091
}
http://bigding { http://bigding {
reverse_proxy /transmission localhost:9091 bind 100.91.249.54
reverse_proxy /transmission/* localhost:9091
handle_path /prometheus/* { handle_path /prometheus/* {
reverse_proxy localhost:9090 reverse_proxy localhost:9090
} }

View File

@@ -1,36 +1,20 @@
{ {
pkgs, pkgs,
lib, lib,
config,
... ...
}: { }: {
networking.firewall.allowedTCPPorts = [80 8448 443]; networking.firewall.allowedTCPPorts = [80 8448 443];
services.tailscale.permitCertUid = "caddy"; services.caddy = {
package = pkgs.caddy.withPlugins {
services.caddy = let plugins = ["github.com/caddy-dns/porkbun@v0.2.1"];
catppuccin = builtins.fromJSON (builtins.readFile (pkgs.fetchurl { hash = "sha256-X8QbRc2ahW1B5niV8i3sbfpe1OPYoaQ4LwbfeaWvfjg=";
url = "https://raw.githubusercontent.com/catppuccin/element/main/config.json";
hash = "sha256-jaH6E2YO2np3Ewv6JQWbGRiRqsL75rIEJuKfXv95W6Y=";
}));
element = pkgs.element-web.override {
conf =
{
default_server_config."m.homeserver" = {
"base_url" = "https://broccoli.town";
"server_name" = "broccoli.town";
};
}
// catppuccin;
}; };
config = pkgs.substituteAll {
inherit element;
src = ./Caddyfile;
};
in {
enable = true; enable = true;
configFile = config; enableReload = false;
adapter = "caddyfile"; adapter = "caddyfile";
environmentFile = config.age.secrets.caddy_porkbun_api_env.path;
configFile = ./Caddyfile;
}; };
} }

View File

@@ -2,7 +2,7 @@
bigding = { bigding = {
imports = [ imports = [
./backups/bigding ./backups/bigding
./caddy # ./caddy
./dungflix ./dungflix
./fail2ban ./fail2ban
./gitea ./gitea
@@ -24,5 +24,16 @@
sidon = {}; sidon = {};
pingbox = { pingbox = {
imports = [
./backups/pingbox
];
}; };
ranni = {
imports = [
./gitea
];
};
leviathan = {};
} }

View File

@@ -4,26 +4,15 @@
... ...
}: let }: let
mountdir = "/var/media/danflix"; mountdir = "/var/media/danflix";
rclone_config = pkgs.writeText "" ''
[danflix-storage-box]
type = sftp
sftp_md5sum_command = md5sum
sftp_sha1sum_command = sha1sum
[danflix-crypto]
type = crypt
remote = danflix-storage-box:danflix
'';
in { in {
age.secrets = { age.secrets = {
danflix_storage_box_crypt_obscured_pw.file = ../../secrets/danflix_storage_box_crypt_obscured_pw.age;
danflix_hetzner_storage_box_pub_key.file = ../../secrets/danflix_hetzner_storage_box_pub_key.age; danflix_hetzner_storage_box_pub_key.file = ../../secrets/danflix_hetzner_storage_box_pub_key.age;
danflix_env_file.file = ../../secrets/danflix_env_file.age; danflix_rclone_config.file = ../../secrets/danflix_rclone_config.age;
}; };
services = { services = {
jellyfin.enable = true; jellyfin.enable = true;
jellyfin.group = "media";
transmission = { transmission = {
enable = true; enable = true;
@@ -55,7 +44,7 @@ in {
"RCLONE_SFTP_KEY_FILE" = config.age.secrets.danflix_hetzner_storage_box_pub_key.path; "RCLONE_SFTP_KEY_FILE" = config.age.secrets.danflix_hetzner_storage_box_pub_key.path;
}; };
script = '' script = ''
${pkgs.rclone}/bin/rclone --config="${rclone_config}" mount danflix-crypto: ${mountdir} \ ${pkgs.rclone}/bin/rclone --config="${config.age.secrets.danflix_rclone_config.path}" mount danflix-union: ${mountdir} \
--vfs-cache-mode full \ --vfs-cache-mode full \
--vfs-cache-max-age 336h \ --vfs-cache-max-age 336h \
--vfs-cache-max-size 60G \ --vfs-cache-max-size 60G \
@@ -70,14 +59,13 @@ in {
''; '';
postStart = '' postStart = ''
sleep 5 sleep 5
${pkgs.rclone}/bin/rclone --config="${rclone_config}" rc vfs/refresh recursive=true _async=true ${pkgs.rclone}/bin/rclone --config="${config.age.secrets.danflix_rclone_config.path}" rc vfs/refresh recursive=true _async=true
''; '';
postStop = '' postStop = ''
sleep 3 sleep 3
${pkgs.fuse3}/bin/fusermount -u ${mountdir} ${pkgs.fuse3}/bin/fusermount -u ${mountdir}
''; '';
serviceConfig = { serviceConfig = {
EnvironmentFile = config.age.secrets.danflix_env_file.path;
Restart = "on-failure"; Restart = "on-failure";
}; };
}; };

View File

@@ -9,24 +9,6 @@
owner = "gitea"; owner = "gitea";
group = "gitea"; group = "gitea";
}; };
gitea_actions_runner_token = {
file = ../../secrets/gitea_actions_runner_token.age;
};
};
services.gitea-actions-runner = {
instances = {
primary = {
enable = true;
name = "actions-runner";
url = config.services.gitea.settings.server.ROOT_URL;
tokenFile = config.age.secrets.gitea_actions_runner_token.path;
labels = [
"ubuntu-latest:docker://node:16-bullseye"
];
};
};
}; };
services.gitea = { services.gitea = {
@@ -38,7 +20,7 @@
dump = { dump = {
enable = true; enable = true;
type = "tar.zst"; type = "tar.zst";
file = "gitea.zip"; file = "gitea.tar.zst";
backupDir = "/var/backup"; backupDir = "/var/backup";
interval = "01:30"; interval = "01:30";
}; };
@@ -46,6 +28,7 @@
server = { server = {
ROOT_URL = "https://git.broccoli.town/"; ROOT_URL = "https://git.broccoli.town/";
HTTP_PORT = 3030; HTTP_PORT = 3030;
HTTP_ADDR = "127.0.0.1";
DOMAIN = "git.broccoli.town"; DOMAIN = "git.broccoli.town";
}; };
service = { service = {
@@ -64,9 +47,6 @@
SMTP_PORT = 587; SMTP_PORT = 587;
USER = "apikey"; USER = "apikey";
}; };
actions = {
ENABLED = true;
};
}; };
mailerPasswordFile = config.age.secrets.sendmail_email_key_gitea.path; mailerPasswordFile = config.age.secrets.sendmail_email_key_gitea.path;
}; };

View File

@@ -7,7 +7,7 @@
fqdn = "matrix.broccoli.town"; fqdn = "matrix.broccoli.town";
in { in {
services.postgresql = { services.postgresql = {
enable = true; enable = false;
package = pkgs.postgresql_16; package = pkgs.postgresql_16;
ensureUsers = [ ensureUsers = [
]; ];
@@ -20,7 +20,7 @@ in {
}; };
services.matrix-synapse = { services.matrix-synapse = {
enable = true; enable = false;
settings = { settings = {
enable_metrics = true; enable_metrics = true;
server_name = "broccoli.town"; server_name = "broccoli.town";

Binary file not shown.

View File

@@ -1,18 +1,17 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 eYYv1Q p2lKm8m7/Kqkcv2OAa1QJ30SmpMRcPE2JIVVMMAapyI -> ssh-ed25519 eYYv1Q oXddewWnllLv73h4eMljoP35QKuQ1rUsAMoE6tu8XTg
rxFk8qX5U2tFVMOnC5bwPbkn67DbZ+rrx4577/2YN3o zgoOxEdZQ7feixPSzcLWKS5T+23wfGrCSr19s891sJc
-> ssh-ed25519 Bp5IaA B4MihkBHyFOLAoTCrma189xstle91PIP1llXfcXw/xA -> ssh-ed25519 Bp5IaA NxT+LEXxDV++CYL973CsB2Tt2pBFjkvs6kOnxmHQ+AQ
EtOgYylN6wGcOzeXGd+t4rMAtwuzAJPsXU2EorBGKMw AH1OmpmY899Ov3j4texm96/tIIxCYzdtb/HoZ1pXVuk
-> ssh-ed25519 T/DpgA B7QEsjY0SXgZLD9Tlzy1JcZXVLX6OOnXosgTOtsisRw -> ssh-ed25519 T/DpgA FgKrOJEI+YlBfxagb9YOu1feBXtZvGUnescAP5pKITA
yzanbQl1c1gBXToGO3trFiAYjj4XJPg/X2U5RdxRXrU FAvD1d87Ne66a75LmkEIUG7UKV6bIsRs4an8IFeh3MQ
-> ssh-ed25519 qMgRFg WsKoCC0piMrxNzlcYRFDqpSDOULXCSY9ymBhHjfwyj0 -> ssh-ed25519 qMgRFg Q5VNMErDZucmpQnLDKzssklxNpaGXBN4pfEOiheFL2Y
f4+/oTEqO2Fx8/O1rKy+1aGw2uatIJNpZFCwz8f9WAw cN4D/lzi44MdP5IsWG8o0fB5a06FCuJ8fUyF7fHLAao
-> ssh-ed25519 dMZXNw 1jYYtlUP/8no2KjB5No9aIPQwm1u+6ySv+tYdIn0W2I -> ssh-ed25519 dMZXNw qqUxq8I5jwKflFaLQ3T2qyIM2eQKTTMxIqg+hmTYsXU
mvDqK645jo7zPjRLuhCyy9nz7GAK+LVa/6Er5yfuPKQ ezU+fnbRxzkwu1ws7YwYU+ZLERGeiqIXyBZPe786RaE
-> ssh-ed25519 70Nt2Q ux4w1776iy3VxBmjGQKA+3Y14FJ8ByGhaGpezPMdrlk -> ssh-ed25519 +shbwg uIAE/ULfFSDjeCdw3Cfk/sov6prSBTsBT8SY7XHQhDU
iWTL1amQzDBzKRM4mKY2wOgdDwi1OhwNAY7raSesFx8 umVDIXt7lDjUYMszoi2ti48la1Hqh3LfKgfXwx2rH8I
-> \7].}^Ee-grease lKlBD]z~ @ pzb#Y -> ssh-ed25519 70Nt2Q kyQVdOCOGR/IFyG67cQQyH2j3YPv8R5Y5JNb09XFuwU
KUqMwST0vaSIY314aYy2zXzCHzMOzbJT4v3yQltQ1UgmmgfFgbYUKTBfqKICcfFx 5mUcmoAiO3XgZXxHTqRg02IBz9eejCYro6O07uoflQc
Y3zNnJGXadK8fP2z8phy --- 3y+/TDRrG+APpNJSBYzci5s2WtjUHsc8lGvtISn/gcg
--- +s2dxNBUCXWaM/gHSDOnaOTDnC0IXTdz79lIdmuDE68 <EFBFBD><4A>f<EFBFBD>8uBj<42>F <0C>yU<79><55>W<EFBFBD>ZĆC<C486><43><EFBFBD>5M<>5S<35><69>ߎ*<1B>S<1B>/<10>
&<26>d<EFBFBD>>ϼ*\ZA<5A><41><EFBFBD><EFBFBD>1=<3D><><EFBFBD><EFBFBD><EFBFBD>w<>?Y<><16>n

Binary file not shown.

View File

@@ -0,0 +1,19 @@
age-encryption.org/v1
-> ssh-ed25519 eYYv1Q mCtMgzmP7HxB46ER6twUtUi3SJKK66DHQP77otrg2XU
sTXftZwgeZk+KDP/l5fXR9Og/3AcYPLGBg1AzuVxkRw
-> ssh-ed25519 Bp5IaA czaqh5ZgiSd4h2Oe3PNIfDwsPWVft8ZP1Cc6o7fTRU0
bQ6r4M37tDjhD4s9LcPonsmbLlU/cgO7nSQrUi+rUSk
-> ssh-ed25519 T/DpgA v1wZ6YO0cwtuN1mrxW8/axRKpAPa+V5g79KNMxrELWU
MS6NZMHViOzib4RT06Bz3TgL+/gJk/hUzdzMljqJhKQ
-> ssh-ed25519 qMgRFg BCzcZk3UlZV1EQQtP/na+Ed8lQ2mFKFIA29zX2Wsw3k
psdMhWStulJ+heqvyFER4zpuXp8i84PJIJWZnKlEvrs
-> ssh-ed25519 dMZXNw VabNLOAFFZK5bNzQ85co2/7NNHal5SjhktCWLoWWznY
hHB671B0Q5gqktZ7BTq4Ny+KUXZ1EHQGuffzusJVSPI
-> ssh-ed25519 +shbwg UfJ2qk6tN65rOiSUIATVbPYD+kDCrJVKMrZBSeOtqlI
2CVDA0/ag1PS8ANLRXQ1WvX5Nzd8FLM7d4qX+jXCsZ8
-> ssh-ed25519 70Nt2Q ambd6Z2wkhMxyCFAuFZjtp+QSMPyeSrfyACJlxTh7EQ
ONURlDlrO9bdnCFm+We0733DgKBhfUyZRXwIOS5Jed8
-> ssh-ed25519 YAvvLw RWhx1m4FF5mMfx41RkatBH9HfBFcWCXTkmWCHGCWk2c
lKmFwwsqtF0lL+EIDzwUW+P+gqEi/d4fd+qQZ5P8A1g
--- FcmYlyW5nSD7yAY0lJYWnemJZIujuy0yRK25GJcG1M4
<0B><><EFBFBD>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,17 @@
age-encryption.org/v1
-> ssh-ed25519 eYYv1Q MOnAF1gIBzvuitiC6Nw4/SJppyOQff9j4gHPAcKmO1o
+G3RsKGN09DVOmQ7ma4lRoRFiYYCiCY2WoV6l5JKucM
-> ssh-ed25519 Bp5IaA 1ftyP4x5WfRsZvOVYLUpiR5Q1hQgRU78j0Yuwv07OGw
wtVAKEglVVu9B1yQwBp4AutzjDiTAAHbsrJJSMQPjLI
-> ssh-ed25519 T/DpgA x/1vUD1VHZYBWwXzBO4c7P6WtLkTYu6KD8RglBtrsl8
PRM6akgeJ64OHBV94jLojVJlHjwWiv0tLpJF2QnqXX4
-> ssh-ed25519 qMgRFg fBlwYeWq+XwRgOclr/IK18QHbdwXr0kD+/b9HnQZ2yY
52mokhUVu1AjcHBrWvJ3AS8Zr4o19ijhHxdo+tYQiuk
-> ssh-ed25519 dMZXNw SobQAY/O2iJ4MKMtbDXyDEbwQpTvuoKvG8UKYWoEEF8
eueMl+WoEMJOUSJ9hnt80w4lZXiWxPNJ1jXtGudFXVQ
-> ssh-ed25519 +shbwg 0EPWn6B2GVHrw/eXWC9ugGIDFvXSCPfhFrg5F8GgeEA
ql8+axPwSj9eQuGp4J9UjuK70TZqGsCXhFSczsQQUg8
-> ssh-ed25519 RD8X/A nZXLx5Ujbu+h+odPK5kpLJUlegn117xQSEdiEDHWx14
O/ftoh0wTit0RvlW+176vTE8r7yIrXK8GfL81pn1epk
--- G1sqmtJfli22DKFmP90EzmGJNqkcxeFQlQ3WskR9dkQ
<EFBFBD><EFBFBD>.<2E><><EFBFBD><14>D<<3C><>Q(JA<4A>}qOZ<4F><5A><EFBFBD>+t<>D<EFBFBD><44>im<69>]<5D>ޛj4<10>ڿ @s (EfF<18><>4#<23>dnޠ<6E><DEA0>4<EFBFBD><34><EFBFBD>n<EFBFBD>4eL{

View File

@@ -0,0 +1,18 @@
age-encryption.org/v1
-> ssh-ed25519 eYYv1Q 4CKDsgu9sWc8ndynGaeVn5pGi00Q7MH1d10B+u/y6V4
xoV29lRzNuiuUGb53LmAEtLAZqVPuasHhkAsYDV1vHI
-> ssh-ed25519 Bp5IaA T/KQa0GccaU4+VWz6RkaJYy+xW64TtTrWmwTZaQhnSs
M6Xeo00CnoTS2S0fxro3cR1jmMhhAgRYkUBvERVPDdg
-> ssh-ed25519 T/DpgA RXD/DvpKiRAroiIHzeGvEvxu0Wqo9OTVEzGb7rALhQQ
QMLi3YvEgcQnX3wbdvOMepxFFv8fVYV6gAT9xDgtlZk
-> ssh-ed25519 qMgRFg gRd/ujAUy3cwfhOxqPG43g78C0JoanVeuTNgqkWdrGQ
6jrqVbZVnJjfLt9Gty2W46uAXe1I1zRB8hZUYlT4f4U
-> ssh-ed25519 dMZXNw Hi5EgfUVrLKEDk1X0dKw/E45wPnp/8m3AArlx6uVMAE
cFNiWQc7l08OmyB92WEAiJBq81EwXrBahPF0Obra+iU
-> ssh-ed25519 +shbwg HHQj8eV9/oX9bPfhdHGNqIs+/0PpdHZaqOtbddKqEV4
cWja5Ik+cqWZEprdNsdYQX4bBLIr0SSlIvIq7E1Swa4
-> ssh-ed25519 RD8X/A S0Ye1A3tg4oJxVOFYl7FCnx0M1WxV+KUYT2iJHvL7mA
9eEP5uRWpkIfpnhzaAyYnXn7Mh6VlqsBVfbp+ojPOfk
--- t8POWURQ6sCpE3t9cG6EdGlp4kymFepstZYyj07JWnI
<EFBFBD>pj<EFBFBD><EFBFBD>t<EFBFBD>sr<><1E><><EFBFBD>T<EFBFBD><54>W<EFBFBD>PM<50><4D><EFBFBD><EFBFBD>]<0E><17><><EFBFBD>Nd7<64>&`<60><>bCɴ
u<EFBFBD>a<EFBFBD><EFBFBD>)c9d<39><64>j<17>dɬK<C9AC><4B><EFBFBD>i@L<><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<1D>`<60><>S<EFBFBD>zs<><73><EFBFBD>|<7C><>C0pG<70><13>.Ǭx<C7AC>e.<2E><>j

View File

@@ -1,20 +1,21 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 eYYv1Q 6I/C6kd0F8pPX1bIZ8f5ZTyddBqnLz835S/Q3o4ocVE -> ssh-ed25519 eYYv1Q 6vOBCYYulq/yMgZcE4pKNSWpkO615wAyBqCDcCvS7Qc
/dhM7FwPWEzyQCcUCw0CdCyt1J5oz0Ly7em7yZGxs2k rX/Kw5qtZFSpAncxWVhG/LUzFuFiuEOuHcYUdBfkst8
-> ssh-ed25519 Bp5IaA bnm7aVEatMbr76zpxqUCyCzEqn9ArmdwkjteA+auAQc -> ssh-ed25519 Bp5IaA EtR1cN2DPBgy+r6hpat+jKSisbdCuLRm1gTLDE1KM0c
pLVxYtYdBVeCp3dMp9LTTLX/CLDUyBAv23hi7Aj4pD8 EVaQdf804QSqpAXrV82kL2XwHmqNXihLT42bzv5uIVo
-> ssh-ed25519 T/DpgA mE97Fpws6KenlNQ8Hs/Csi0dY4GvB0z8LcwCmsM7PDA -> ssh-ed25519 T/DpgA nKRA3fgCa2+8SdLVqI4m6untb8aBlAuNf3zKJmQBAkY
N9Ap8u8qeeukvDM30pxwRok+pjs5i9Z/lQylOkaNTAs MEd6efWFuqUtDJPDBgZqkTG2neZQZwA5HzIC7uElyIU
-> ssh-ed25519 qMgRFg G0qEsVQNj0Z7rCglx81fmUr09AGbjJpgxW9UWmjGZh4 -> ssh-ed25519 qMgRFg sAuPesGJ54EnRowUbFhAPRgOQxDr/TBPyqsJNcJ3j0A
sgLx9+u+JAP9dH0F+xptRUQWJxRzL0ACTW/fbxyJ9ZE DgEouiS8UjzAaQSVKFDObfxM0WijQtCQLzsSu7pFRwM
-> ssh-ed25519 dMZXNw 8OuNPpD/GBa/UnxLTyTbiH02GTl+ZgL2/X9m8fR/FHg -> ssh-ed25519 dMZXNw DBchChRMA5hszqtjJvwvsNGZk9Z0HlvmNHMdx+OFVV4
M+Qaldh0wGRFO4kiNyuw/ui0LsaNBqORfmbbuPFQcpA U+LIDwbuKFGvuULEDuOPhyiTIcEjwpY9EA+HBes/Y6o
-> ssh-ed25519 GzHGXw jNvSCxiYW4psZhdiFk36jXQigcFijAqfhjSi0YUT6y4 -> ssh-ed25519 +shbwg hgFratZl3KxZDK08F1CWIMv7JwlDVNIByMAG/JJbjyI
SqHCmEEUseX8XjOEH/QdFi8jX/6DyNGgm6yOHf5tEJM YBnnlVasOTVYJmes/vchGK9FEWLGe/SS4ZHdwGcE79k
-> ssh-ed25519 70Nt2Q D9lDPhjAJ6ntkg2VAys7MU3honDEAFzk+n3FPsjoARs -> ssh-ed25519 GzHGXw lHxuRl5gM+DPABDkiDhaArSgRFkNWV4qbsa+0HGzKU0
8F4p2DcD/JyxKZuzLMuuumY+0yAQjsAQfQhqvtbn/CY 8nZbH5sJI6CGFD7K51xJ2MKr8DHqRrGEe+lQVH4plWY
-> j6O-grease v A$M= -> ssh-ed25519 70Nt2Q 45n/rUffOJu3bzrTBymPToB8aTXcvQWOeFPVmLzB9WY
l9GAg+AXTZEc44390C60kR5df+XK283KeRlPR+JAthfe7MvF/NJ4cqF5TlqZo0AU QyewneIRy7KXqCXWZpzt9bTL65dtM41BPDx8bedZcUU
AHmkD0k --- LWbHHVWdceA60roQicg72sJxBWPNvu4s8K1WNcorMpU
--- mUKNXFOZ36jA7vuAB+7CbAVrV6lYuUeKnOt8TJz/QR8 <EFBFBD>CP? ̮<>Dͳ˚<CDB3>V<EFBFBD><56>d<EFBFBD>{<16>-<2D><> <0C><>fk9<6B><39>"<22><>٢'<27>\<5C>#̊<>eN`Ẉ
<EFBFBD><EFBFBD>Ė:<3A>1<EFBFBD><11>&9İ<39><C4B0>-<15><>?<3F><>4.<2E><><EFBFBD> <0B>!ex<><78>I<EFBFBD>%<25>j<EFBFBD>O<EFBFBD> C5e%p<>N<EFBFBD>I<18><><EFBFBD>G<EFBFBD><47><EFBFBD><10><><EFBFBD>;<3B><><EFBFBD>`6 <EFBFBD><EFBFBD><03>.1<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>z<07><>

View File

@@ -1,20 +1,19 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 eYYv1Q LZwJmlO0K8OZBQcBp2KiirS6dOi0MI4QL3KZJAbSlSA -> ssh-ed25519 eYYv1Q x9YHnQrHk/+xuNB3Dgds2YXl6snJw0BF/vy7h6+0USk
VN9IF2McXP7T576+HMnC/H8rBQPeuiFViCXKYVTYGxM b3VaHkqpDOJlAahOx6zaKLaTouJqJ45tubz/jf05s38
-> ssh-ed25519 Bp5IaA V9hkpjVVQlfB7jHbxHWcrDtXBAFsQdZM+wq8XB8hrHM -> ssh-ed25519 Bp5IaA Vz/hj6Ghlec3tRUY5tZ3is/uE+AT9GMPl93o0LppBiw
40DsgVRpRxwnhTuc+KY9W5DAP2er4f4gwUS3XFSsP1Y guTE7llA2Y4MT+v6bHT7nmqrKdxDeyvAdJMfbk4aUXM
-> ssh-ed25519 T/DpgA YyovZ4r5p2Y0b0YMB3ybtj7RGa6YJIaCQvS4N8ACy30 -> ssh-ed25519 T/DpgA tWDjI6k2AcEFPqX8K4Zwf5jtpvRDDCVSM4g+12cZOEI
bdWFxWQcgIbNspUSwtiytErZ105fQtvTmNazsprzVpU bqq3UGc0tHm0OO8Y+rmUX38iN685BKz0F719DZo/plA
-> ssh-ed25519 qMgRFg I3+nfZVN7qNUUDpoLt7/lrlhH1dacQAoMyTeLbypD1s -> ssh-ed25519 qMgRFg fRuc+LYFQnHG9zhu6uK4aGdWu/crjXl27tnTE98bLiA
SJspcVYfX6HuRH9lsAsnt8FR/n3J99Bax1dj/CC4dnA JFkTAqDWygs8UXnYeZ05MXJ35lgtRy4LTOLLS0STkXQ
-> ssh-ed25519 dMZXNw 8rZ8Z/3IM9mkI2K/SuHsga96jsZ50Mw1nGiR3IGQVwc -> ssh-ed25519 dMZXNw sdLzOdQ7R+0AFpjb3CSH2djvdT7qedS1io7LxcbHeCM
CDzSdHl+xQktP8p5enfaKS9zxJaTdf6YcgXbVbQMrmc tPWjCR+sim3lJmIBbRBdjZ/5WCQWZ5OlMA8Rere2GHY
-> ssh-ed25519 GzHGXw dP0X4HBhvAMw+6JoA0jT76jyjyykrzHwSvYub6Rskmg -> ssh-ed25519 +shbwg JzFxfwYd2EHJklt1edx21IKPkBwNIEXekVPm0CtFTXw
2wgzuGKxv8SFz1DrMfAsHcvtprOqWEo8mporTPwhrVE SVYAq6wZm+HqL+zRLkkQETaUrgaq6UCKmai1+AIQ2mU
-> ssh-ed25519 70Nt2Q 5FfUOwKURR9Zv/uXaqWDzQF7Ms0xkdINA1Rz02tZ4Cs -> ssh-ed25519 GzHGXw G8XbVaclLKQmpg0rcz5NjJoREpBqkfZSIJ1BXmUOwQ0
+MqPawyZvwCZUEcN2/5nZt/Zwf59jm8h0BFsHyWUX9k xNwiO1Mo6WdfCEgAYtUHbC9oRhaKzXCuARazCHc93gU
-> n<90Kr$R-grease 2 -> ssh-ed25519 70Nt2Q WNZK+p/no7glfDohKMmi6fGXC2TikrnyvvkvBORRXyw
uQ51BhliS5bfdIO2YS68nlf4lS5oVSfqXFIGoVhHO0cwuh6cckL4aqNim/S3uNRf 7Gu0e2jzECq21S8djgW1YRTK98EmU03Gk0cRtF0/pgo
/J/a482wMBY2gchhnG2qyhH/UF8 --- 14oASxLoERqbPTjBVECRCgo6bTG5MXb1WR5NTGB41UU
--- 3UkEGyyoK/ejTo6/0rB8BvzBt0P/JnqubGZUIIjF+eY <EFBFBD>.ÝVi<11><>f\<5C><>7<EFBFBD><14>Z<EFBFBD><5A>i <09><07>rVayZ"<22>p<EFBFBD>Խ<EFBFBD>fp<66>a<18><><EFBFBD>ji<08><><EFBFBD>
<EFBFBD>A9Q}<>[<5B><><EFBFBD><EFBFBD><EFBFBD>,Hf<>-<2D>{^<5E><>@^<5E><><EFBFBD><EFBFBD>nb@<40><><EFBFBD><EFBFBD>C<EFBFBD><43>#d<>}X1<58><31><EFBFBD><EFBFBD>n<EFBFBD>+

View File

@@ -4,7 +4,8 @@ let
user3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP0Ps8eEFIkLe863bisGvSIVXZqedp9z5AC8RKyvZtcA me@danielpatterson.dev"; user3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP0Ps8eEFIkLe863bisGvSIVXZqedp9z5AC8RKyvZtcA me@danielpatterson.dev";
user4 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOjVwYfjyZ7kd7idwfGNtS62VKAc34WIsjQvypMe0d8N dingserver"; user4 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOjVwYfjyZ7kd7idwfGNtS62VKAc34WIsjQvypMe0d8N dingserver";
user5 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZKWq5v1xkK2d7D4lmwDKjdAHbWd+agXQCuMyjkzDEh daniel@dingserver"; user5 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZKWq5v1xkK2d7D4lmwDKjdAHbWd+agXQCuMyjkzDEh daniel@dingserver";
users = [user1 user2 user3 user4 user5]; user6 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIISn5FKNwsQtesuWbxSu8k+3o5inlDphDahq8URyGxzc daniel@ranni";
users = [user1 user2 user3 user4 user5 user6];
# dingbox # dingbox
system1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKvWmwFd0xZcF0HcyhmemvT5Q8rHOW/fQ56IoLSVAljv root@nixos"; system1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKvWmwFd0xZcF0HcyhmemvT5Q8rHOW/fQ56IoLSVAljv root@nixos";
@@ -14,7 +15,9 @@ let
system3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzy0KqakqljVqgA4lvfTt65cikgPOKFvBXF0WS0LxGP root@pingbox"; system3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzy0KqakqljVqgA4lvfTt65cikgPOKFvBXF0WS0LxGP root@pingbox";
# bigding # bigding
system4 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINxzzoExkmb0kP+6OS2omcoa8xe1ETc+FAhU5gBuBUDR root@bigding"; system4 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINxzzoExkmb0kP+6OS2omcoa8xe1ETc+FAhU5gBuBUDR root@bigding";
systems = [system1 system2 system3 system4]; # ranni
system5 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8aTDf4ue+ug3acFaN/3oU2UddC2WKFdj/QV/78b5jB root@ranni";
systems = [system1 system2 system3 system4 system5];
in { in {
"rclone_password1.age".publicKeys = users ++ [system2 system4]; "rclone_password1.age".publicKeys = users ++ [system2 system4];
"rclone_password2.age".publicKeys = users ++ [system2 system4]; "rclone_password2.age".publicKeys = users ++ [system2 system4];
@@ -26,10 +29,14 @@ in {
"minisign_private_key.age".publicKeys = users ++ [system1 system3]; "minisign_private_key.age".publicKeys = users ++ [system1 system3];
"bigding_backup_s3_creds.age".publicKeys = users ++ [system4]; "bigding_backup_s3_creds.age".publicKeys = users ++ [system4];
"bigding_backup_repo_password.age".publicKeys = users ++ [system4]; "bigding_backup_repo_password.age".publicKeys = users ++ [system4];
"sendmail_email_key_gitea.age".publicKeys = users ++ [system4]; "sendmail_email_key_gitea.age".publicKeys = users ++ [system4 system5];
"gitea_actions_runner_token.age".publicKeys = users ++ [system4]; "gitea_actions_runner_token.age".publicKeys = users ++ [system4 system5];
"danflix_hetzner_storage_box_pub_key.age".publicKeys = users ++ [system4]; "danflix_hetzner_storage_box_pub_key.age".publicKeys = users ++ [system4 system5];
"danflix_storage_box_crypt_pw.age".publicKeys = users ++ [system4]; "danflix_storage_box_crypt_pw.age".publicKeys = users ++ [system4];
"danflix_storage_box_crypt_obscured_pw.age".publicKeys = users ++ [system4]; "danflix_storage_box_crypt_obscured_pw.age".publicKeys = users ++ [system4];
"danflix_env_file.age".publicKeys = users ++ [system4]; "danflix_env_file.age".publicKeys = users ++ [system4 system5];
"danflix_rclone_config.age".publicKeys = users ++ [system4 system5];
"caddy_porkbun_api_env.age".publicKeys = users ++ [system4 system5];
"pingbox_backup_s3_creds.age".publicKeys = users ++ [system3];
"pingbox_backup_repo_password.age".publicKeys = users ++ [system3];
} }

View File

@@ -1,17 +1,19 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 eYYv1Q XtRSlxUK8enDmGPLuaNTtRLfPcAw2adI0rg7tyrIsVg -> ssh-ed25519 eYYv1Q OGeyEGxBaBdO/OMw2rnbZMbvgu1GmxjRc0OcaGsXqHA
wqS2sot8VBkg8AEIVT+8nqp/zQrgx60aO5+EDKAS6Eo 8SxjgqBQ+uD1b/3yCMoAuUcX+U3uFqzAa9O9VAuRM/8
-> ssh-ed25519 Bp5IaA xxKUriiEdSH1oG9/vdyjEtyOq7b1zSBY6RyDr13OVUE -> ssh-ed25519 Bp5IaA u0nqQmA5OvzR5eS18S1WEMwaMxMl115aF/acae3aVEQ
sWVBSJtX/TNBxINHv4NqmN4yPjNteoMyPH9vZRHp9t4 YzlRQlmJ2zr2ntnBEBI1RS2WT6yWttiuHYoq10SvfL0
-> ssh-ed25519 T/DpgA MnEwHXMOJIX6EL4j24QX1GD047lQvCLHKSDPvwEXYj0 -> ssh-ed25519 T/DpgA JXdZdHnYWFkVpz9RvGGILNhLpCztjw39NDWTm/I95Vc
bMVQvcub7BE5kQ7nipQGAg0DLsHhA6y9pQxjG0vLDYo aO2g/U3cE46wg7KIS4npecWDJEqI1OIhGPYCJtFxw7U
-> ssh-ed25519 qMgRFg nLCDG0cPUGw0EHebVawxraulglOVEdwUWh/c5CFf6CM -> ssh-ed25519 qMgRFg pTXyeSTn4ufyeg1vfDObEInWkWaSb9PDkCTn/Jeb6jw
MagTjYCuIyNF895Kk0Y2uDxZf3u9X5ZKatNPSfENZOA puaX0JfWVvR4K4PtjRPR6bVi8v98suhsXeNYbiA+QNg
-> ssh-ed25519 dMZXNw FZ2sXIfl1yxkvfuNC6njE/OrH8IptIo7MOwNeHeSrWQ -> ssh-ed25519 dMZXNw ZugtCtUmbCDeh/QGs59FwKzwdlOfWE1xyXMxte6wy1E
YBC1LUbStFBKX/rHIgtb70+W6mmdk7XOBDnrZBTeEyU 8TM0XeCA858GxjGtdMwqsx2TPsIWTwoqRR1Hp3lN79c
-> ssh-ed25519 70Nt2Q hUwnRFHLeArYMmIKh0ObeL+rh3PKgvIOZJjfhXH+fwU -> ssh-ed25519 +shbwg UjMILXZ6WqAi6b7Uwf0JopS3X5NISIvXNOq+F3pViCg
vFasj2ysflk5M+KyGfoAkBrk+X0GcphlK8uQFFTvwB0 coMXaPiy/jUF1PS6ZbI6+x5jlXiMnVv1aJtNDAf9okc
-> C"2am-grease e )q x;Ej -> ssh-ed25519 70Nt2Q ZAvqEfCS21ZezlSfbuGTpaIMdyOJaUC+RpVfnYwjk18
gbqZ94TuSRUzfQ +uZTQX7AgjGPipBJEAH1UozEvXDEu76y01wQiiSvxoM
--- o0NjU4u5RB1RSAeOGhud8VJSLLpbZSoU7suslTA3rbs -> ssh-ed25519 YAvvLw YuuGWJrwt+X3rpXhdo+w2bU1jeIaIsmoUC7A9VE1ETE
<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>$׼<>`<60>B<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD> J<>n,<2C><>Cu<43>t<EFBFBD>iW<69>l<EFBFBD>e<EFBFBD><65><EFBFBD><EFBFBD><EFBFBD>$/}p<>CU<43><55>n{*Cf<43><66><EFBFBD>>oʁ<6F><17><08><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<17><><EFBFBD>'<02>}å8 R9<52><39><EFBFBD><EFBFBD><08>I6 PTjzWHZkCXjwK3NGfM5piqeBfsC9l6hIZJcSg2jP7C0
--- WfX1dHrqbOaOVlKg+Jx9q2lLLYljOAWhDqVo5idwO5U
īQ<EFBFBD><EFBFBD><EFBFBD>< <17><>]<5D><><EFBFBD><EFBFBD><EFBFBD>"}C[<5B>S1"<22><><11><1E>?yPV"<22><><EFBFBD>*q<><71>k<EFBFBD>0<EFBFBD><10><><EFBFBD>o<EFBFBD>Cf<<3C><18>6<EFBFBD><36>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ıB<C4B1>j<12><>Z\f<>%8<><38>[V<>=]<5D>`<60><>gFw

View File

@@ -3,9 +3,13 @@
# ./i3 # ./i3
# ./i3status-rust # ./i3status-rust
# ./polybar # ./polybar
./fuzzel
./niri
./river ./river
./sway ./sway
./tofi ./tofi
./waybar ./waybar
]; ];
programs.zen-browser.enable = true;
} }

View File

@@ -0,0 +1,19 @@
{pkgs, ...}: {
programs.fuzzel = {
enable = true;
settings = {
main = {
include = "${./green.ini}";
font = "Iosevka Nerd Font Propo:size=16";
width = 60;
lines = 15;
};
border = {
width = 3;
radius = 15;
};
};
};
}

View File

@@ -0,0 +1,12 @@
[colors]
background=24273add
text=cad3f5ff
prompt=b8c0e0ff
placeholder=8087a2ff
input=cad3f5ff
match=a6da95ff
selection=5b6078ff
selection-text=cad3f5ff
selection-match=a6da95ff
counter=8087a2ff
border=a6da95ff

View File

@@ -0,0 +1,539 @@
// This config is in the KDL format: https://kdl.dev
// "/-" comments out the following node.
// Check the wiki for a full description of the configuration:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
// Input device configuration.
// Find the full list of options on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
input {
keyboard {
xkb {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
// For example:
// layout "us,ru"
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
layout "gb"
options "caps:escape"
}
}
// Next sections include libinput settings.
// Omitting settings disables them, or leaves them at their default values.
touchpad {
// off
tap
// dwt
// dwtp
natural-scroll
scroll-factor 0.5
accel-speed 0.4
accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
accel-speed 0.2
accel-profile "flat"
// scroll-method "no-scroll"
}
trackpoint {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "on-button-down"
// scroll-button 273
// middle-emulation
}
// Uncomment this to make the mouse warp to the center of newly focused windows.
// warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
focus-follows-mouse max-scroll-amount="0%"
}
// You can configure outputs by their name, which you can find
// by running `niri msg outputs` while inside a niri instance.
// The built-in laptop monitor is usually called "eDP-1".
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
// Remember to uncomment the node by removing "/-"!
output "eDP-1" {
// Uncomment this line to disable this output.
// off
// Resolution and, optionally, refresh rate of the output.
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
// If the refresh rate is omitted, niri will pick the highest refresh rate
// for the resolution.
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
// mode "1920x1080@120.030"
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
scale 1.33
// Transform allows to rotate the output counter-clockwise, valid values are:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
transform "normal"
// Position of the output in the global coordinate space.
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
// The cursor can only move between directly adjacent outputs.
// Output scale and rotation has to be taken into account for positioning:
// outputs are sized in logical, or scaled, pixels.
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
// so to put another output directly adjacent to it on the right, set its x to 1920.
// If the position is unset or results in an overlap, the output is instead placed
// automatically.
// position x=1280 y=0
}
output "DP-3" {
scale 1.33
position x=0 y=600
}
output "HDMI-A-1" {
scale 1.33
transform "90"
position x=2880 y=0
}
// Settings that influence how windows are positioned and sized.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
gaps 12
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
// or right edge of the screen.
// - "always", the focused column will always be centered.
// - "on-overflow", focusing a column will center it if it doesn't fit
// together with the previously focused column.
center-focused-column "never"
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
preset-column-widths {
// Proportion sets the width as a fraction of the output width, taking gaps into account.
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
proportion 0.33333
proportion 0.5
proportion 0.66667
// Fixed sets the width in logical pixels exactly.
// fixed 1920
}
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
// preset-window-heights { }
// You can change the default width of the new windows.
default-column-width { proportion 0.5; }
// If you leave the brackets empty, the windows themselves will decide their initial width.
// default-column-width {}
// By default focus ring and border are rendered as a solid background rectangle
// behind windows. That is, they will show up through semitransparent windows.
// This is because windows using client-side decorations can have an arbitrary shape.
//
// If you don't like that, you should uncomment `prefer-no-csd` below.
// Niri will draw focus ring and border *around* windows that agree to omit their
// client-side decorations.
//
// Alternatively, you can override it with a window rule called
// `draw-border-with-background`.
// You can change how the focus ring looks.
focus-ring {
// Uncomment this line to disable the focus ring.
// off
// How many logical pixels the ring extends out from the windows.
width 6
// Colors can be set in a variety of ways:
// - CSS named colors: "red"
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
// Color of the ring on the active monitor.
// active-color "#7fc8ff"
// Color of the ring on inactive monitors.
// inactive-color "#505050"
// You can also use gradients. They take precedence over solid colors.
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
// The angle is the same as in linear-gradient, and is optional,
// defaulting to 180 (top-to-bottom gradient).
// You can use any CSS linear-gradient tool on the web to set these up.
// Changing the color space is also supported, check the wiki for more info.
//
active-gradient from="#f00f" to="#0f0f" angle=45 in="oklch longer hue"
// You can also color the gradient relative to the entire view
// of the workspace, rather than relative to just the window itself.
// To do that, set relative-to="workspace-view".
//
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// You can also add a border. It's similar to the focus ring, but always visible.
border {
// The settings are the same as for the focus ring.
// If you enable the border, you probably want to disable the focus ring.
off
width 4
active-color "#ffc87f"
inactive-color "#505050"
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
// You can think of them as a kind of outer gaps. They are set in logical pixels.
// Left and right struts will cause the next window to the side to always be visible.
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
// left 64
// right 64
// top 64
// bottom 64
}
}
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.
// spawn-at-startup "alacritty" "-e" "fish"
spawn-at-startup "dbus-update-activation-environment" "--systemd" "DISPLAY" "WAYLAND_DISPLAY" "XDG_CURRENT_DESKTOP"
spawn-at-startup "systemctl" "--user" "import-environment" "PATH" "DISPLAY" "WAYLAND_DISPLAY"
spawn-at-startup "waybar"
spawn-at-startup "xwayland-satellite"
environment {
DISPLAY ":0"
}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
// This option will also fix border/focus ring drawing behind some semitransparent windows.
// After enabling or disabling this, you need to restart the apps for this to take effect.
// prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Animation settings.
// The wiki explains how to configure individual animations:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
animations {
// Uncomment to turn off all animations.
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
// slowdown 3.0
}
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
// This regular expression is intentionally made as specific as possible,
// since this is the default config, and we want no false positives.
// You can get away with just app-id="wezterm" if you want.
match app-id=r#"^org\.wezfurlong\.wezterm$"#
default-column-width {}
}
// Open the Firefox picture-in-picture player as floating by default.
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
}
// Example: block out two password managers from screen capture.
// (This example rule is commented out with a "/-" in front.)
/-window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
block-out-from "screen-capture"
// Use this instead if you want them visible on third-party screenshot tools.
// block-out-from "screencast"
}
// Example: enable rounded corners for all windows.
// (This example rule is commented out with a "/-" in front.)
window-rule {
geometry-corner-radius 12
clip-to-geometry true
}
binds {
// Keys consist of modifiers separated by + signs, followed by an XKB key name
// in the end. To find an XKB name for a particular key, you may use a program
// like wev.
//
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.
Mod+Shift+Slash { show-hotkey-overlay; }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+T { spawn "ghostty"; }
// Mod+D { spawn "tofi-drun" "--drun-launch=true"; }
Mod+D { spawn "fuzzel"; }
Mod+Escape { spawn "swaylock" "-i" "~/wallpapers/lock.png"; }
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
// Note: the entire command goes as a single argument in the end.
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
// Example volume keys mappings for PipeWire & WirePlumber.
// The allow-when-locked=true property makes them work even when the session is locked.
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"; }
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; }
XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; }
XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; }
XF86MonBrightnessUp allow-when-locked=true { spawn "xbacklight" "-inc" "10"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "xbacklight" "-dec" "10"; }
Mod+Q { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down; }
Mod+Ctrl+Up { move-window-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Ctrl+H { move-column-left; }
Mod+Ctrl+J { move-window-down; }
Mod+Ctrl+K { move-window-up; }
Mod+Ctrl+L { move-column-right; }
// Alternative commands that move across workspaces when reaching
// the first or last window in a column.
// Mod+J { focus-window-or-workspace-down; }
// Mod+K { focus-window-or-workspace-up; }
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Shift+H { focus-monitor-left; }
Mod+Shift+J { focus-monitor-down; }
Mod+Shift+K { focus-monitor-up; }
Mod+Shift+L { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
// ...
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+U { focus-workspace-down; }
Mod+I { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; }
Mod+Ctrl+I { move-column-to-workspace-up; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
// ...
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+U { move-workspace-down; }
Mod+Shift+I { move-workspace-up; }
// You can bind mouse wheel scroll ticks using the following syntax.
// These binds will change direction based on the natural-scroll setting.
//
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
// discrete intervals.
// These binds are also affected by touchpad's natural-scroll, so these
// example binds are "inverted", since we have natural-scroll enabled for
// touchpads by default.
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
// You can refer to workspaces by index. However, keep in mind that
// niri is a dynamic workspace system, so these commands are kind of
// "best effort". Trying to refer to a workspace index bigger than
// the current workspace count will instead refer to the bottommost
// (empty) workspace.
//
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
// will all refer to the 3rd workspace.
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Ctrl+1 { move-column-to-workspace 1; }
Mod+Ctrl+2 { move-column-to-workspace 2; }
Mod+Ctrl+3 { move-column-to-workspace 3; }
Mod+Ctrl+4 { move-column-to-workspace 4; }
Mod+Ctrl+5 { move-column-to-workspace 5; }
Mod+Ctrl+6 { move-column-to-workspace 6; }
Mod+Ctrl+7 { move-column-to-workspace 7; }
Mod+Ctrl+8 { move-column-to-workspace 8; }
Mod+Ctrl+9 { move-column-to-workspace 9; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+1 { move-window-to-workspace 1; }
// Switches focus between the current and the previous workspace.
// Mod+Tab { focus-workspace-previous; }
// The following binds move the focused window in and out of a column.
// If the window is alone, they will consume it into the nearby column to the side.
// If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
// Consume one window from the right to the bottom of the focused column.
Mod+Comma { consume-window-into-column; }
// Expel the bottom window from the focused column to the right.
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
Mod+C { center-column; }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or "+5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
// Finer height adjustments when in column with other windows.
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
// Move the focused window between the floating and the tiling layout.
Mod+V { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// The quit action will show a confirmation dialog to avoid accidental exits.
Mod+Shift+E { quit; }
Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
}

View File

@@ -0,0 +1,5 @@
{...}: {
home.file = {
".config/niri/config.kdl".source = ./config.kdl;
};
}

View File

@@ -16,8 +16,16 @@ in {
}; };
}; };
}; };
services.swaync = {
enable = true;
};
wayland.windowManager.sway = { wayland.windowManager.sway = {
enable = true; enable = true;
extraConfigEarly = ''
exec systemctl --user import-environment PATH
'';
config = { config = {
startup = [ startup = [
{command = "swaybg -i ~/wallpapers/wallpaper.jpg";} {command = "swaybg -i ~/wallpapers/wallpaper.jpg";}
@@ -39,31 +47,52 @@ in {
}; };
"type:pointer" = { "type:pointer" = {
accel_profile = "flat"; accel_profile = "flat";
natural_scroll = "disabled";
pointer_accel = "0.1"; pointer_accel = "0.1";
}; };
}; "type:touchpad" = {
output = { scroll_factor = "0.5";
eDP-1 = { natural_scroll = "enabled";
scale = "1.33";
};
DP-3 = {
position = "0 0";
scale = "1.33";
};
HDMI-A-1 = {
position = "2880 0";
scale = "1.33";
}; };
}; };
output =
if hostname == "sidon"
then {
DP-3 = {
position = "0 600";
scale = "1.33";
};
HDMI-A-1 = {
position = "2880 0";
scale = "1.33";
transform = "270";
};
}
else {
eDP-1 = {
scale = "1.33";
};
DP-3 = {
position = "0 0";
scale = "1.33";
};
DP-4 = {
position = "2880 0";
scale = "1.33";
};
HDMI-A-1 = {
position = "2880 0";
scale = "1.33";
};
};
workspaceOutputAssign = [ workspaceOutputAssign = [
{ {
output = "HDMI-A-1"; output = "HDMI-A-1";
workspace = "2"; workspace = "1";
} }
{ {
output = "DP-3"; output = "DP-3";
workspace = "1"; workspace = "2";
} }
]; ];
modifier = mod; modifier = mod;
@@ -74,6 +103,7 @@ in {
"${hyper}+Return" = "exec ghostty"; "${hyper}+Return" = "exec ghostty";
"${hyper}+q" = "kill"; "${hyper}+q" = "kill";
"${hyper}+d" = "exec tofi-drun --drun-launch=true"; "${hyper}+d" = "exec tofi-drun --drun-launch=true";
"${mod}+Delete" = "exit";
"${mod}+Shift+s" = "exec grim -g \"$(slurp)\""; "${mod}+Shift+s" = "exec grim -g \"$(slurp)\"";

View File

@@ -1,6 +1,7 @@
{ {
"layer": "top", "layer": "top",
"modules-left": [ "modules-left": [
"niri/workspaces",
"sway/workspaces", "sway/workspaces",
"sway/window" "sway/window"
], ],

View File

@@ -1,5 +1,6 @@
{ {
imports = [ imports = [
./ghostty
./helix ./helix
./kitty ./kitty
./nb ./nb

View File

@@ -0,0 +1,50 @@
{
pkgs,
lib,
hostname,
...
}: {
programs.ghostty = {
enable = true;
settings = {
font-family = "Iosevka Nerd Font";
font-size = 12;
theme = "Catppuccin Macchiato";
cursor-style = "block";
shell-integration-features = "no-cursor";
window-theme = "ghostty";
window-decoration =
if hostname == "pingbox"
then "none"
else "auto";
working-directory = "home";
unfocused-split-opacity = 1;
keybind = [
"ctrl+shift+enter>ctrl+shift+h=new_split:left"
"ctrl+shift+enter>ctrl+shift+l=new_split:right"
"ctrl+shift+enter>ctrl+shift+k=new_split:up"
"ctrl+shift+enter>ctrl+shift+j=new_split:down"
"ctrl+shift+enter>h=new_split:left"
"ctrl+shift+enter>l=new_split:right"
"ctrl+shift+enter>k=new_split:up"
"ctrl+shift+enter>j=new_split:down"
"ctrl+shift+f=toggle_split_zoom"
"alt+enter=toggle_split_zoom"
"ctrl+shift+h=goto_split:left"
"ctrl+shift+l=goto_split:right"
"ctrl+shift+k=goto_split:top"
"ctrl+shift+j=goto_split:bottom"
"ctrl+shift+m=toggle_tab_overview"
"ctrl+shift+alt+r=reset"
];
};
};
}

View File

@@ -3,7 +3,6 @@ theme = "catppuccin_custom"
[editor] [editor]
cursorline = true cursorline = true
bufferline = "always" bufferline = "always"
line-number = "relative"
[editor.cursor-shape] [editor.cursor-shape]
insert = "bar" insert = "bar"

View File

@@ -4,15 +4,16 @@
fetchurl, fetchurl,
hostname, hostname,
headless, headless,
inputs,
... ...
}: let }: let
cliPackages = with pkgs; [ cliPackages = with pkgs; [
age age
direnv direnv
elixir_1_17 elixir
elixir-ls elixir-ls
entr entr
erlang_26 erlang
gnumake gnumake
go go
gopls gopls
@@ -35,21 +36,22 @@
) )
restic restic
rust-analyzer rust-analyzer
senpai
unzip unzip
zip zip
zigpkgs."0.13.0" zigpkgs."0.14.0"
zls zls
]; ];
guiPackages = with pkgs; [ guiPackages = with pkgs; [
_1password _1password-cli
_1password-gui _1password-gui
calibre calibre
discord discord
feh feh
fraunces fraunces
ghostty ghostty
gimp # gimp
grim grim
iosevka iosevka
inkscape inkscape
@@ -60,13 +62,16 @@
pavucontrol pavucontrol
playerctl playerctl
slurp slurp
source-code-pro
spotify spotify
swaylock swaylock
udiskie udiskie
wezterm wezterm
wl-clipboard wl-clipboard
xclip xclip
xwayland-satellite
zathura zathura
zed-editor
]; ];
defaultUser = "daniel"; defaultUser = "daniel";
@@ -76,6 +81,7 @@ in {
../configs/system ../configs/system
] ]
++ lib.optionals (!headless) [ ++ lib.optionals (!headless) [
inputs.zen-browser.homeModules.beta
../configs/desktop ../configs/desktop
] ]
++ lib.optionals (builtins.pathExists ./host-specific/${hostname}) [ ++ lib.optionals (builtins.pathExists ./host-specific/${hostname}) [
@@ -89,11 +95,13 @@ in {
"$HOME/go/bin" "$HOME/go/bin"
]; ];
sessionVariables = {
NIXOS_OZONE_WL = "1";
};
file = { file = {
".icons/default".source = "${pkgs.capitaine-cursors}/share/icons/capitaine-cursors"; ".icons/default".source = "${pkgs.capitaine-cursors}/share/icons/capitaine-cursors";
".rust".source = pkgs.rustPlatform.rustcSrc;
"bin/update" = { "bin/update" = {
source = ../../scripts/update; source = ../../scripts/update;
executable = true; executable = true;
@@ -117,10 +125,35 @@ in {
stateVersion = "21.05"; stateVersion = "21.05";
}; };
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-wlr
xdg-desktop-portal-gnome
];
xdgOpenUsePortal = true;
config = {
common = {
default = "gtk";
"org.freedesktop.impl.portal.Screencast" = "wlr";
"org.freedesktop.impl.portal.Screenshot" = "wlr";
};
};
};
services.udiskie = {
enable = true;
};
programs = { programs = {
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
home-manager.enable = true; home-manager.enable = true;
emacs = {
enable = true;
};
fzf = { fzf = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
@@ -128,10 +161,11 @@ in {
git = { git = {
enable = true; enable = true;
lfs.enable = true;
package = pkgs.gitFull; package = pkgs.gitFull;
userName = "Daniel Patterson"; settings = {
userEmail = "me@danielpatterson.dev"; user.name = "Daniel Patterson";
extraConfig = { user.email = "me@danielpatterson.dev";
pull.rebase = true; pull.rebase = true;
init.defaultBranch = "main"; init.defaultBranch = "main";
format.signOff = "yes"; format.signOff = "yes";
@@ -161,7 +195,7 @@ in {
zsh = { zsh = {
enable = true; enable = true;
autosuggestion.enable = true; autosuggestion.enable = true;
initExtra = '' initContent = ''
eval "$(direnv hook zsh)" eval "$(direnv hook zsh)"
''; '';
oh-my-zsh = { oh-my-zsh = {

View File

@@ -0,0 +1,21 @@
{pkgs, ...}: let
# librespot = pkgs.callPackage ../../../../packages/librespot.nix {
# withPulseAudio = true;
# withRodio = true;
# };
in {
services.librespot = {
enable = true;
# package = librespot;
settings = {
# "zeroconf-port" = 12345;
# "verbose" = true;
"name" = "Ships Comms";
# "bitrate" = "320";
# "format" = "S32";
"disable-credential-cache" = true;
};
};
}

View File

@@ -12,9 +12,22 @@
}; };
}; };
home.packages = with pkgs; [
moonlight-qt
];
programs.kitty.font.size = 12; programs.kitty.font.size = 12;
services.picom = { services.picom = {
vSync = true; vSync = true;
}; };
services.easyeffects = {
enable = true;
};
wayland.windowManager.sway.extraConfig = ''
bindswitch lid:on output eDP-1 disable
bindswitch lid:off output eDP-1 enable
'';
} }