Compare commits

..
2247 Commits
Author SHA1 Message Date
rycee d1509990d5 deploy: 32de400b6a 2026-07-24 07:18:57 +00:00
khaneliman fa9b432863 deploy: 041a999e8c 2026-07-22 13:11:08 +00:00
khaneliman bdcc48862a deploy: abba1081f5 2026-07-22 03:16:07 +00:00
rycee 630bdc1aff deploy: cbcbd8b043 2026-07-20 22:26:46 +00:00
rycee ace1a4de4a deploy: a02190edf9 2026-07-20 21:20:51 +00:00
rycee aae49abd24 deploy: 7834e3fb36 2026-07-20 21:02:26 +00:00
teto 6df26565cc deploy: e3dea8e479 2026-07-20 11:19:45 +00:00
teto ca5ebe7944 deploy: 3139deb8ca 2026-07-19 19:33:56 +00:00
rycee 7aecfa65b1 deploy: 39411a8e12 2026-07-18 20:44:20 +00:00
khaneliman 47dce54964 deploy: 18f9047340 2026-07-18 05:06:26 +00:00
khaneliman c85fc43ec4 deploy: c71e83ef50 2026-07-18 05:04:37 +00:00
khaneliman 290b8ddcec deploy: 165228b0ef 2026-07-15 15:32:33 +00:00
khaneliman b808266530 deploy: 6dc9e081ba 2026-07-15 13:58:12 +00:00
teto 520275ecd2 deploy: a45a7c4514 2026-07-13 17:24:52 +00:00
khaneliman 3faef2f89e deploy: 7566825d46 2026-07-12 02:32:36 +00:00
khaneliman b9077813ad deploy: c74f4f6cdd 2026-07-12 00:47:03 +00:00
khaneliman c8e09b71e8 deploy: 564bc37de5 2026-07-11 23:59:08 +00:00
khaneliman 69467c1eae deploy: 0992a29487 2026-07-11 20:02:59 +00:00
khaneliman 1765c1e3b8 deploy: 3e2af6c9e5 2026-07-11 04:08:58 +00:00
khaneliman 8a0834c2df deploy: f938277527 2026-07-10 19:21:32 +00:00
khaneliman 63b0698ba5 deploy: f4d01c1d87 2026-07-08 22:35:45 +00:00
khaneliman 4a516533e1 deploy: 2ad49968c3 2026-07-07 20:49:54 +00:00
khaneliman 1dfe00ac1f deploy: 3c6f1244ed 2026-07-07 20:48:37 +00:00
khaneliman 290f470357 deploy: cd863288d4 2026-07-07 14:56:15 +00:00
khaneliman 7e8adc0279 deploy: 63d02d1c19 2026-07-07 01:50:28 +00:00
khaneliman 8829d267e6 deploy: 0d33882bd4 2026-07-06 17:22:39 +00:00
khaneliman 5c608097fe deploy: a7209b6794 2026-07-05 03:04:54 +00:00
khaneliman 44d4db7bba deploy: b885baad53 2026-07-04 03:11:45 +00:00
khaneliman 9efffe30cb deploy: 3a60d513d0 2026-07-03 17:28:37 +00:00
khaneliman da2e90f1e1 deploy: a4d410db95 2026-07-02 20:30:31 +00:00
khaneliman d99c0a0c61 deploy: f469c79b95 2026-07-02 15:22:10 +00:00
khaneliman 310f5f2716 deploy: 74b38179ac 2026-07-01 20:09:56 +00:00
khaneliman a22f471fcf deploy: d32537981c 2026-07-01 04:50:34 +00:00
khaneliman 6c2ccf4be4 deploy: 2a37d71bbe 2026-06-30 17:28:50 +00:00
khaneliman 6d1f01fee7 deploy: 5d72a29fc3 2026-06-29 16:16:06 +00:00
khaneliman 2e8ec143cc deploy: abeeea1221 2026-06-29 02:52:22 +00:00
khaneliman 2a0cd569dd deploy: 4ad9aaae70 2026-06-28 14:32:54 +00:00
khaneliman 0fcbc7219a deploy: 8d8a6cc50d 2026-06-27 01:11:13 +00:00
khaneliman 0bb7640ac9 deploy: 6eba758fee 2026-06-27 01:10:22 +00:00
khaneliman 84922541ab deploy: 19d7472aca 2026-06-25 19:23:26 +00:00
khaneliman 36f21917cf deploy: a9232b8b10 2026-06-25 01:40:55 +00:00
khaneliman 6b987ae658 deploy: 062581938b 2026-06-23 16:56:44 +00:00
khaneliman ce2674687c deploy: 1ac720f007 2026-06-23 16:14:06 +00:00
khaneliman e23360a041 deploy: d6b7bf1695 2026-06-23 16:12:46 +00:00
khaneliman 02c9d6e105 deploy: 4b0b947474 2026-06-23 13:11:33 +00:00
khaneliman 3ff2389e8e deploy: 471a1d2f84 2026-06-22 22:16:28 +00:00
khaneliman c1bedb69ae deploy: 351959fcdb 2026-06-22 20:19:58 +00:00
khaneliman 8a155aa7be deploy: af11a877f2 2026-06-22 18:57:48 +00:00
khaneliman 332a9662b1 deploy: 66eb0fc116 2026-06-22 17:35:55 +00:00
khaneliman a2182a356b deploy: 979bfee6e1 2026-06-22 13:21:47 +00:00
khaneliman 4dc1786f4a deploy: f3dc0b8583 2026-06-22 03:59:34 +00:00
khaneliman c6f60caed2 deploy: db97e414d5 2026-06-22 03:52:31 +00:00
khaneliman c786ba89cf deploy: e731ff60ec 2026-06-22 03:43:45 +00:00
khaneliman 1679651f5a deploy: e45cc6e15a 2026-06-22 03:21:34 +00:00
khaneliman 2eacc68d71 deploy: 5bf17310cf 2026-06-22 03:03:03 +00:00
khaneliman 5535782e06 deploy: d1ccd0721e 2026-06-21 14:22:31 +00:00
khaneliman 488fe4ccf9 deploy: 153bad8fb5 2026-06-19 17:30:19 +00:00
khaneliman 3c4043c811 deploy: 55730a2e34 2026-06-19 15:15:52 +00:00
khaneliman 22c71c0237 deploy: fea021792d 2026-06-19 15:02:42 +00:00
khaneliman f51042501c deploy: 9b2afbdd47 2026-06-19 15:00:58 +00:00
khaneliman f70075542c deploy: 43f9f0abc6 2026-06-19 14:00:02 +00:00
khaneliman b2575ad3fb deploy: c804fab681 2026-06-19 04:47:46 +00:00
khaneliman 12201674ba deploy: c8f0b8ed44 2026-06-18 19:16:49 +00:00
khaneliman 5427a7aac5 deploy: 9f9b23ae21 2026-06-18 17:38:53 +00:00
khaneliman cc43720448 deploy: d456f483f1 2026-06-18 13:20:37 +00:00
khaneliman 8c6a5c151f deploy: 5ccd408ca7 2026-06-18 13:00:07 +00:00
khaneliman 944b3af0d3 deploy: 652f754686 2026-06-18 12:46:37 +00:00
khaneliman 2ad1489ce4 deploy: c187002980 2026-06-18 00:17:05 +00:00
khaneliman af21783405 deploy: c51ac59e59 2026-06-17 20:48:11 +00:00
khaneliman 50b6eb7e1a deploy: a2e23ee8f8 2026-06-17 14:33:34 +00:00
khaneliman 4933be8b36 deploy: 7664e05e24 2026-06-17 03:43:10 +00:00
khaneliman 32ce8dd14b deploy: 45e97d1e88 2026-06-17 03:33:26 +00:00
khaneliman f355286dc8 deploy: df4e046571 2026-06-16 20:36:06 +00:00
khaneliman f7cdc9a29f deploy: 34dd288e65 2026-06-16 13:06:59 +00:00
khaneliman eb0e5249f0 deploy: 2d4f4e2788 2026-06-15 20:53:53 +00:00
khaneliman b00a48a688 deploy: 1b7fb5e6b4 2026-06-14 22:58:25 +00:00
khaneliman 7423812be7 deploy: 5b6f573372 2026-06-13 15:43:04 +00:00
khaneliman af880ce23d deploy: c87a39aa97 2026-06-12 23:05:49 +00:00
khaneliman 99f7c5f6a7 deploy: bb68a1a2e7 2026-06-11 14:06:26 +00:00
rycee 63402398e5 deploy: 7dbd305f8b 2026-06-10 22:14:21 +00:00
khaneliman bfb5b076c5 deploy: 2b394beca7 2026-06-10 18:06:17 +00:00
khaneliman 2b4980946d deploy: 74887eaee2 2026-06-10 14:49:33 +00:00
khaneliman 5345accaef deploy: 1ffdc28076 2026-06-10 04:04:40 +00:00
khaneliman cfcd210604 deploy: c30f177760 2026-06-10 03:45:34 +00:00
khaneliman 8d69a799dd deploy: 408a6918a0 2026-06-09 21:41:32 +00:00
khaneliman 3ff687255a deploy: c58ead12ef 2026-06-09 12:50:06 +00:00
khaneliman d833258e7c deploy: df39142474 2026-06-08 18:36:36 +00:00
khaneliman dba61f7fd9 deploy: 301871cd96 2026-06-08 16:17:07 +00:00
khaneliman e03a114811 deploy: d4d5d9bb4a 2026-06-08 02:07:42 +00:00
khaneliman 5c1107e84d deploy: ddb7082625 2026-06-08 02:05:17 +00:00
khaneliman 211be6a123 deploy: e621f12c02 2026-06-05 16:40:14 +00:00
khaneliman dee41b2312 deploy: 37e8eef933 2026-06-05 16:14:37 +00:00
khaneliman 681a0c0de9 deploy: 447fd9ff62 2026-06-04 17:21:44 +00:00
khaneliman b851964de0 deploy: dc641330e2 2026-06-04 17:21:22 +00:00
khaneliman 75dbdc99d8 deploy: f384af1bec 2026-06-02 13:57:06 +00:00
khaneliman 01ee7f36d8 deploy: f15c764b14 2026-06-02 13:23:58 +00:00
khaneliman 1a33877231 deploy: 68227a9363 2026-06-02 13:23:15 +00:00
khaneliman 57fe05fbe5 deploy: a7a4158831 2026-06-02 03:28:56 +00:00
khaneliman 6aaa2a772e deploy: 274299642b 2026-06-02 02:41:33 +00:00
khaneliman 11836fda56 deploy: 26e34a99e4 2026-06-02 02:32:52 +00:00
khaneliman 59f3505cb7 deploy: c7e4087b4d 2026-06-02 02:22:57 +00:00
khaneliman 2c30add7ac deploy: 5a608a621b 2026-06-01 19:39:16 +00:00
khaneliman ec417b3217 deploy: 3d64f2875e 2026-06-01 19:14:29 +00:00
khaneliman 42d722c51b deploy: 16110b65b2 2026-06-01 19:08:53 +00:00
khaneliman 049b3a03ad deploy: 7d8127d308 2026-05-30 00:02:11 +00:00
teto ed6c698372 deploy: 61e2c96593 2026-05-28 11:55:43 +00:00
khaneliman f769bfaa2c deploy: 1a95e2efb4 2026-05-25 16:32:19 +00:00
khaneliman ed979af0be deploy: f4df9da960 2026-05-25 16:29:19 +00:00
khaneliman 476badc312 deploy: 044c30c195 2026-05-24 13:01:24 +00:00
khaneliman c2ec8f32c9 deploy: 6e92bf094d 2026-05-24 00:03:24 +00:00
khaneliman 35efeaa2fc deploy: 509ed3c603 2026-05-23 03:31:26 +00:00
khaneliman ba3b068893 deploy: 928d723769 2026-05-21 04:14:44 +00:00
khaneliman d6cdac193d deploy: 93b932fdbb 2026-05-19 17:38:22 +00:00
khaneliman cbe122bcc2 deploy: 16663cb138 2026-05-19 14:51:00 +00:00
rycee d0c4357d1c deploy: 736c2084ea 2026-05-18 22:25:37 +00:00
rycee dad8a05b5c deploy: 3ee415b292 2026-05-18 22:12:06 +00:00
rycee 218085701c deploy: b0e2077789 2026-05-18 21:42:46 +00:00
khaneliman 2a1b77ab98 deploy: fab3fd7327 2026-05-18 17:26:45 +00:00
khaneliman 141f036601 deploy: 7519f615df 2026-05-18 15:36:18 +00:00
teto 04581d1682 deploy: dd71501fb7 2026-05-18 11:24:37 +00:00
khaneliman 771fac7143 deploy: 08c9d01457 2026-05-18 03:36:34 +00:00
khaneliman 610b8b1fa7 deploy: d918d22422 2026-05-18 03:26:12 +00:00
khaneliman 8588e2fd89 deploy: 355734d876 2026-05-18 02:44:10 +00:00
khaneliman 5ea4a9a8a4 deploy: 26aaab785b 2026-05-16 18:01:15 +00:00
ambroisie 48bb8aa77f deploy: 32b42d71b4 2026-05-16 08:53:39 +00:00
khaneliman a44acd3b60 deploy: c7fad81970 2026-05-15 20:27:01 +00:00
khaneliman c25b457997 deploy: ca77575d39 2026-05-15 15:22:01 +00:00
khaneliman 2dba2fc402 deploy: 1bedcc8740 2026-05-15 14:00:28 +00:00
khaneliman d7b4f4c39a deploy: e7a7c550e2 2026-05-15 13:14:42 +00:00
ambroisie 9a007fbe95 deploy: 3e707f5f93 2026-05-15 10:14:06 +00:00
khaneliman bc64041fc3 deploy: c68d2a2437 2026-05-14 17:57:07 +00:00
khaneliman 2524cc2e55 deploy: 2809b9e3f8 2026-05-14 17:29:56 +00:00
teto 2d0fdf93f0 deploy: 4f9cbe4384 2026-05-14 13:07:57 +00:00
khaneliman 0ded5d47c0 deploy: f04b141d1a 2026-05-14 03:13:42 +00:00
khaneliman 81240e55cd deploy: 9760b31dab 2026-05-13 21:14:15 +00:00
khaneliman bb2fe73afc deploy: b7e6cad335 2026-05-12 17:31:57 +00:00
khaneliman 9ae0ee14ba deploy: 1768d4e498 2026-05-12 13:55:59 +00:00
teto 612b70bad8 deploy: b659c7ffd4 2026-05-11 21:38:31 +00:00
rycee c92a062914 deploy: bc63bedcab 2026-05-11 21:16:15 +00:00
teto 97c5753b38 deploy: 85ba629c79 2026-05-11 12:45:56 +00:00
khaneliman d1bf54b2d8 deploy: 2f41903703 2026-05-09 22:31:49 +00:00
rycee 49d026780a deploy: fdb2ccba9d 2026-05-08 13:57:29 +00:00
ambroisie 870a7c882a deploy: e4419d3123 2026-05-07 09:00:01 +00:00
rycee 1424cb1a1e deploy: 02b61230c4 2026-05-05 19:31:13 +00:00
teto 0b32cd98b3 deploy: 5be632dab0 2026-05-05 10:31:36 +00:00
khaneliman 8780d9e8a2 deploy: 0ecfc72c7c 2026-05-04 16:38:12 +00:00
khaneliman cf5313ba17 deploy: 938311a3bd 2026-05-04 16:14:26 +00:00
teto e2f7f50bd1 deploy: fb6a0c6d39 2026-05-04 15:23:10 +00:00
khaneliman ae7e71d36f deploy: c909892de5 2026-05-03 23:51:35 +00:00
khaneliman 4cbdb9d0a7 deploy: 71ad461413 2026-05-03 23:42:11 +00:00
teto ff5af4604d deploy: 4625f26228 2026-05-03 22:11:44 +00:00
khaneliman f6af32f48f deploy: b931102804 2026-05-03 03:58:11 +00:00
khaneliman a5a64689c1 deploy: 0379e433a8 2026-05-03 00:02:46 +00:00
khaneliman d63131d825 deploy: 561bd67464 2026-05-02 22:21:37 +00:00
khaneliman 3bf39280b2 deploy: 9ce9f7f128 2026-05-02 14:51:02 +00:00
khaneliman 1926f42c4a deploy: 7c28dd52cb 2026-05-02 14:33:21 +00:00
ambroisie e62105410d deploy: 5c1b74905c 2026-05-01 18:26:52 +00:00
khaneliman ab1b44f998 deploy: edf3f59954 2026-05-01 17:41:44 +00:00
khaneliman d199d292d3 deploy: feda41500e 2026-05-01 17:07:04 +00:00
khaneliman 08a033b11e deploy: e6613dd625 2026-05-01 13:11:15 +00:00
khaneliman dfd73de1aa deploy: 2e54a938cd 2026-04-30 03:08:06 +00:00
khaneliman 1ad34a2440 deploy: 503480e513 2026-04-29 21:38:20 +00:00
khaneliman fd01a4d589 deploy: d3b4e4b1bd 2026-04-29 03:43:38 +00:00
khaneliman 503b091d32 deploy: af59809e94 2026-04-28 21:28:42 +00:00
khaneliman 6c42748adc deploy: 8ec5a714db 2026-04-28 15:20:48 +00:00
khaneliman dfe8fcc4f8 deploy: 9821396285 2026-04-28 14:40:42 +00:00
khaneliman d0a8ee2fcc deploy: dd6a8772d4 2026-04-28 13:37:54 +00:00
khaneliman 733659ac54 deploy: c114054053 2026-04-28 04:15:55 +00:00
khaneliman 5a73219a92 deploy: d45a13f96c 2026-04-27 16:21:41 +00:00
khaneliman 097f0a874b deploy: 7f8bbc93d6 2026-04-27 03:00:04 +00:00
khaneliman 3d221ee503 deploy: c97d921373 2026-04-27 02:48:50 +00:00
khaneliman bb919d6783 deploy: 3e4b311842 2026-04-26 14:54:08 +00:00
rycee d94a92f3d1 deploy: 38bf0202ca 2026-04-26 09:48:59 +00:00
khaneliman dcad3e7fed deploy: 5826802354 2026-04-25 03:02:32 +00:00
khaneliman 9eaedb1b23 deploy: 6012cf1fed 2026-04-24 04:19:58 +00:00
khaneliman 093920f6ec deploy: b869d6cadb 2026-04-24 03:59:44 +00:00
khaneliman 3919903073 deploy: 4bf1f0bcd1 2026-04-24 03:08:15 +00:00
khaneliman d829cfde1e deploy: 5bba6a1e02 2026-04-24 00:17:00 +00:00
khaneliman 2e4f6c9011 deploy: ae97a15455 2026-04-24 00:07:23 +00:00
khaneliman 3ba820f907 deploy: 5a9efa93c5 2026-04-23 22:28:26 +00:00
khaneliman 5630b655f8 deploy: e09259dd2e 2026-04-23 17:14:48 +00:00
khaneliman c7a6e85e60 deploy: 6837e0d6c5 2026-04-23 13:19:06 +00:00
khaneliman 5c81c4fc38 deploy: 667b3c4732 2026-04-23 00:35:23 +00:00
khaneliman 8b9d435149 deploy: 508daf831a 2026-04-22 20:51:10 +00:00
khaneliman c341e82468 deploy: 83b3ecce2e 2026-04-22 20:26:48 +00:00
khaneliman d93a27c38a deploy: d1759673d7 2026-04-22 20:25:34 +00:00
khaneliman 233f78f8a7 deploy: d79c987e65 2026-04-22 19:15:00 +00:00
khaneliman e1c933a1fe deploy: f9d2b2da81 2026-04-22 17:31:42 +00:00
khaneliman 894892c097 deploy: 936d579f53 2026-04-22 15:57:33 +00:00
khaneliman 894b520427 deploy: 875f2fcbb1 2026-04-22 15:56:38 +00:00
khaneliman 3a0d033524 deploy: f2b06589e3 2026-04-22 15:50:42 +00:00
khaneliman 1712cd7191 deploy: afd5607108 2026-04-22 15:00:43 +00:00
khaneliman 18f4509efa deploy: c555a4a34a 2026-04-20 21:47:38 +00:00
khaneliman c787ddb428 deploy: 1072f064e2 2026-04-20 15:26:54 +00:00
khaneliman f454cddcec deploy: 0a8d50edf2 2026-04-20 14:37:48 +00:00
khaneliman e5e964bece deploy: 4bfce11ea8 2026-04-20 05:08:49 +00:00
khaneliman 56906a34d5 deploy: 1e9bdc6d35 2026-04-20 03:48:38 +00:00
khaneliman 5fe8ee563e deploy: 565e534920 2026-04-17 19:28:41 +00:00
khaneliman 3a0242e541 deploy: 08b283aeda 2026-04-17 18:29:25 +00:00
khaneliman 0e74363279 deploy: 8941f29d42 2026-04-17 18:27:40 +00:00
teto fc831a4872 deploy: d401492e2a 2026-04-16 21:02:32 +00:00
khaneliman 2a7bab7211 deploy: 3c7524c683 2026-04-14 16:32:30 +00:00
khaneliman ff8da2cbdf deploy: 287f84846c 2026-04-13 02:15:50 +00:00
rycee 0258ae745f deploy: 49088dc2e7 2026-04-12 21:42:32 +00:00
rycee 0a1629ac01 deploy: adc677d02e 2026-04-12 21:06:21 +00:00
khaneliman 52c3717723 deploy: 7832a664c4 2026-04-12 15:59:15 +00:00
khaneliman 7e1fe0b065 deploy: 30ca31c87a 2026-04-12 15:54:48 +00:00
rycee f3c733c821 deploy: ffa740c0df 2026-04-12 15:46:26 +00:00
khaneliman 5a2c55bd7a deploy: adf6e3aafb 2026-04-12 15:40:41 +00:00
khaneliman 8a6d9a69b4 deploy: 44111a5c6f 2026-04-12 15:12:10 +00:00
rycee dde74e3aa3 deploy: e0ca734ffc 2026-04-12 08:43:41 +00:00
rycee 2bc176de92 deploy: b0569dc6ec 2026-04-11 09:34:14 +00:00
rycee cbca266bd2 deploy: f899c5d6f3 2026-04-11 09:22:17 +00:00
rycee d0d9efffc2 deploy: f7f6a559c2 2026-04-11 07:59:26 +00:00
khaneliman bb4252c69f deploy: e35c39fca0 2026-04-10 00:44:29 +00:00
khaneliman ea5fef4dfa deploy: 0eddb2cc1a 2026-04-10 00:10:37 +00:00
khaneliman 4ae0a5c945 deploy: a91f37efba 2026-04-10 00:10:13 +00:00
khaneliman 2348dee3db deploy: 5c663d5781 2026-04-10 00:09:31 +00:00
khaneliman 3354b24cd5 deploy: c975a66a56 2026-04-09 19:17:49 +00:00
khaneliman cc851d2a2e deploy: 2877554a72 2026-04-09 19:14:47 +00:00
khaneliman 912ed376a2 deploy: 7ba4ee4228 2026-04-08 21:29:41 +00:00
khaneliman 4d028a03c7 deploy: 3d822c1dba 2026-04-08 02:33:15 +00:00
khaneliman f0f9d1443f deploy: 98b4d61cfa 2026-04-07 21:45:43 +00:00
khaneliman 4fc56e0ae3 deploy: 530d83a5a8 2026-04-07 18:40:44 +00:00
rycee ce7e7f8078 deploy: 2bd16b16a7 2026-04-07 06:42:21 +00:00
rycee 6005906221 deploy: c65923b58d 2026-04-05 21:35:47 +00:00
khaneliman 6191784d3a deploy: 2097a5c82b 2026-04-05 03:49:48 +00:00
khaneliman 7fd4b631fd deploy: 8ec54491cd 2026-04-05 03:29:26 +00:00
khaneliman 349a12ae06 deploy: 7923d24b0b 2026-04-05 03:29:00 +00:00
khaneliman 6c8b435202 deploy: e78a997d2e 2026-04-05 03:28:06 +00:00
khaneliman 0daa5808d5 deploy: 9dc93220c1 2026-04-04 02:16:16 +00:00
khaneliman 2e5e3ded8d deploy: 03bdcf84f0 2026-04-03 20:22:00 +00:00
rycee 604382115a deploy: eb6f347055 2026-04-02 14:21:09 +00:00
khaneliman ef30ea4f79 deploy: 41e6e2ab37 2026-04-02 04:30:00 +00:00
khaneliman 74b91ab60c deploy: 6267895e98 2026-04-01 21:48:22 +00:00
teto aabdf70725 deploy: 1ce9e62690 2026-04-01 12:40:08 +00:00
khaneliman fe2b0ab375 deploy: b399348e9d 2026-03-31 19:06:42 +00:00
khaneliman 05bd7b71c3 deploy: a7d2aca3f0 2026-03-31 15:05:55 +00:00
ambroisie 90da5784ac deploy: 5ed75a0312 2026-03-30 11:15:11 +00:00
khaneliman f8037ad20c deploy: 027539a127 2026-03-28 19:51:32 +00:00
teto c877405101 deploy: 557f5e38ce 2026-03-28 16:33:36 +00:00
khaneliman 51f71e2472 deploy: 02371c05a0 2026-03-27 21:43:36 +00:00
khaneliman b00cbafc9d deploy: 9df3a63900 2026-03-27 15:43:00 +00:00
khaneliman 4e1ddd2556 deploy: accd450fcd 2026-03-27 14:42:02 +00:00
khaneliman a2659f53d0 deploy: 4b1be5c38b 2026-03-27 04:02:40 +00:00
khaneliman fa471428f0 deploy: 7126ec6a55 2026-03-27 04:00:33 +00:00
khaneliman fe1e674abf deploy: 0143d6ca9b 2026-03-27 03:51:57 +00:00
khaneliman ccf65596d2 deploy: 7c046c63ac 2026-03-26 21:47:59 +00:00
khaneliman 666092aa72 deploy: 051da45e96 2026-03-26 21:42:27 +00:00
khaneliman 64b3c6769b deploy: 3aeefa9db2 2026-03-26 21:35:24 +00:00
khaneliman 53ce9d5c6e deploy: 40955dc50a 2026-03-26 21:25:28 +00:00
khaneliman e3a15547e6 deploy: 0e0e7a072a 2026-03-26 21:04:24 +00:00
ambroisie 5b98f2177f deploy: 86014e836c 2026-03-26 14:11:34 +00:00
khaneliman 36ca65b92c deploy: 5068d0b03e 2026-03-24 16:03:43 +00:00
khaneliman 698ed94e18 deploy: 61463d50fc 2026-03-24 13:04:50 +00:00
khaneliman 70a01b6296 deploy: bc357c75e3 2026-03-23 19:11:26 +00:00
khaneliman 2d75dbc7c4 deploy: b02a36dc79 2026-03-23 14:02:47 +00:00
khaneliman aa71a0d5c0 deploy: c6fe2944ad 2026-03-22 20:09:41 +00:00
khaneliman 1525e0cf64 deploy: 932ca46013 2026-03-22 17:40:09 +00:00
khaneliman cb4917933b deploy: 38539206d0 2026-03-22 16:54:40 +00:00
khaneliman 1d4d973fa8 deploy: b92cad188c 2026-03-22 16:47:39 +00:00
rycee ff3d996583 deploy: 9bc3ca1230 2026-03-19 20:33:29 +00:00
ambroisie 56a9c4f952 deploy: f72ed9c97d 2026-03-19 15:37:32 +00:00
khaneliman 7d987bf8e5 deploy: 4fcef56c15 2026-03-19 05:01:53 +00:00
khaneliman 2081b2629e deploy: a455ac1bb3 2026-03-18 04:53:33 +00:00
khaneliman cd4a83ea30 deploy: f0e123a7e2 2026-03-18 04:51:09 +00:00
khaneliman 211d9159f7 deploy: 54db7915d0 2026-03-18 04:48:36 +00:00
khaneliman 72529947d7 deploy: b61330163e 2026-03-18 04:47:45 +00:00
teto ef3a868cda deploy: 57d5560ee9 2026-03-16 17:25:05 +00:00
teto c08541f8ce deploy: dee018cd92 2026-03-16 13:12:54 +00:00
khaneliman 426c1d28b7 deploy: 9a40ec3b78 2026-03-15 21:02:15 +00:00
teto 59cbee72e7 deploy: 585a161ea6 2026-03-15 17:54:12 +00:00
khaneliman 1d7d0711ce deploy: ef12a9a2b0 2026-03-13 17:22:40 +00:00
teto 89ca24704b deploy: 7cd3093fc6 2026-03-12 14:01:49 +00:00
teto 2ff4e18a9c deploy: f9482fd109 2026-03-12 13:50:02 +00:00
khaneliman 2bfe93d068 deploy: 7d06e0cefe 2026-03-12 03:33:04 +00:00
khaneliman 50e8f517ff deploy: 45fe5c9854 2026-03-12 03:14:30 +00:00
khaneliman 15c1290aef deploy: d7ef0034e3 2026-03-12 02:53:24 +00:00
teto d60f5e492a deploy: bb014746ed 2026-03-09 22:04:52 +00:00
khaneliman e69acddf10 deploy: 5be5d8245c 2026-03-08 15:55:33 +00:00
ambroisie 42e3c1d0d9 deploy: daa2c22132 2026-03-06 14:29:31 +00:00
khaneliman 34e010bd73 deploy: ef26422ded 2026-03-04 14:05:12 +00:00
khaneliman baaecaef0d deploy: 2b9504d5a0 2026-03-03 05:44:30 +00:00
khaneliman 8e7e816cbb deploy: a71c7c601e 2026-03-03 05:33:18 +00:00
khaneliman 5cc15fac20 deploy: f140aa04d7 2026-03-01 15:55:09 +00:00
khaneliman 0a5aed6961 deploy: 9c8b3cc2d5 2026-03-01 15:52:02 +00:00
khaneliman a873d216f5 deploy: 7608066893 2026-03-01 15:50:43 +00:00
khaneliman 2b29300c62 deploy: cf7448c589 2026-03-01 15:49:56 +00:00
khaneliman 875fc51d93 deploy: 6f2cb27ea6 2026-03-01 15:19:05 +00:00
khaneliman 5484d0d30e deploy: 6656349da8 2026-03-01 02:02:38 +00:00
teto 83d6714e7f deploy: f3a30376bb 2026-02-27 19:00:00 +00:00
khaneliman 1ee565936f deploy: dcfc84871c 2026-02-27 03:40:14 +00:00
khaneliman 28d6b42dff deploy: 04acdd8af8 2026-02-27 03:38:48 +00:00
khaneliman 1361610f69 deploy: bff85cb66b 2026-02-27 03:37:53 +00:00
khaneliman de57a61451 deploy: 920c07c691 2026-02-27 03:35:13 +00:00
khaneliman 9845a82cca deploy: 3233912054 2026-02-27 03:31:26 +00:00
khaneliman 012636d902 deploy: ec4e1159d9 2026-02-27 03:31:11 +00:00
khaneliman 0462b83c2a deploy: b96418f81b 2026-02-27 03:27:10 +00:00
khaneliman 5f45dcaa7a deploy: 31ea32fa14 2026-02-27 03:08:07 +00:00
khaneliman 607d13c7e1 deploy: 4c4fd4ed6b 2026-02-27 02:45:45 +00:00
teto 60e4e10001 deploy: ce9b6e5250 2026-02-25 22:56:25 +00:00
rycee 9cd4fd9793 deploy: 603626a8da 2026-02-22 09:01:44 +00:00
khaneliman 27536cb92d deploy: c6ed3eab64 2026-02-21 14:15:31 +00:00
khaneliman a84b815ce3 deploy: 436b27742c 2026-02-21 04:25:58 +00:00
khaneliman b89a0ded30 deploy: a913ae61bf 2026-02-20 22:08:50 +00:00
khaneliman 1622623105 deploy: c9507a9aa5 2026-02-20 22:06:59 +00:00
khaneliman f325d2b55e deploy: 8b6212ebd6 2026-02-20 22:05:58 +00:00
khaneliman 8acb2a4fdb deploy: 91be7cce76 2026-02-19 20:00:58 +00:00
teto cf8bac3001 deploy: a0a01d8811 2026-02-19 12:45:13 +00:00
khaneliman 732767bebe deploy: 2dedeb55b2 2026-02-19 03:20:26 +00:00
khaneliman c92b542a60 deploy: 0f156f177d 2026-02-19 03:14:25 +00:00
khaneliman ab788f8755 deploy: f1ebddedab 2026-02-19 02:56:44 +00:00
teto 0d8ef1a98c deploy: 77c47a4542 2026-02-18 10:50:52 +00:00
khaneliman 461ab2cd62 deploy: c7d7ba954a 2026-02-16 19:18:11 +00:00
khaneliman 6f45a5586f deploy: 1e53254671 2026-02-15 05:15:32 +00:00
khaneliman da76196ec3 deploy: ff5e5d882c 2026-02-14 21:03:16 +00:00
teto 6fc5e74872 deploy: 05e6dc0f6e 2026-02-14 02:53:46 +00:00
khaneliman afafcd97d9 deploy: 26dfad95d9 2026-02-13 21:29:01 +00:00
khaneliman 80cbb60d04 deploy: b3258dece8 2026-02-13 20:35:54 +00:00
khaneliman 428e4a9203 deploy: bc5652b227 2026-02-13 19:42:00 +00:00
khaneliman 3d3fe94a53 deploy: 5e90b62996 2026-02-13 15:09:44 +00:00
rycee 67760e2b39 deploy: de4cfffc98 2026-02-13 09:33:26 +00:00
khaneliman 00f7574e2f deploy: a6c93262f3 2026-02-13 05:46:00 +00:00
khaneliman 369f63ca3e deploy: 9bdb693810 2026-02-12 22:43:33 +00:00
khaneliman a745ff911e deploy: 2cc195b478 2026-02-12 21:13:54 +00:00
khaneliman e1d7d313d1 deploy: 13a1beb7c9 2026-02-09 13:15:43 +00:00
khaneliman 295285cc0a deploy: afaa85cf32 2026-02-08 21:21:40 +00:00
khaneliman 4d39087360 deploy: 42c607ecb4 2026-02-08 21:15:05 +00:00
khaneliman 7b4201faeb deploy: cbd8a72e5f 2026-02-07 19:11:20 +00:00
khaneliman 4c5e0b59a3 deploy: bbccee8713 2026-02-05 13:59:13 +00:00
khaneliman 885eeeb12c deploy: 04e5203db6 2026-02-05 03:48:12 +00:00
khaneliman d912f24882 deploy: 6c79e409a5 2026-02-05 03:16:50 +00:00
khaneliman 94dcc1eb10 deploy: 689e4a3423 2026-02-05 02:53:58 +00:00
khaneliman d363992f8e deploy: 36349274d7 2026-02-04 00:15:51 +00:00
rycee 1ca5a97378 deploy: 47d542afdd 2026-02-01 13:09:52 +00:00
rycee 64a81e554f deploy: 87d6611d26 2026-02-01 12:09:34 +00:00
rycee 295988e5c6 deploy: 475921375d 2026-01-30 23:00:02 +00:00
rycee 3eaed7c2b7 deploy: 2a08ab21ab 2026-01-29 15:11:18 +00:00
rycee 1f82dd2388 deploy: fdafcac367 2026-01-29 14:45:05 +00:00
teto 424e2812da deploy: 02d763228d 2026-01-28 17:47:02 +00:00
khaneliman 97290b0e51 deploy: ef5da06269 2026-01-28 05:12:00 +00:00
khaneliman e685470dac deploy: 384786dc70 2026-01-26 15:45:39 +00:00
khaneliman 35933d56ee deploy: f9ef8567c7 2026-01-26 15:43:13 +00:00
khaneliman de8f67b294 deploy: c37679d37b 2026-01-26 03:12:56 +00:00
khaneliman fc0373f228 deploy: 63ecc7d495 2026-01-25 21:50:54 +00:00
khaneliman a51957526f deploy: d9da6e6457 2026-01-25 21:47:15 +00:00
khaneliman 72151ff799 deploy: 082a4cd87c 2026-01-23 16:56:39 +00:00
teto 3b9ce2e3b1 deploy: 356a88a574 2026-01-23 16:42:37 +00:00
teto 9f326ae4cd deploy: b0491fe556 2026-01-22 17:25:22 +00:00
khaneliman 8f3e61563c deploy: 2d7b64e32f 2026-01-21 16:53:28 +00:00
rycee 29fadb1628 deploy: d6e3935ec6 2026-01-21 08:39:29 +00:00
khaneliman 262d064193 deploy: 2954aa2944 2026-01-19 05:03:04 +00:00
khaneliman 9e8aab8d57 deploy: 83eeebd967 2026-01-19 05:02:01 +00:00
khaneliman fe7fd95b04 deploy: 3c8cdb4e7e 2026-01-19 04:52:45 +00:00
khaneliman 7c2250eb14 deploy: 521d5ea1a2 2026-01-18 21:03:39 +00:00
khaneliman f1cdebd300 deploy: 83bcb17377 2026-01-18 03:34:05 +00:00
khaneliman 27fc882205 deploy: 1c27557d99 2026-01-18 03:33:51 +00:00
khaneliman d7c79516f8 deploy: 05fd3babab 2026-01-18 02:26:01 +00:00
khaneliman 8566b64f85 deploy: 8fd20c8d48 2026-01-18 02:25:00 +00:00
teto 769c0b4bb0 deploy: 3c71ea724c 2026-01-16 20:42:22 +00:00
khaneliman cf9aa92218 deploy: cae8abb629 2026-01-15 21:27:17 +00:00
teto 62dd732b05 deploy: 27613c7299 2026-01-14 23:52:17 +00:00
khaneliman c367332261 deploy: 57e99ed4a1 2026-01-14 22:26:19 +00:00
khaneliman 33def15a43 deploy: 41cae63118 2026-01-14 22:23:59 +00:00
khaneliman e0bb061ecf deploy: df6eeded85 2026-01-14 15:20:41 +00:00
teto ec89419f21 deploy: a0a505f803 2026-01-14 13:28:22 +00:00
khaneliman 22643738cf deploy: c5d67517bb 2026-01-14 00:12:13 +00:00
khaneliman 740ced602f deploy: 360620ec9d 2026-01-12 20:16:00 +00:00
teto 438eb72b21 deploy: b3f737e70f 2026-01-12 17:56:44 +00:00
teto c565eb8432 deploy: 773170b447 2026-01-12 17:23:18 +00:00
khaneliman b4dafb6057 deploy: 312c4fe0bb 2026-01-10 16:30:06 +00:00
khaneliman cba4d45309 deploy: 0e4217b2c4 2026-01-09 15:18:11 +00:00
khaneliman 6cd2e1931f deploy: b52d47d670 2026-01-09 14:16:44 +00:00
khaneliman d9aebb25ca deploy: cd6e96d56e 2026-01-08 21:53:51 +00:00
khaneliman fe10247d9c deploy: b1b1c68033 2026-01-08 21:33:30 +00:00
khaneliman 30e2e9f66e deploy: 47db0fde35 2026-01-08 18:11:48 +00:00
khaneliman 56bf5fe213 deploy: 3351348827 2026-01-08 17:32:04 +00:00
rycee 446998414e deploy: d1da1de5c2 2026-01-08 13:30:48 +00:00
teto 3259edaa22 deploy: af7f14ddf7 2026-01-08 09:26:23 +00:00
khaneliman a9767188dc deploy: c068188a8e 2026-01-07 18:50:51 +00:00
khaneliman 471a1c9598 deploy: d28cc9f4a6 2026-01-07 15:57:01 +00:00
khaneliman 54bc814c34 deploy: a97b0a0999 2026-01-07 15:48:58 +00:00
teto aab02acbc3 deploy: aea57993a8 2026-01-07 13:23:39 +00:00
teto de261eac51 deploy: 93da26b426 2026-01-07 12:32:13 +00:00
teto 31cfcb1075 deploy: 6e94d8157c 2026-01-06 21:09:30 +00:00
teto abdc40260f deploy: c91dbdf61a 2026-01-06 21:08:00 +00:00
rycee 74e6399d0d deploy: c4eabb884b 2026-01-05 09:53:26 +00:00
teto 2623101113 deploy: 9d1c71f390 2026-01-05 09:35:04 +00:00
rycee 451c6e1a44 deploy: 12cc14271b 2026-01-04 08:33:06 +00:00
rycee d565ab385b deploy: c211298f7e 2026-01-04 08:31:59 +00:00
rycee db610dc844 deploy: 1cfa305fba 2026-01-03 10:48:07 +00:00
rycee dbe26921a0 deploy: 99a037de18 2026-01-03 10:32:24 +00:00
rycee 9381676f7e deploy: 3b3164dfe3 2026-01-03 10:30:18 +00:00
rycee ec1e3f1b31 deploy: 78a8fae57f 2026-01-03 10:24:15 +00:00
rycee a9a5f7f0ee deploy: 18f9d668aa 2026-01-03 09:57:51 +00:00
teto 0e89241d79 deploy: 2f06b72606 2026-01-02 22:06:31 +00:00
rycee 42b190b6ff deploy: d4e4d5cfa3 2026-01-02 16:54:08 +00:00
khaneliman 9879b43fc5 deploy: 64f4dadb80 2025-12-29 22:00:49 +00:00
teto fc36f3b67e deploy: 9d32c214db 2025-12-29 00:52:20 +00:00
khaneliman 1ac9462e03 deploy: 87785ddbc7 2025-12-28 23:18:18 +00:00
khaneliman 699552615b deploy: d7e794fe12 2025-12-28 16:30:45 +00:00
teto 10d8a0733a deploy: 80cca72314 2025-12-28 15:50:16 +00:00
khaneliman 8c91f5b6f6 deploy: b3ae822959 2025-12-27 23:59:32 +00:00
khaneliman f6c21ed203 deploy: bec08ef6e3 2025-12-27 21:12:52 +00:00
teto 75c99f78fd deploy: 2d36a6de2f 2025-12-27 15:55:02 +00:00
khaneliman d710773d9d deploy: 91cdb0e2d5 2025-12-25 17:17:00 +00:00
khaneliman 147641638e deploy: 20728df08f 2025-12-23 22:37:05 +00:00
khaneliman adf4a2a010 deploy: 9c790e687e 2025-12-23 19:46:15 +00:00
khaneliman fb286730c6 deploy: 4dc3c91c50 2025-12-20 23:12:20 +00:00
khaneliman 93668cf38e deploy: c764a377a0 2025-12-20 23:11:53 +00:00
khaneliman 601e21eff4 deploy: bb35f07cc9 2025-12-19 19:20:23 +00:00
khaneliman dbe4de3f29 deploy: 6cdf765eed 2025-12-16 04:14:35 +00:00
khaneliman 5482742afd deploy: 58bf3ecb2d 2025-12-14 03:18:13 +00:00
khaneliman bc6dd68295 deploy: d787ec69c3 2025-12-13 06:09:38 +00:00
khaneliman 669c90a86e deploy: 4767a9c719 2025-12-13 05:54:22 +00:00
khaneliman 2e5cf94bd7 deploy: 0cf525a5be 2025-12-11 19:05:03 +00:00
khaneliman 195f2c7012 deploy: 9b5ac85d79 2025-12-11 18:59:27 +00:00
teto 4c7c1b6043 deploy: 7b34e428f3 2025-12-11 13:57:42 +00:00
khaneliman 85bf4aa8f7 deploy: 13cc1efd78 2025-12-10 03:28:32 +00:00
khaneliman 74e82a783d deploy: a788734077 2025-12-08 05:46:08 +00:00
khaneliman 7a4b2b917c deploy: 6bdf2a68e1 2025-12-08 05:31:27 +00:00
khaneliman 29b476c50d deploy: f9d45d664e 2025-12-08 05:18:25 +00:00
khaneliman 8bf87e1def deploy: 082822b8a6 2025-12-08 05:15:49 +00:00
khaneliman b9d7fd4b92 deploy: 36817384a6 2025-12-06 05:04:36 +00:00
khaneliman 457ee97c47 deploy: 571c5eed1d 2025-12-06 04:36:03 +00:00
khaneliman 1b80f4832e deploy: 35545f71dd 2025-12-05 04:42:05 +00:00
khaneliman 3b46427421 deploy: 68f7b34179 2025-12-05 04:39:48 +00:00
teto 06126dd545 deploy: a521eab881 2025-12-04 16:23:15 +00:00
teto 6133280b8b deploy: d441981b20 2025-12-04 09:17:21 +00:00
khaneliman 87638b2dc4 deploy: fca4cba863 2025-12-03 18:59:43 +00:00
khaneliman e090ba5f03 deploy: 281e9398cc 2025-12-03 04:25:46 +00:00
khaneliman ecc85ab2f7 deploy: 93d907a205 2025-12-03 03:58:17 +00:00
khaneliman f2d1ed3236 deploy: 06f81463bb 2025-12-03 03:39:57 +00:00
teto bd6e362491 deploy: c3d1e5c65a 2025-12-03 03:11:41 +00:00
teto 59b8cfd22c deploy: ff067cfc61 2025-12-02 00:45:54 +00:00
khaneliman a3da32cd18 deploy: 6cedf24ada 2025-12-01 15:35:44 +00:00
khaneliman 22c2c6749d deploy: 784a83782c 2025-11-30 20:29:42 +00:00
teto e631f88e66 deploy: 83053e1d33 2025-11-30 13:49:32 +00:00
teto 4e5a5adf04 deploy: edbb012a21 2025-11-30 13:38:09 +00:00
khaneliman 3fb34139cb deploy: d13041d6f0 2025-11-28 20:15:27 +00:00
khaneliman 870de6da45 deploy: 86ff0ef506 2025-11-28 04:30:47 +00:00
khaneliman ff673d6918 deploy: c220f242cd 2025-11-28 04:28:22 +00:00
khaneliman cac367ad33 deploy: 470d24d809 2025-11-28 04:08:31 +00:00
khaneliman f661b7a8e9 deploy: ad0b497533 2025-11-26 17:17:31 +00:00
khaneliman 22372b343d deploy: f47d2e3821 2025-11-26 16:43:56 +00:00
khaneliman 3c6c7d1add deploy: f4cb25928f 2025-11-26 05:35:55 +00:00
khaneliman 9cbef1a2c9 deploy: a26b74229f 2025-11-26 05:34:01 +00:00
khaneliman c2642d9f43 deploy: 295d90e22d 2025-11-25 13:05:15 +00:00
teto 9d2d40486a deploy: 381f4f8a3a 2025-11-25 01:32:12 +00:00
teto 25f10c301e deploy: 125e40fa68 2025-11-24 17:57:40 +00:00
khaneliman 04972b9f93 deploy: b9c0dae3e4 2025-11-24 15:21:45 +00:00
khaneliman 3e9da748fd deploy: 7702d14879 2025-11-24 05:45:41 +00:00
khaneliman 34b86f4cb0 deploy: 04c27d743d 2025-11-23 03:50:56 +00:00
khaneliman e98687de27 deploy: d4a80f26bf 2025-11-22 20:49:51 +00:00
khaneliman c20bab8526 deploy: 2ed842c9ff 2025-11-22 18:36:41 +00:00
khaneliman a80e8d83c1 deploy: 10cfa0099b 2025-11-21 18:02:29 +00:00
teto 683a449201 deploy: 7538d96535 2025-11-17 14:25:57 +00:00
teto bf2236b625 deploy: 3670a78eee 2025-11-16 17:19:44 +00:00
rycee 106c795bc4 deploy: 7ec621b510 2025-11-15 09:15:00 +00:00
rycee 266aeeda25 deploy: 3ca51e0a33 2025-11-15 08:45:48 +00:00
rycee 929be0e37b deploy: 0b2a2b3f33 2025-11-15 08:35:00 +00:00
khaneliman 68fdb9b551 deploy: 827f2a2337 2025-11-12 16:25:49 +00:00
khaneliman 177e9a6c74 deploy: 33f63da61a 2025-11-12 15:34:08 +00:00
khaneliman 94cc51a496 deploy: dfca39f8af 2025-11-12 15:32:22 +00:00
khaneliman c422705489 deploy: b8645b18b0 2025-11-09 20:50:48 +00:00
khaneliman 4c048e2bf1 deploy: be4a9233dd 2025-11-09 16:13:47 +00:00
khaneliman dd5c6bf906 deploy: fa0c98a81c 2025-11-09 16:12:58 +00:00
khaneliman c0026e4efd deploy: d8efc4bfa7 2025-11-09 15:03:51 +00:00
khaneliman 8d5dfc6ea4 deploy: c053d701d6 2025-11-09 04:10:51 +00:00
khaneliman 2af7f1bc63 deploy: d7b1ece79d 2025-11-09 04:04:38 +00:00
khaneliman 34508b7258 deploy: 2907788315 2025-11-06 16:44:58 +00:00
khaneliman 478812507b deploy: ba15db2a15 2025-11-06 16:28:54 +00:00
khaneliman 6df9e6ae43 deploy: 432bc8a5da 2025-11-06 13:23:37 +00:00
khaneliman 7c112243fa deploy: af119feb17 2025-11-05 18:27:41 +00:00
khaneliman e4529bc7f6 deploy: 34fe48801d 2025-11-04 22:57:06 +00:00
khaneliman fe67cbcad6 deploy: 0a5a165aca 2025-11-04 20:07:32 +00:00
khaneliman 788fcce8a2 deploy: c39c07bf31 2025-11-04 14:35:42 +00:00
khaneliman 5c75354cb4 deploy: 6feb368511 2025-11-04 03:19:42 +00:00
khaneliman bdc8192184 deploy: 1342b821db 2025-11-04 02:26:07 +00:00
khaneliman 35457c900c deploy: 1f34c2c855 2025-11-04 02:25:09 +00:00
khaneliman 7f14266f25 deploy: 95d65dddae 2025-11-03 21:15:40 +00:00
khaneliman 570b6c5b8a deploy: a5fee07792 2025-11-03 15:24:13 +00:00
khaneliman 15bf332bbb deploy: b5ed4afc22 2025-11-03 05:03:00 +00:00
khaneliman f84f1f5ce0 deploy: 32a671dce5 2025-11-03 05:00:53 +00:00
khaneliman b9338abd2f deploy: d9cd40d2da 2025-11-03 04:43:22 +00:00
khaneliman 56f10b620b deploy: 50a5766d51 2025-11-03 03:56:38 +00:00
khaneliman 58d6a93567 deploy: 0fe68257a9 2025-11-03 03:54:16 +00:00
khaneliman b9e27d93e2 deploy: 371608e69c 2025-11-03 03:53:52 +00:00
khaneliman 7c15ba7e17 deploy: 43e205606a 2025-11-02 12:45:05 +00:00
khaneliman cf4ff2bbc5 deploy: c0016dd147 2025-11-01 23:57:47 +00:00
khaneliman 835abd5655 deploy: 87044c5722 2025-11-01 19:29:59 +00:00
khaneliman 18f00370d2 deploy: 4ac96eb21c 2025-10-31 02:40:33 +00:00
khaneliman 6548d1a69d deploy: ce76393bb7 2025-10-30 17:27:06 +00:00
khaneliman e4bc1040d7 deploy: c6d4cb31d7 2025-10-30 13:21:48 +00:00
khaneliman 756c492982 deploy: ca2ab1d877 2025-10-28 15:46:49 +00:00
khaneliman 2bce22c552 deploy: fca3fedcdc 2025-10-28 13:55:09 +00:00
khaneliman defcb57b68 deploy: aa888ffc10 2025-10-27 14:14:24 +00:00
khaneliman 5d87c5b405 deploy: 0a3fb53ee2 2025-10-27 14:12:41 +00:00
khaneliman 3d95b060cb deploy: bbaeb9f1c2 2025-10-27 02:00:02 +00:00
khaneliman 48e90e5fc1 deploy: 988f25531d 2025-10-27 01:59:33 +00:00
khaneliman a47d2e53ab deploy: 255b6a0ef2 2025-10-26 21:22:36 +00:00
khaneliman 1d733d399f deploy: 879e4d9060 2025-10-26 20:37:35 +00:00
khaneliman 280c021b57 deploy: 2aaf924e82 2025-10-26 20:35:08 +00:00
khaneliman ff164bcd30 deploy: 64020f453b 2025-10-26 02:38:52 +00:00
khaneliman b2bcc6944b deploy: 5c54b182ab 2025-10-26 02:31:49 +00:00
khaneliman 44ca3c87e9 deploy: b652e703f1 2025-10-26 02:16:51 +00:00
teto 75f01d2bc3 deploy: 7296022150 2025-10-25 12:34:45 +00:00
khaneliman 99d4968c7d deploy: 5c71d4a730 2025-10-24 00:42:11 +00:00
khaneliman a48845f0c4 deploy: 24cad38b3f 2025-10-24 00:39:09 +00:00
khaneliman 7b0deeb979 deploy: 0adf9ba3f5 2025-10-23 15:59:52 +00:00
khaneliman 7f950d7e18 deploy: 4958aafe7b 2025-10-23 03:49:18 +00:00
khaneliman 66fc131957 deploy: 9b4a2a7c4f 2025-10-21 21:22:41 +00:00
teto 2270b4e13c deploy: c3a5e5f0df 2025-10-20 15:11:37 +00:00
khaneliman ca3e1d1f57 deploy: 189c21cf87 2025-10-20 03:08:42 +00:00
khaneliman 42d197bb56 deploy: aeabc1ac63 2025-10-19 15:25:10 +00:00
khaneliman f6e7e64db5 deploy: 90af98a2fc 2025-10-19 14:49:26 +00:00
khaneliman 4414e08f5d deploy: 6ea30b26cd 2025-10-19 14:48:26 +00:00
khaneliman 5c12b0e9db deploy: c199de6cd8 2025-10-19 14:47:38 +00:00
khaneliman 7c075b3457 deploy: 870883ba11 2025-10-18 17:47:35 +00:00
khaneliman ee467905d2 deploy: 99977131d3 2025-10-18 17:42:17 +00:00
khaneliman 5fd66e5f36 deploy: fc837be107 2025-10-18 14:22:34 +00:00
khaneliman 979572957c deploy: 7e0abd5db6 2025-10-17 00:27:09 +00:00
khaneliman cfb692b751 deploy: 673e47bb86 2025-10-17 00:26:19 +00:00
khaneliman 325a8afa8f deploy: 847669dabf 2025-10-16 19:04:24 +00:00
khaneliman 2b96f8ca0f deploy: 990e5ce679 2025-10-14 17:21:30 +00:00
khaneliman 0f61751c6f deploy: 837525295f 2025-10-14 17:14:06 +00:00
khaneliman 86bbac7b63 deploy: e121f3773f 2025-10-12 23:44:54 +00:00
khaneliman 6abcddcb0d deploy: 904fa32d77 2025-10-12 18:59:48 +00:00
khaneliman 288481dfde deploy: ac16cc25c6 2025-10-12 03:20:11 +00:00
khaneliman 4a17963158 deploy: 7afeff9d81 2025-10-12 03:15:26 +00:00
khaneliman e31a49c831 deploy: 2574bb4496 2025-10-12 03:13:45 +00:00
khaneliman 7451f47d7c deploy: e4c7df3a95 2025-10-12 03:13:32 +00:00
khaneliman 281679cf73 deploy: 4889a25756 2025-10-12 03:12:59 +00:00
khaneliman ddb2fd6b3d deploy: 2fffa806e7 2025-10-12 03:12:44 +00:00
khaneliman 4c6e9da488 deploy: d305eece82 2025-10-10 21:07:37 +00:00
khaneliman 0af98058cc deploy: c7f4214fac 2025-10-10 02:07:23 +00:00
khaneliman 0bbc76f4bc deploy: b27e551270 2025-10-10 02:02:48 +00:00
khaneliman dccde9091c deploy: 87f75c1044 2025-10-09 13:17:13 +00:00
teto 583fc82eb2 deploy: 685d8d85d0 2025-10-09 10:26:04 +00:00
khaneliman c4109df5f8 deploy: 1a09eb84fa 2025-10-07 16:07:03 +00:00
khaneliman 0eeb74afe7 deploy: 6c5025e2bb 2025-10-07 16:03:14 +00:00
khaneliman b080645df9 deploy: 5443ca20ed 2025-10-07 13:29:29 +00:00
khaneliman e5bec84188 deploy: 929535c308 2025-10-06 14:42:41 +00:00
khaneliman 6fd593f9b9 deploy: 7d3d323e90 2025-10-06 13:07:46 +00:00
khaneliman 3c0f1505a3 deploy: b72be79a42 2025-10-06 13:04:44 +00:00
khaneliman 7ac1cb2171 deploy: 06e268d66b 2025-10-05 19:19:57 +00:00
khaneliman f55d0f02b5 deploy: 9070d7d32b 2025-10-05 19:02:00 +00:00
khaneliman 36e77fd075 deploy: 8b62404497 2025-10-05 19:01:41 +00:00
rycee c824f316bd deploy: 5f06ceafc6 2025-10-04 10:19:57 +00:00
khaneliman 4be4e36bdd deploy: edafd6da19 2025-10-04 00:02:11 +00:00
khaneliman 054edbbc02 deploy: bd92e8ee4a 2025-10-03 19:22:15 +00:00
khaneliman 3ec5412999 deploy: dd2b0f7492 2025-10-03 18:37:20 +00:00
khaneliman aedb9959a7 deploy: 004753ae6b 2025-10-01 16:45:55 +00:00
khaneliman f692cc7fc4 deploy: dcf52ade95 2025-09-30 19:46:40 +00:00
khaneliman 24ba56700e deploy: 48e7d82187 2025-09-30 19:42:47 +00:00
rycee 08593b6b61 deploy: 12fa8548fe 2025-09-29 19:06:43 +00:00
khaneliman b1e8ddfa40 deploy: 619ae56929 2025-09-29 00:48:40 +00:00
rycee 35bfb7dbc0 deploy: c75fd8e300 2025-09-28 07:20:01 +00:00
rycee 0fd0348daa deploy: 1dbb3fd2f7 2025-09-28 07:05:11 +00:00
khaneliman 7473c0b89d deploy: 497e2bfa8a 2025-09-26 19:54:36 +00:00
khaneliman 5d69ccc1cf deploy: 35329d44f3 2025-09-26 19:53:43 +00:00
khaneliman 60723a9e48 deploy: fb2ae64bed 2025-09-26 19:53:24 +00:00
khaneliman 932f2846c6 deploy: 6238bbc0ae 2025-09-26 15:15:03 +00:00
rycee d18d9cb3e6 deploy: 173a29f735 2025-09-26 08:50:14 +00:00
khaneliman 21b38df7e9 deploy: c1a47eae05 2025-09-26 02:29:03 +00:00
khaneliman 0aacbb38d4 deploy: 39d26c1686 2025-09-25 14:27:35 +00:00
rycee 4d4dafa033 deploy: ade850153b 2025-09-25 06:54:11 +00:00
rycee 4f6e63123a deploy: e2ecfbf6d0 2025-09-25 06:27:29 +00:00
khaneliman 9e1834f1a5 deploy: 2e260431fc 2025-09-24 21:12:21 +00:00
khaneliman a4f304de6e deploy: f678263ecf 2025-09-24 13:02:17 +00:00
khaneliman 4ae063cbc4 deploy: 6ce2e18007 2025-09-24 05:34:12 +00:00
khaneliman 396de6eba0 deploy: cb68b5cd6a 2025-09-24 05:32:21 +00:00
khaneliman 3fe1f724b2 deploy: 131f4e22c3 2025-09-23 18:45:09 +00:00
khaneliman 2b7a18a3a1 deploy: 5468c92a23 2025-09-23 17:27:18 +00:00
khaneliman d8e185d9da deploy: 9a2dc0efbc 2025-09-23 02:09:41 +00:00
teto 09ae39619a deploy: 9b6e609a6e 2025-09-22 11:37:55 +00:00
khaneliman bcc34c1ea1 deploy: 939e91e1cf 2025-09-21 14:19:21 +00:00
khaneliman b7c0ebd725 deploy: f3ff73a5e1 2025-09-21 14:16:54 +00:00
khaneliman f8538d5ce5 deploy: edc7468e12 2025-09-20 13:42:06 +00:00
khaneliman 65171bd629 deploy: d5fb6ebc4f 2025-09-20 13:41:40 +00:00
khaneliman 25c485fdc4 deploy: 55b1f5b7b1 2025-09-19 15:44:26 +00:00
rycee 0c6bcf6d27 deploy: efcba687d3 2025-09-19 15:20:31 +00:00
khaneliman 1e575f7573 deploy: e387519338 2025-09-19 13:34:32 +00:00
khaneliman 4dfce7eae1 deploy: 363007f129 2025-09-19 02:59:19 +00:00
khaneliman ef83b2b3aa deploy: 3cb08dd360 2025-09-19 02:37:37 +00:00
khaneliman 986b8433e5 deploy: 891d675cd6 2025-09-19 02:19:04 +00:00
khaneliman ba62795936 deploy: 32bfbc996e 2025-09-19 02:18:37 +00:00
rycee ab6e141fda deploy: b5698ed57d 2025-09-18 14:57:05 +00:00
rycee e9d088f671 deploy: be9c10d4a7 2025-09-18 08:23:07 +00:00
khaneliman 3fff69e139 deploy: a504aee7d4 2025-09-18 01:59:46 +00:00
rycee f8cea71fd8 deploy: 9f408dc51c 2025-09-17 14:49:26 +00:00
khaneliman 1e0b7a2760 deploy: b035546241 2025-09-17 12:24:36 +00:00
khaneliman ca36eee75d deploy: fb928abb67 2025-09-17 05:07:59 +00:00
khaneliman c937b0c3d2 deploy: 10f5a0cc4b 2025-09-17 05:07:21 +00:00
khaneliman 2358416875 deploy: fad8e3033e 2025-09-17 03:32:51 +00:00
khaneliman b2f7e796fb deploy: 6efc49be7c 2025-09-17 02:51:20 +00:00
khaneliman e4844fe0e1 deploy: 0a2145eae2 2025-09-17 02:49:03 +00:00
khaneliman 654efaf77e deploy: 6c1a1efa02 2025-09-17 02:48:12 +00:00
khaneliman 3b8ffa2d81 deploy: 5820376beb 2025-09-16 04:44:27 +00:00
khaneliman 1dbdce29cd deploy: 5e06d0f184 2025-09-15 04:30:08 +00:00
khaneliman 1ddfd3381c deploy: 17a1004948 2025-09-14 00:33:30 +00:00
khaneliman c7577683b2 deploy: c3abf8ea1a 2025-09-14 00:32:10 +00:00
khaneliman 2caf76ebbb deploy: 768a7042a6 2025-09-14 00:26:22 +00:00
khaneliman 3551662097 deploy: e286f848a0 2025-09-14 00:08:59 +00:00
khaneliman 59a2599726 deploy: a3fcc92180 2025-09-12 17:36:59 +00:00
khaneliman 9f154c6d97 deploy: 9eab59f3e7 2025-09-12 04:10:40 +00:00
rycee 5a44d3ef81 deploy: 6d7c11a0ad 2025-09-11 13:52:44 +00:00
rycee eb7481a5db deploy: b7112b12ea 2025-09-11 08:17:21 +00:00
khaneliman 1eb2ba1434 deploy: a60021a8c9 2025-09-10 03:44:36 +00:00
khaneliman d513b5b92a deploy: d587e11cef 2025-09-09 18:53:59 +00:00
khaneliman 388e48e016 deploy: f35703b412 2025-09-07 14:47:16 +00:00
khaneliman 54bcd5c779 deploy: 9f5966aa05 2025-09-07 14:29:07 +00:00
khaneliman d2ada5db78 deploy: a7408ba6da 2025-09-07 14:08:48 +00:00
khaneliman f96dd8edd0 deploy: b08f873777 2025-09-04 13:19:24 +00:00
khaneliman 046b0327a2 deploy: ed1a98c375 2025-09-04 02:55:49 +00:00
khaneliman 7cc14c08ab deploy: b21c1a61a7 2025-09-04 02:50:56 +00:00
khaneliman 84107379eb deploy: 6159629d05 2025-09-03 12:43:34 +00:00
khaneliman e4c0636e8e deploy: 30fc1b5326 2025-09-02 19:49:25 +00:00
khaneliman 469efb023a deploy: a1316b0a77 2025-09-02 18:21:00 +00:00
khaneliman 35232ff049 deploy: 1ecfd8e562 2025-09-02 04:38:23 +00:00
khaneliman e2f43bd954 deploy: fccb44df77 2025-08-31 23:40:14 +00:00
khaneliman 93819f9988 deploy: b7cc2466f1 2025-08-31 23:33:41 +00:00
khaneliman ce842e06d2 deploy: a48dd228d9 2025-08-31 23:30:36 +00:00
khaneliman 0f69accc2a deploy: f27974d3b4 2025-08-31 16:54:40 +00:00
khaneliman e61ab5fc0e deploy: e44549074a 2025-08-31 14:27:07 +00:00
khaneliman cc09326220 deploy: 99a69bdf8a 2025-08-30 18:53:58 +00:00
khaneliman 1891bec349 deploy: 77a71380c3 2025-08-29 19:47:33 +00:00
khaneliman e23d2f4e59 deploy: a3d90c996f 2025-08-29 19:47:20 +00:00
khaneliman 565144e02a deploy: 2c4ef7d717 2025-08-26 22:25:04 +00:00
khaneliman d1f7eddc1e deploy: 3882f88691 2025-08-26 22:13:07 +00:00
khaneliman a225036f99 deploy: 59aabcd3db 2025-08-26 21:51:16 +00:00
khaneliman 6c5092d7b7 deploy: e49a2511fe 2025-08-26 21:49:45 +00:00
khaneliman 7fc1731f8e deploy: 32940bcae8 2025-08-26 21:49:10 +00:00
khaneliman f6a64b3b35 deploy: 6911d3e7f4 2025-08-21 21:04:23 +00:00
khaneliman d8e0dbd15b deploy: 3001400e9f 2025-08-21 21:03:40 +00:00
khaneliman 9bbb5573cb deploy: 282b4c98de 2025-08-21 05:49:32 +00:00
rycee 06a914d19b deploy: 0e0a16b342 2025-08-19 15:55:31 +00:00
khaneliman 23ad68431e deploy: 8af2e064f9 2025-08-19 11:13:00 +00:00
khaneliman f924ae77e7 deploy: c613ac14f5 2025-08-19 02:19:36 +00:00
khaneliman 2fdc3b84a0 deploy: e293a1a12f 2025-08-19 02:18:17 +00:00
khaneliman bb6176a891 deploy: 0d1e116e4f 2025-08-19 02:17:14 +00:00
khaneliman ddc202de3c deploy: 0a06e46a3b 2025-08-18 17:27:21 +00:00
khaneliman 7a5bf654ad deploy: bc01493178 2025-08-17 14:47:22 +00:00
khaneliman 7568f926eb deploy: 3dcae8af51 2025-08-17 14:46:23 +00:00
khaneliman 12a2c56b9b deploy: 1daeb0638a 2025-08-17 14:45:48 +00:00
khaneliman a5696a6265 deploy: 8b4ac14968 2025-08-17 02:33:59 +00:00
khaneliman 90a780dda2 deploy: 567312006a 2025-08-17 02:31:43 +00:00
khaneliman 9e17d6e02a deploy: 2a749f4790 2025-08-16 03:13:10 +00:00
khaneliman 1d70d9e856 deploy: 11626a4383 2025-08-15 03:47:04 +00:00
khaneliman f469c31244 deploy: 27a26be51f 2025-08-12 04:56:37 +00:00
khaneliman 7ee13bd17f deploy: 67393957c2 2025-08-11 15:02:37 +00:00
khaneliman e472d81454 deploy: 18ea6d7a8f 2025-08-11 15:02:05 +00:00
khaneliman 177ffe7cc3 deploy: 627a3932b9 2025-08-11 14:05:17 +00:00
khaneliman c0f3908591 deploy: e11d6c321f 2025-08-11 14:03:22 +00:00
khaneliman 63e5b9cb7f deploy: 0d492b89d1 2025-08-11 04:24:42 +00:00
khaneliman 585826a0ca deploy: 91586008a2 2025-08-10 16:19:16 +00:00
khaneliman 37c09af562 deploy: 715ecee451 2025-08-10 16:04:21 +00:00
khaneliman 86dd6a8727 deploy: cc2fa2331a 2025-08-08 00:39:55 +00:00
khaneliman 00633b560e deploy: 5de16c704b 2025-08-07 19:09:38 +00:00
khaneliman 2eb78d1bc4 deploy: faa5b42eca 2025-08-07 19:05:23 +00:00
khaneliman 2c6dfc3b38 deploy: c7acf2b1bf 2025-08-07 13:40:24 +00:00
khaneliman 7402fe53a2 deploy: 6275d1fc57 2025-08-07 13:31:06 +00:00
khaneliman a6ceecd7a8 deploy: 62fdc8d410 2025-08-07 00:09:01 +00:00
khaneliman 131ef20840 deploy: 2a29968912 2025-08-06 17:40:46 +00:00
khaneliman ef505f0907 deploy: 53bf4fab30 2025-08-06 17:34:25 +00:00
khaneliman e9023ad8ed deploy: 88913c98fe 2025-08-06 15:58:06 +00:00
khaneliman a0cf5b51ba deploy: ad5d2b4aa7 2025-08-06 05:16:38 +00:00
khaneliman 2a5074b45e deploy: a379077675 2025-08-06 01:34:41 +00:00
khaneliman 2440876d52 deploy: b7ee8deefc 2025-08-05 19:10:53 +00:00
khaneliman 4937465963 deploy: 74b4edc2d2 2025-08-05 19:06:36 +00:00
khaneliman 976965b88d deploy: 6d1fddb13b 2025-08-05 19:05:38 +00:00
khaneliman 719b1b59fd deploy: 0cda19d420 2025-08-05 19:05:17 +00:00
khaneliman c52b166250 deploy: 36ad7d25fb 2025-08-05 19:04:01 +00:00
khaneliman dc5f94e1d7 deploy: e6e2f43a62 2025-08-02 22:47:10 +00:00
rycee 20f80d9e94 deploy: d492e3c381 2025-08-02 21:03:09 +00:00
khaneliman 23ca460e2b deploy: 7035020a50 2025-07-31 17:42:57 +00:00
khaneliman 26e05e1087 deploy: 4e97102bd4 2025-07-31 17:42:15 +00:00
khaneliman 7f147d5ed5 deploy: 4bf124678b 2025-07-29 21:42:20 +00:00
khaneliman 6f2435be78 deploy: 2f588d275e 2025-07-29 18:12:45 +00:00
khaneliman bf73f04d49 deploy: 03fdb31290 2025-07-29 17:21:13 +00:00
rycee f4d0b320ab deploy: a7b7c6f520 2025-07-28 09:13:21 +00:00
khaneliman bc2605cfdc deploy: 72cc1e3134 2025-07-27 12:04:46 +00:00
rycee 9095232de9 deploy: ed1eeeeee6 2025-07-27 05:05:08 +00:00
khaneliman 8485cf4573 deploy: 2b73c2fcca 2025-07-26 22:12:44 +00:00
khaneliman ff2ba19102 deploy: a1817d1c0e 2025-07-25 19:04:07 +00:00
khaneliman 3dbed0c68d deploy: 9fca491587 2025-07-25 18:16:19 +00:00
khaneliman 2270eb3381 deploy: 308b8570ec 2025-07-25 18:02:04 +00:00
khaneliman 653af80d86 deploy: 060824a69b 2025-07-25 17:45:00 +00:00
khaneliman 310d3d5727 deploy: a35f6b6043 2025-07-24 20:02:10 +00:00
khaneliman 9ccef08496 deploy: 64796151f7 2025-07-24 16:06:39 +00:00
khaneliman 6da5d437e3 deploy: 1fde6fb1be 2025-07-23 18:14:07 +00:00
khaneliman a8062cfdd3 deploy: e9c599e40c 2025-07-23 15:43:35 +00:00
rycee 868fd9aff8 deploy: de448dcb57 2025-07-22 09:09:59 +00:00
khaneliman bf451d9da2 deploy: 13a83d1b65 2025-07-21 00:15:49 +00:00
khaneliman 5ecdc21dae deploy: 7834432ca5 2025-07-21 00:13:25 +00:00
khaneliman 3f53295f1f deploy: dcfd70f80f 2025-07-18 00:32:06 +00:00
khaneliman 5e29d7e317 deploy: 2d55a52963 2025-07-17 19:22:22 +00:00
khaneliman 5c3f5339c4 deploy: 8eb2f2a26a 2025-07-17 19:13:40 +00:00
khaneliman e3e54e9fd2 deploy: 460f1e9af9 2025-07-17 16:00:04 +00:00
khaneliman 98e82fde98 deploy: f7a45b0831 2025-07-15 15:23:04 +00:00
khaneliman 9e2f19783b deploy: 7969ed8baa 2025-07-13 22:51:54 +00:00
khaneliman 189cddd4b9 deploy: fc25398450 2025-07-13 02:29:10 +00:00
khaneliman 3bb44a39ee deploy: 908200d680 2025-07-13 01:42:44 +00:00
khaneliman f7851b6939 deploy: ae62fd8ad8 2025-07-12 16:42:54 +00:00
khaneliman 0e6a8b78ac deploy: 7c6f7377cc 2025-07-12 01:34:07 +00:00
khaneliman d8e1d220b2 deploy: 03bf1bd8d6 2025-07-11 20:06:38 +00:00
khaneliman 15d1b11815 deploy: f5b36e5ece 2025-07-11 16:54:44 +00:00
khaneliman 5743aa5ba5 deploy: e90b28967c 2025-07-11 15:16:45 +00:00
khaneliman 2d3a4465e6 deploy: fab659b346 2025-07-11 03:02:28 +00:00
khaneliman b5ee47dc20 deploy: 729c5e5465 2025-07-10 20:37:50 +00:00
khaneliman 0de9800ad1 deploy: d52da303ef 2025-07-10 20:34:10 +00:00
khaneliman 7c243d902d deploy: d81cb050f5 2025-07-10 19:24:08 +00:00
teto 041d3926bf deploy: bec8ff3981 2025-07-09 12:07:12 +00:00
khaneliman e6bb2deab7 deploy: 218da00bfa 2025-07-08 15:57:43 +00:00
khaneliman 2d4cb53365 deploy: 5751fa774f 2025-07-08 14:52:58 +00:00
khaneliman 5924c8005e deploy: c00730550e 2025-07-08 14:52:36 +00:00
khaneliman f7632aebaa deploy: 923782b2c6 2025-07-08 14:47:25 +00:00
khaneliman 7ec3fcbd83 deploy: fd9e55f5fa 2025-07-06 17:51:35 +00:00
khaneliman ec96f846b6 deploy: 9d21f9985e 2025-07-06 17:43:18 +00:00
khaneliman aab44b98ac deploy: b4486ff44a 2025-07-06 15:41:21 +00:00
khaneliman 8772ed5dd8 deploy: 153e680c42 2025-07-06 14:36:43 +00:00
khaneliman dac8639d75 deploy: 502d9b7d30 2025-07-06 13:59:13 +00:00
khaneliman a7d274857f deploy: af8a884164 2025-07-05 21:31:49 +00:00
khaneliman 21d3804fc4 deploy: 5a49fe448e 2025-07-05 21:03:43 +00:00
khaneliman a043646583 deploy: f117b383dd 2025-07-05 15:33:44 +00:00
teto 77513392bf deploy: d75a547415 2025-07-05 15:27:22 +00:00
khaneliman d04e3fd715 deploy: 36c57c6a1d 2025-07-05 05:27:21 +00:00
khaneliman 6881832c8d deploy: e8da7372fd 2025-07-05 04:46:32 +00:00
khaneliman 955b12ab3f deploy: 57d1027e1e 2025-07-05 00:55:46 +00:00
khaneliman d83ddb077b deploy: 83f978812c 2025-07-04 00:35:48 +00:00
khaneliman ddec2d493a deploy: 479f888967 2025-07-01 15:48:09 +00:00
khaneliman 6ea164796e deploy: 4074121796 2025-07-01 02:13:14 +00:00
teto 1a90ecafbb deploy: 0f21ed5182 2025-06-30 15:19:59 +00:00
khaneliman e47a26dad4 deploy: f6deff178c 2025-06-29 23:29:12 +00:00
khaneliman 824706c800 deploy: a4f9ab0005 2025-06-29 23:10:47 +00:00
khaneliman ea66a576f4 deploy: 080e8b48b0 2025-06-26 21:37:36 +00:00
khaneliman b4b3b1a3c0 deploy: d07e9cceb4 2025-06-24 01:58:06 +00:00
khaneliman 1a71d9e363 deploy: c9d8158bc5 2025-06-24 01:31:37 +00:00
khaneliman 31468d8d35 deploy: 86402a17b6 2025-06-23 21:22:21 +00:00
khaneliman 8a860edc51 deploy: f5098b0740 2025-06-23 20:49:19 +00:00
khaneliman 7570abe580 deploy: 4c9e99e8e8 2025-06-23 04:59:28 +00:00
khaneliman 796af3f04f deploy: 520fc4b50a 2025-06-23 03:55:59 +00:00
khaneliman 3c05e61f88 deploy: 6fa01d524b 2025-06-23 03:52:42 +00:00
khaneliman 355240ce09 deploy: 8638426397 2025-06-19 03:41:57 +00:00
khaneliman 1d10324acd deploy: 0edffd088e 2025-06-16 20:52:03 +00:00
khaneliman e82536e0a1 deploy: 66523b0efe 2025-06-16 00:21:55 +00:00
khaneliman d08eda2651 deploy: 30b6daf872 2025-06-15 22:24:18 +00:00
teto 31b2a79a70 deploy: 04672588c6 2025-06-15 15:00:02 +00:00
khaneliman 8fc7317bde deploy: dceefa87dc 2025-06-15 13:26:56 +00:00
teto 10aeed469b deploy: c5f3451533 2025-06-14 23:47:26 +00:00
teto 2564fd508d deploy: 8fabeb9c14 2025-06-14 21:06:50 +00:00
teto 5fa36205f1 deploy: 79dfd9aa29 2025-06-13 13:26:08 +00:00
rycee 31f8e0596b deploy: f111393987 2025-06-13 08:09:10 +00:00
khaneliman 65780e2706 deploy: 18f3a0d21c 2025-06-13 01:51:33 +00:00
khaneliman b3b90f3fc3 deploy: 0215073a70 2025-06-13 01:50:21 +00:00
khaneliman ee928627b0 deploy: 5ab15331c2 2025-06-13 01:47:17 +00:00
teto a84b6e185d deploy: 450f06ec3c 2025-06-11 07:58:28 +00:00
khaneliman aba86644a2 deploy: 427c96044f 2025-06-10 03:34:06 +00:00
khaneliman dafcf7f738 deploy: e9763eb195 2025-06-10 03:31:21 +00:00
teto aa8b285dd2 deploy: 74d196c994 2025-06-09 15:45:38 +00:00
khaneliman 7758ee652c deploy: 35e1f5a7c2 2025-06-09 14:26:02 +00:00
khaneliman d6cf1cff1b deploy: 2835e8ba0a 2025-06-08 16:27:51 +00:00
teto a4e2db9b5d deploy: f23b0935a3 2025-06-08 15:21:44 +00:00
khaneliman ff35211dc9 deploy: 627157cceb 2025-06-08 04:56:44 +00:00
khaneliman 7b0c09526b deploy: bd8946c773 2025-06-08 04:52:21 +00:00
khaneliman e1188d4dc0 deploy: 2d7d65f65b 2025-06-06 20:58:16 +00:00
khaneliman 02279b2169 deploy: 1d595a5b64 2025-06-06 20:52:06 +00:00
khaneliman 4faab1bed9 deploy: c18a767948 2025-06-06 14:43:27 +00:00
khaneliman 4743ca7301 deploy: 355c7d09ed 2025-06-06 02:51:01 +00:00
khaneliman 1e508da3b7 deploy: bbb31d8352 2025-06-06 02:46:07 +00:00
khaneliman 4a280fe9fd deploy: de8463dd3e 2025-06-06 02:12:25 +00:00
khaneliman 1af9f7f360 deploy: 13a45ede6c 2025-06-05 13:46:17 +00:00
khaneliman 1f9146d659 deploy: 86b95fc1ed 2025-06-04 18:36:30 +00:00
teto cf7237aa58 deploy: ffab96a8b4 2025-06-04 14:58:39 +00:00
teto 5a8d2018d6 deploy: 3830a21aa2 2025-06-04 12:06:34 +00:00
khaneliman ed9f64628e deploy: 593b0c667d 2025-06-03 12:58:37 +00:00
khaneliman 40a7419d91 deploy: c7fdb7e90b 2025-06-02 02:11:29 +00:00
khaneliman e9a57141c7 deploy: 379c9fb858 2025-05-30 17:47:28 +00:00
khaneliman 97fbf36d79 deploy: 214f9bd3a6 2025-05-30 15:27:25 +00:00
khaneliman be5c929432 deploy: d36ac1f0db 2025-05-30 15:17:17 +00:00
khaneliman 7a7053d15d deploy: 4e9efaa68b 2025-05-30 02:08:20 +00:00
khaneliman 1cecbc6223 deploy: 8a4b382627 2025-05-30 00:13:59 +00:00
khaneliman c87fd312ba deploy: 2f4db1cd5b 2025-05-30 00:13:47 +00:00
khaneliman 53dd70fcfa deploy: 85a27991d5 2025-05-29 03:35:59 +00:00
khaneliman f988a5d676 deploy: 13ed57aaa6 2025-05-29 03:31:03 +00:00
khaneliman d052cd6a62 deploy: 115344f32b 2025-05-29 02:59:11 +00:00
khaneliman 3e82fa4aa6 deploy: ad22169efa 2025-05-28 00:11:10 +00:00
khaneliman b9b14f5a63 deploy: 8cb8a04cb1 2025-05-28 00:08:33 +00:00
khaneliman 518e6ff6e7 deploy: d23d20f55d 2025-05-26 02:47:39 +00:00
khaneliman 8a4cd43915 deploy: a45222c731 2025-05-26 02:17:14 +00:00
khaneliman 987698c7de deploy: c1e6710362 2025-05-25 00:55:37 +00:00
khaneliman 2154eb00e1 deploy: c3d48a17aa 2025-05-24 23:56:13 +00:00
khaneliman ae3ef67592 deploy: cf9ff6d993 2025-05-24 23:39:43 +00:00
khaneliman 48284524f9 deploy: 7419250703 2025-05-23 05:43:29 +00:00
khaneliman 0eea7965cd deploy: 29dda415f5 2025-05-20 17:44:45 +00:00
khaneliman a9cdfbf1be deploy: d3f5d870e3 2025-05-20 15:05:08 +00:00
khaneliman c17f00a50f deploy: 2097441633 2025-05-20 13:11:47 +00:00
rycee 8b1eb26dee deploy: ee85cfc5c1 2025-05-18 09:08:53 +00:00
khaneliman 0873e7ebd1 deploy: ae75532909 2025-05-16 23:48:07 +00:00
khaneliman 2b3ff7cb96 deploy: 74d31e1165 2025-05-16 20:30:20 +00:00
khaneliman 3b9e258024 deploy: a1a72d18ee 2025-05-16 03:51:02 +00:00
khaneliman 249dca5754 deploy: 098e365dd8 2025-05-15 20:17:42 +00:00
khaneliman 997fcd4317 deploy: dbc90cc3ae 2025-05-15 18:34:46 +00:00
khaneliman e6dd0f4627 deploy: b022c9e3b8 2025-05-15 18:33:44 +00:00
khaneliman e2cd98d063 deploy: c09ccd7d39 2025-05-15 18:08:10 +00:00
khaneliman 3de1aa9386 deploy: ad1e8bb782 2025-05-15 18:00:05 +00:00
khaneliman d9f39162bc deploy: b44c39cf46 2025-05-14 00:07:08 +00:00
khaneliman 27024bbc73 deploy: 8d832ddfda 2025-05-13 17:06:26 +00:00
khaneliman 64265c1195 deploy: df556f2a17 2025-05-13 14:42:05 +00:00
khaneliman c5e72d88c3 deploy: 535a541b42 2025-05-13 03:19:48 +00:00
khaneliman 880abebaae deploy: 012cc9e166 2025-05-13 03:19:13 +00:00
khaneliman c421d55d19 deploy: 665c49e0c2 2025-05-13 03:18:41 +00:00
khaneliman 6d31b1af9e deploy: 0b24658ec0 2025-05-12 18:09:41 +00:00
khaneliman a712e86903 deploy: 5879531462 2025-05-12 17:15:20 +00:00
khaneliman bdd9b32d98 deploy: c74665abd6 2025-05-12 00:29:56 +00:00
khaneliman b1b25c7786 deploy: 7a3f3e5507 2025-05-11 23:54:30 +00:00
khaneliman f92f0defaf deploy: 910292fe34 2025-05-11 23:53:01 +00:00
khaneliman d58c1d7495 deploy: ecb2162422 2025-05-11 23:52:06 +00:00
khaneliman 36a33169f7 deploy: 5daf23a38f 2025-05-11 23:48:43 +00:00
khaneliman 027f061c15 deploy: de496c9ccb 2025-05-11 01:09:00 +00:00
rycee e4c2d0a59a deploy: 9ef92f1c6b 2025-05-10 21:31:10 +00:00
khaneliman f83e99c059 deploy: 13289f0642 2025-05-10 21:16:58 +00:00
khaneliman f839796342 deploy: 12e6738596 2025-05-10 16:01:29 +00:00
khaneliman 5f591cfb8d deploy: b706037a60 2025-05-09 13:34:03 +00:00
khaneliman 5ccacb3b11 deploy: 8f723d6135 2025-05-09 13:22:09 +00:00
khaneliman b5754843ce deploy: 9e10d73cea 2025-05-09 13:20:57 +00:00
khaneliman 66b94c6bf1 deploy: ce1ba0e9f3 2025-05-09 13:19:57 +00:00
khaneliman 30666cd636 deploy: 8d2ee39915 2025-05-09 13:18:35 +00:00
khaneliman 41e4ba4cdc deploy: 5d428b68dd 2025-05-09 13:17:58 +00:00
khaneliman 3b9dc239b6 deploy: a51598236f 2025-05-08 18:02:28 +00:00
khaneliman d79415bb17 deploy: 3c59c5132b 2025-05-08 15:46:18 +00:00
khaneliman e634bb045e deploy: cea975d46d 2025-05-08 13:17:27 +00:00
khaneliman 6662cafd0b deploy: 2ede089d11 2025-05-08 13:16:42 +00:00
khaneliman 8a23e42609 deploy: 708074ae6d 2025-05-07 15:35:11 +00:00
khaneliman 32d90c00e7 deploy: 35535345be 2025-05-07 02:36:45 +00:00
khaneliman 073c94ba63 deploy: 60964ff845 2025-05-07 02:07:09 +00:00
khaneliman c0531c2437 deploy: 8a318641ac 2025-05-05 02:47:18 +00:00
khaneliman 1c5347c47b deploy: 5f1f472565 2025-05-05 02:45:31 +00:00
khaneliman 2ef5211b59 deploy: 8167af657c 2025-05-04 14:18:00 +00:00
khaneliman 90f5c3da21 deploy: 621986fed3 2025-05-04 00:12:52 +00:00
khaneliman c214e50ecd deploy: 64f7d5e6b9 2025-05-04 00:12:00 +00:00
khaneliman 4531ec7b10 deploy: d1bbab6b04 2025-05-04 00:10:48 +00:00
khaneliman 0f39f567df deploy: 123297c57e 2025-05-03 03:10:40 +00:00
khaneliman 9e9c52d8ff deploy: d6b0c05457 2025-05-02 16:15:12 +00:00
khaneliman 0191fd7fbc deploy: f15be4feb6 2025-05-02 13:23:26 +00:00
khaneliman 0c355cdbce deploy: c5cad190ba 2025-05-02 13:19:03 +00:00
khaneliman a1bbac3837 deploy: 669e813c75 2025-05-02 13:18:15 +00:00
rycee 1684e54a82 deploy: f045bd46b7 2025-05-02 09:12:21 +00:00
khaneliman 891a14fa91 deploy: 81431b6d6f 2025-05-01 20:12:18 +00:00
khaneliman 17681732cf deploy: 9389f373be 2025-04-30 01:38:12 +00:00
khaneliman 370840c811 deploy: e9c80e277b 2025-04-30 01:37:37 +00:00
khaneliman b7ad813898 deploy: c803a38927 2025-04-29 02:28:20 +00:00
khaneliman 000a855a52 deploy: d0d9d0a145 2025-04-28 16:50:13 +00:00
khaneliman 9b050f648a deploy: 6f974faa19 2025-04-28 15:13:38 +00:00
khaneliman 778749742d deploy: 69c60b035e 2025-04-28 14:48:31 +00:00
khaneliman ecefc32f48 deploy: be7cf1709b 2025-04-28 03:16:24 +00:00
khaneliman 93c184ac99 deploy: 7b2aae3fb3 2025-04-27 19:31:10 +00:00
khaneliman 56b9d633aa deploy: 2a264c17d5 2025-04-27 19:30:54 +00:00
khaneliman 9506d48aaf deploy: 0fbd8207e9 2025-04-27 16:37:00 +00:00
khaneliman 2a7e8ba1e1 deploy: 50bb714a82 2025-04-27 14:33:30 +00:00
khaneliman 0aa2b2c3ab deploy: 2f5819a962 2025-04-26 21:41:03 +00:00
khaneliman c97de1f2f9 deploy: 4d2d322317 2025-04-26 00:40:42 +00:00
khaneliman 55843bbb90 deploy: 542078066b 2025-04-25 15:12:12 +00:00
khaneliman 84126801a8 deploy: 6d1f834ca6 2025-04-23 16:52:33 +00:00
khaneliman d2edf8e5e1 deploy: 1d0e13904b 2025-04-23 03:48:52 +00:00
khaneliman cfcdefaf6f deploy: f1aabf1deb 2025-04-23 01:46:34 +00:00
khaneliman 596a8b5675 deploy: c42f04c83f 2025-04-23 01:45:43 +00:00
khaneliman 961f3e4655 deploy: b99e3e46b8 2025-04-22 22:53:16 +00:00
khaneliman ebbe53fa94 deploy: 6899001a76 2025-04-22 19:31:36 +00:00
khaneliman 363524d1a8 deploy: 22b326b42b 2025-04-21 17:27:08 +00:00
khaneliman 4ea9fb4896 deploy: be4e5ec62c 2025-04-21 17:26:46 +00:00
khaneliman e6ed255539 deploy: 08b85bd000 2025-04-21 17:26:15 +00:00
khaneliman 06b27aa14b deploy: ca8367117a 2025-04-21 17:24:02 +00:00
khaneliman 557b73f139 deploy: 3fbe9a2b76 2025-04-21 03:10:56 +00:00
khaneliman 4c4868bf64 deploy: 14eda3db4e 2025-04-21 03:02:59 +00:00
khaneliman 92ef6714f7 deploy: b0cc092405 2025-04-21 01:22:40 +00:00
khaneliman e89709f6c8 deploy: b71ca26961 2025-04-20 21:33:22 +00:00
khaneliman 866cd677f8 deploy: a0461b67ff 2025-04-20 20:48:37 +00:00
khaneliman a37e0354b3 deploy: 642d3e3bad 2025-04-20 20:21:51 +00:00
khaneliman 9fb333e468 deploy: 6a676ee476 2025-04-20 20:17:19 +00:00
khaneliman 45c5d07f46 deploy: f98314bb06 2025-04-20 05:53:58 +00:00
khaneliman 5ab73e7819 deploy: bb8d286649 2025-04-20 05:30:36 +00:00
khaneliman 5cd8bada21 deploy: e8b68f99c6 2025-04-20 05:25:19 +00:00
khaneliman cda2f4d2c1 deploy: 20705949f1 2025-04-20 05:12:48 +00:00
khaneliman c0b102e17b deploy: 9676e8a52a 2025-04-19 14:06:50 +00:00
khaneliman c11b723597 deploy: fc09cb7aaa 2025-04-18 18:36:31 +00:00
khaneliman f51d23ee25 deploy: 5e6a8203ce 2025-04-18 14:39:04 +00:00
khaneliman b2b3e3d9f1 deploy: e72178b84e 2025-04-17 18:04:08 +00:00
khaneliman cf32f6aa7e deploy: cb65c81403 2025-04-16 19:42:09 +00:00
khaneliman 30e2ec1ff8 deploy: b35bccc32d 2025-04-16 18:42:16 +00:00
khaneliman 3904776c7d deploy: 7ede02c32a 2025-04-16 16:29:12 +00:00
khaneliman 9132b37ea7 deploy: d8263c0b84 2025-04-16 16:16:01 +00:00
khaneliman 5cee13a82f deploy: 5a096a8822 2025-04-14 19:37:33 +00:00
khaneliman 09765f0bde deploy: ac3c1f4fa4 2025-04-13 22:47:45 +00:00
khaneliman 6ece7e55ad deploy: 4f898f373d 2025-04-13 19:00:14 +00:00
khaneliman fafc8a41d1 deploy: b74b22bb61 2025-04-11 19:44:09 +00:00
khaneliman 03d31afbb7 deploy: e43c6bcb10 2025-04-11 14:06:53 +00:00
khaneliman c786271e0d deploy: f0c69ede70 2025-04-11 13:16:17 +00:00
khaneliman 125c9b2786 deploy: f1ffd097e7 2025-04-11 03:56:12 +00:00
khaneliman 5bf0448f5c deploy: 47eb2d80f9 2025-04-11 03:30:22 +00:00
khaneliman 4dd9fd78ea deploy: 8638a0b287 2025-04-10 20:02:51 +00:00
khaneliman 9380f38ccd deploy: 92266c9a6f 2025-04-10 17:30:37 +00:00
khaneliman 2956481414 deploy: 9864a2f421 2025-04-09 14:19:20 +00:00
khaneliman 36fb3c5e11 deploy: 4040c5779c 2025-04-09 04:17:07 +00:00
khaneliman 3eb2809df9 deploy: 5966fc8bd1 2025-04-08 14:47:08 +00:00
khaneliman 7cfbd515d8 deploy: 0daadc7784 2025-04-08 14:09:31 +00:00
khaneliman ed8d4b0e32 deploy: d094c6763c 2025-04-05 16:14:54 +00:00
khaneliman d0586b17c9 deploy: f3ac07f2f7 2025-04-04 15:41:53 +00:00
khaneliman 7be1e8f8fd deploy: 107352dde4 2025-04-03 02:50:04 +00:00
khaneliman fcf6a55374 deploy: 180fd43eea 2025-04-02 14:29:39 +00:00
khaneliman ef9e2dd4d9 deploy: 81f38986a2 2025-04-02 14:27:25 +00:00
khaneliman 7a64a85d42 deploy: 5ee44bc7c2 2025-04-02 01:15:16 +00:00
sumnerevans da8394337b deploy: 938e802b70 2025-04-02 00:19:14 +00:00
khaneliman d2da00964b deploy: f4d9d1e2ad 2025-04-01 17:08:44 +00:00
khaneliman 95527e2c8d deploy: c21383b556 2025-04-01 04:43:50 +00:00
khaneliman 8d2052cb5f deploy: 216690777e 2025-03-31 14:20:48 +00:00
khaneliman a296e8e2ad deploy: b6fd653ef8 2025-03-30 18:40:52 +00:00
khaneliman 848e3c2e72 deploy: 09280e17bb 2025-03-30 16:23:04 +00:00
khaneliman 411822f1aa deploy: 8ce8433743 2025-03-30 14:56:13 +00:00
khaneliman 00cd9c72e4 deploy: 2760046f34 2025-03-30 14:40:04 +00:00
khaneliman 880e505cd6 deploy: f1d4acaa10 2025-03-29 16:49:48 +00:00
khaneliman b3484942b4 deploy: 1f679ed2a2 2025-03-29 14:43:03 +00:00
khaneliman 1ea25caa5d deploy: 3527c8c778 2025-03-29 14:33:03 +00:00
khaneliman 7015cad986 deploy: ce287a5cd3 2025-03-26 02:44:55 +00:00
khaneliman ac7098390d deploy: 0ff53f6d33 2025-03-25 23:56:44 +00:00
khaneliman b52c17e65b deploy: 2321c6889b 2025-03-25 23:49:09 +00:00
khaneliman 204fe5bfee deploy: f565da89e7 2025-03-25 21:26:21 +00:00
teto e12a08907f deploy: d8b4ba070f 2025-03-25 20:38:18 +00:00
khaneliman 105b22e390 deploy: 8bef8b7a0a 2025-03-25 18:15:59 +00:00
khaneliman 18c3e72ca8 deploy: 2d057cd9d4 2025-03-24 18:49:31 +00:00
khaneliman 7528e760c5 deploy: 908e055e15 2025-03-24 14:20:12 +00:00
khaneliman beb58657b7 deploy: ecbcd792e1 2025-03-23 19:04:53 +00:00
teto cc573f16cc deploy: 5ff90f09d1 2025-03-23 15:49:11 +00:00
khaneliman 01f6aca376 deploy: 57e9a8a290 2025-03-23 14:02:24 +00:00
khaneliman d5e63ed2cb deploy: 9172a6f956 2025-03-23 03:50:41 +00:00
khaneliman 11ae6e5dfb deploy: 7853236fae 2025-03-23 02:53:12 +00:00
khaneliman 8fd14dfa0f deploy: 63e77d09a1 2025-03-22 19:03:13 +00:00
khaneliman 5a9f5a12c2 deploy: 8a68f18e96 2025-03-21 15:07:54 +00:00
khaneliman 9bdab91b11 deploy: d61711497b 2025-03-21 04:15:39 +00:00
khaneliman e0aa126141 deploy: 71cbeb3afd 2025-03-21 04:09:04 +00:00
khaneliman f9438a8ea6 deploy: da01818194 2025-03-20 22:15:03 +00:00
khaneliman 2168619797 deploy: fc189507bc 2025-03-20 16:51:27 +00:00
khaneliman 412123d5e0 deploy: c36cc49e55 2025-03-20 16:35:34 +00:00
khaneliman aefbfe7c1d deploy: 97a00e0659 2025-03-20 03:49:39 +00:00
khaneliman 370c5cdeaa deploy: eb0f617aec 2025-03-19 20:41:22 +00:00
khaneliman a9177ce5d4 deploy: 8b629b5424 2025-03-19 20:17:01 +00:00
khaneliman be2cbd81a7 deploy: b597601774 2025-03-19 19:46:18 +00:00
khaneliman 5de9bb7524 deploy: e4a40b441e 2025-03-19 19:17:58 +00:00
khaneliman d186f83162 deploy: eb5d59dac9 2025-03-19 18:50:36 +00:00
khaneliman b49d340283 deploy: 9d554281e0 2025-03-19 18:38:01 +00:00
khaneliman cf576687f8 deploy: 22a36aa709 2025-03-18 19:33:02 +00:00
khaneliman 2ccb754f43 deploy: c657142e24 2025-03-17 21:15:30 +00:00
khaneliman 1733c0c3bc deploy: b870fb2d62 2025-03-17 20:25:48 +00:00
khaneliman bfe56b4af6 deploy: f55c5f6569 2025-03-17 19:54:23 +00:00
khaneliman 4e6361951a deploy: 4e12151c9e 2025-03-14 12:40:02 +00:00
khaneliman 20ac2e8e33 deploy: 6576167e6b 2025-03-13 14:02:58 +00:00
khaneliman 7e05715ac9 deploy: ef257da52a 2025-03-13 13:51:06 +00:00
teto 271902c398 deploy: 7832b5aa95 2025-03-13 13:38:05 +00:00
khaneliman 4eee5bed4c deploy: 1878091234 2025-03-12 14:52:53 +00:00
khaneliman a8591a98d2 deploy: dd41a39055 2025-03-12 13:20:46 +00:00
khaneliman 5bfc473597 deploy: 5871e21c11 2025-03-12 12:32:47 +00:00
khaneliman b793a38cea deploy: 744f749dd6 2025-03-10 04:06:00 +00:00
khaneliman 1be4363373 deploy: ce9cb2496c 2025-03-10 04:02:58 +00:00
khaneliman a97a1fa739 deploy: cf47e7ea21 2025-03-09 14:37:38 +00:00
khaneliman f2d6ebd528 deploy: 07f505f91e 2025-03-09 13:15:59 +00:00
khaneliman 7ef5dd5ba2 deploy: b23c4d4cbe 2025-03-09 05:33:15 +00:00
teto e44f828c74 deploy: 2c87a6475f 2025-03-08 18:15:01 +00:00
khaneliman 2163ffa17d deploy: c040d1c556 2025-03-08 16:49:10 +00:00
khaneliman 45ce15349e deploy: d2c014e1c7 2025-03-08 00:18:43 +00:00
khaneliman 2722d07b54 deploy: 83f4629364 2025-03-07 19:30:07 +00:00
teto d1acb8d793 deploy: 04c915bcf1 2025-03-07 11:12:04 +00:00
khaneliman 396604d42e deploy: f0b5e7e8a7 2025-03-01 02:37:49 +00:00
khaneliman c469a4e41f deploy: b71edac7a3 2025-02-27 23:39:12 +00:00
khaneliman 6e7718ff89 deploy: 343646e092 2025-02-27 18:13:54 +00:00
khaneliman aa6c7addbe deploy: 11e6d20803 2025-02-27 16:33:16 +00:00
khaneliman 0aaac9f10e deploy: b8869e4ead 2025-02-27 02:53:56 +00:00
khaneliman 35dc4cef8c deploy: 53c587d263 2025-02-26 14:22:07 +00:00
khaneliman 438753e0b2 deploy: 74f0a8546e 2025-02-25 14:40:17 +00:00
khaneliman 9aea35e0ee deploy: b5ab2c7fda 2025-02-23 13:46:35 +00:00
khaneliman 5cf3c2d590 deploy: 3b6550f710 2025-02-23 01:44:48 +00:00
khaneliman 4116c48e3a deploy: fb568d75cf 2025-02-22 23:01:45 +00:00
khaneliman 126155b7ee deploy: 61d8fc9af0 2025-02-22 18:52:00 +00:00
khaneliman 11e4d70b02 deploy: 90504b9a89 2025-02-22 18:34:36 +00:00
khaneliman 46f54f1a76 deploy: 7ceacd98a9 2025-02-22 17:33:10 +00:00
khaneliman 0930425170 deploy: e860bd49ea 2025-02-22 16:59:19 +00:00
khaneliman 20fea85ca3 deploy: 4949081d1e 2025-02-22 16:23:53 +00:00
khaneliman 4ad24e3970 deploy: a51e94e51c 2025-02-22 15:41:07 +00:00
khaneliman d87e45ec17 deploy: 34d524f3ed 2025-02-22 14:34:28 +00:00
khaneliman 77a0bc3d80 deploy: f4a07823a2 2025-02-22 07:11:14 +00:00
khaneliman b901da2897 deploy: 2b382e499a 2025-02-22 07:05:31 +00:00
khaneliman c6fb938aa0 deploy: c31b4e330e 2025-02-22 07:03:58 +00:00
khaneliman 3f2f852208 deploy: 765cb91e9d 2025-02-22 01:34:43 +00:00
khaneliman 7cacd1ca77 deploy: e512de4722 2025-02-22 00:25:20 +00:00
khaneliman 6c22a81476 deploy: dde2fba628 2025-02-21 22:17:49 +00:00
khaneliman aa83e4e3f7 deploy: bdf73272a8 2025-02-21 18:16:03 +00:00
khaneliman 6e79b0e042 deploy: 1a78a4c7fe 2025-02-21 17:29:16 +00:00
khaneliman b6a4cd4b4f deploy: 3c82285348 2025-02-21 13:49:48 +00:00
khaneliman 50080afc8b deploy: 1c189f0114 2025-02-19 19:20:05 +00:00
khaneliman 7362ad8b40 deploy: 97ac0801d1 2025-02-18 21:25:20 +00:00
khaneliman 49b617afa5 deploy: 69dfc316c5 2025-02-18 01:36:57 +00:00
khaneliman 8277328613 deploy: 6c93eea85d 2025-02-17 20:18:31 +00:00
sumnerevans a17c28ecd6 deploy: edad23ebc1 2025-02-17 19:10:59 +00:00
khaneliman 564a5f695f deploy: c1ea92cdfb 2025-02-17 11:01:36 +00:00
khaneliman aa18239158 deploy: 5c5697b82a 2025-02-17 11:00:57 +00:00
teto e510cb5aaf deploy: 30b9cd6f1a 2025-02-17 09:29:22 +00:00
khaneliman 510f9be37c deploy: 45c07fcf7d 2025-02-15 22:35:56 +00:00
sumnerevans a43fd8ba37 deploy: 8bc5e4c9b2 2025-02-15 22:03:48 +00:00
khaneliman 1eb6582d0d deploy: 6d3163aea4 2025-02-14 22:22:49 +00:00
khaneliman 68769d9900 deploy: 582d3cd42d 2025-02-14 21:11:23 +00:00
sumnerevans 7a4d0c0804 deploy: 7da01bc47a 2025-02-14 18:48:22 +00:00
khaneliman 41e86a794b deploy: 22b418c13f 2025-02-13 14:59:38 +00:00
khaneliman 9aa579be91 deploy: a70d788923 2025-02-13 14:25:34 +00:00
khaneliman ebf25bd6c1 deploy: c9d343cfa0 2025-02-13 03:07:55 +00:00
rycee a566497ead deploy: 83bd3a26ac 2025-02-11 22:56:46 +00:00
teto 201b6ddc16 deploy: f0a31d38e6 2025-02-11 18:34:43 +00:00
khaneliman 38bda22857 deploy: 8f351726c5 2025-02-11 15:19:08 +00:00
khaneliman f91778a4b2 deploy: 59fe145f0b 2025-02-11 14:28:02 +00:00
khaneliman 88bda9f240 deploy: c0d06189f2 2025-02-10 23:57:51 +00:00
khaneliman 52d08cd1f7 deploy: b0bd29bb4b 2025-02-10 14:35:08 +00:00
rycee 8fa4c2e48d deploy: 5af1b9a0f1 2025-02-08 22:26:53 +00:00
rycee e0c5fedee4 deploy: 947eef9e99 2025-02-08 08:18:30 +00:00
teto 007d3471d3 deploy: f20b7a8ab5 2025-02-05 11:12:09 +00:00
rycee 84e5e05cda deploy: f2d32e46fa 2025-02-04 23:29:03 +00:00
teto 688da5dde0 deploy: 1e47f7101f 2025-02-04 21:32:38 +00:00
teto 1d3ad66d46 deploy: 7abcf59a36 2025-02-04 11:08:28 +00:00
khaneliman 0c7a6f2537 deploy: 066ba0c5cf 2025-02-03 19:20:39 +00:00
teto 79f883a682 deploy: dae6d3460c 2025-02-01 16:52:59 +00:00
teto c68dff08cb deploy: 8544cd0920 2025-02-01 13:04:18 +00:00
teto bdc9b9eaae deploy: 055c67056d 2025-02-01 10:55:03 +00:00
rycee e8dda2568e deploy: a8159195bf 2025-01-30 22:25:37 +00:00
khaneliman f9d64f817f deploy: 86b0f3049c 2025-01-30 21:42:11 +00:00
khaneliman f3acd7003d deploy: a5e196d61f 2025-01-30 18:18:46 +00:00
khaneliman 1b96c6e218 deploy: 7a45774684 2025-01-30 17:26:43 +00:00
rycee 3c35262821 deploy: c621c26c4c 2025-01-30 16:23:01 +00:00
rycee 4063c33fd2 deploy: d963ed335b 2025-01-30 09:34:24 +00:00
khaneliman ba6073761c deploy: 9ce5d0b888 2025-01-30 00:46:46 +00:00
khaneliman 07666cf5df deploy: 7636b24867 2025-01-30 00:41:05 +00:00
khaneliman 61746d3d1d deploy: 697ba1319f 2025-01-29 23:17:11 +00:00
khaneliman 0ea31b6f23 deploy: 6fbbfb9240 2025-01-29 23:12:23 +00:00
khaneliman 71f2577f70 deploy: 79eff1f6b9 2025-01-29 22:32:36 +00:00
khaneliman 57272e97a4 deploy: 608b26d16e 2025-01-29 22:08:52 +00:00
khaneliman 580c5f0ba9 deploy: d5e5c0d051 2025-01-29 22:05:19 +00:00
rycee 091b43e7bb deploy: 420a0d9506 2025-01-29 19:20:05 +00:00
khaneliman d56d3eb69e deploy: d71828a7dd 2025-01-29 18:47:59 +00:00
khaneliman fa8b3f3536 deploy: c4650fb9c0 2025-01-29 18:27:05 +00:00
khaneliman 00d19ab9a9 deploy: 5dc1c2e404 2025-01-29 18:20:46 +00:00
rycee 5185823d68 deploy: 0ee8bfdd04 2025-01-29 18:16:01 +00:00
rycee bc1bc32cea deploy: 1b4f2a4816 2025-01-29 11:00:47 +00:00
rycee f31f367709 deploy: 8c0671c513 2025-01-24 23:53:14 +00:00
rycee cbfc853a2a deploy: 1b9fe46e9f 2025-01-24 23:12:16 +00:00
rycee 0b5d7d32ae deploy: 7b9ece1bf3 2025-01-23 22:00:33 +00:00
rycee f84b0c7ce1 deploy: 0db5c8bfcc 2025-01-23 11:05:38 +00:00
rycee eadce6f0af deploy: bb14224f51 2025-01-21 12:15:42 +00:00
rycee 21515dd5a2 deploy: 0b8df9eeb6 2025-01-21 12:13:33 +00:00
teto 26d4f86948 deploy: 9786661d57 2025-01-20 17:43:47 +00:00
rycee 917d839cf7 deploy: 1e36429705 2025-01-18 08:23:08 +00:00
rycee 8756a87647 deploy: 0dfec9deb2 2025-01-16 11:53:50 +00:00
teto f87727ec38 deploy: fc52a210b6 2025-01-13 16:28:50 +00:00
teto 61e10e2a8b deploy: 0da8b6bae9 2025-01-13 16:27:49 +00:00
teto fcb9855bca deploy: 9616d81f98 2025-01-13 15:21:00 +00:00
teto a7a55fe074 deploy: 2532b500c3 2025-01-10 11:31:56 +00:00
teto c7987f3ca5 deploy: d4aebb947a 2025-01-09 11:26:47 +00:00
teto be6fd6d184 deploy: 01f40d52d6 2025-01-09 11:05:28 +00:00
sumnerevans 4b9ceca7dd deploy: 54b330ac06 2025-01-08 17:22:50 +00:00
teto 2dde881fe0 deploy: 456e599f91 2025-01-08 15:19:54 +00:00
teto 60af3411f9 deploy: 5c4302313d 2025-01-07 19:17:48 +00:00
teto 0cacc4a343 deploy: 0d7908bd09 2025-01-04 17:56:59 +00:00
rycee e37114edb7 deploy: ef64efdbac 2025-01-03 17:26:42 +00:00
rycee c503ce38ef deploy: 1c8d4c8d59 2025-01-03 10:34:20 +00:00
rycee 897ad326f0 deploy: 5f6aa268e4 2025-01-01 23:38:23 +00:00
rycee bbc0505e7d deploy: 9a9fef316a 2025-01-01 17:59:35 +00:00
rycee 4a748d0af3 deploy: 10e99c43cd 2024-12-28 10:17:48 +00:00
rycee 10511ea412 deploy: 19398e505a 2024-12-27 23:56:52 +00:00
rycee 3cb0fc1713 deploy: 1f74238a4c 2024-12-22 18:55:35 +00:00
rycee f20c9aa0d6 deploy: f47b6c153a 2024-12-22 09:00:20 +00:00
rycee 9b35c5ee66 deploy: 51160a097a 2024-12-21 23:36:07 +00:00
rycee e1b32f5566 deploy: db9a98e178 2024-12-21 19:10:00 +00:00
rycee 3adadea5e1 deploy: 99f54cdfef 2024-12-21 17:05:45 +00:00
rycee d06573a2d0 deploy: 83ecd50915 2024-12-16 10:24:14 +00:00
teto 335778c080 deploy: e526fd2b1a 2024-12-12 20:59:29 +00:00
rycee ecb75e3142 deploy: f26aa4b76f 2024-12-10 23:29:30 +00:00
rycee 728a07e187 deploy: 8772bae58c 2024-12-10 22:25:35 +00:00
teto d38867df82 deploy: f63c15c137 2024-12-09 14:33:09 +00:00
rycee fb8dc4f441 deploy: 65912bc684 2024-12-05 09:11:49 +00:00
rycee 050cfb24ac deploy: 0daaded612 2024-12-04 23:20:58 +00:00
rycee d59a129e89 deploy: 1cd17a2f76 2024-12-04 19:57:39 +00:00
rycee 6e8e755c94 deploy: 3a7fc9cd71 2024-12-04 19:54:54 +00:00
rycee dea4472fa6 deploy: ad48eb25cd 2024-12-04 13:13:46 +00:00
rycee 9899a5b72a deploy: 6c3a7a0b72 2024-12-04 09:25:41 +00:00
rycee aba033f363 deploy: 92e644a95e 2024-12-04 07:42:26 +00:00
rycee ad576ce32b deploy: bf23fe4108 2024-12-02 22:34:57 +00:00
rycee 5bbd691add deploy: c1fee8d4a6 2024-12-01 20:38:56 +00:00
rycee 5d699639c1 deploy: 8632735050 2024-12-01 19:38:21 +00:00
rycee d1d814ac0e deploy: e71e678d18 2024-12-01 19:31:31 +00:00
rycee 38523907d0 deploy: 7f78e2d1c6 2024-12-01 17:47:55 +00:00
rycee 6cc279e689 deploy: 441fae847d 2024-12-01 17:24:10 +00:00
rycee a3a46501f8 deploy: 4964f3c6fc 2024-12-01 10:46:14 +00:00
rycee 7dba9f006b deploy: 2f7739d010 2024-11-28 11:27:48 +00:00
rycee 148f315724 deploy: 21396857fd 2024-11-28 10:33:18 +00:00
rycee 4e2a2ac6e0 deploy: f83dc9f25a 2024-11-28 10:31:02 +00:00
rycee 989504b1bb deploy: 0941a2e144 2024-11-28 09:45:42 +00:00
rycee c1c5a6869f deploy: a42fa14b53 2024-11-18 22:43:22 +00:00
rycee d8926ddd78 deploy: 0bd5e9c76c 2024-11-18 21:17:16 +00:00
rycee 8f2c5634bb deploy: 05d3b6215a 2024-11-17 23:19:13 +00:00
rycee d0f91f245c deploy: 5056a1cf0c 2024-11-17 08:35:31 +00:00
teto bbffee6c75 deploy: 1bd5616e33 2024-11-16 19:55:12 +00:00
teto d4a86fe534 deploy: c7c2517612 2024-11-16 18:37:05 +00:00
ncfavier 3fdaf0fa36 deploy: 1d0862ee2d 2024-11-14 17:17:15 +00:00
rycee fef61aa4bc deploy: 3c044aefe6 2024-11-13 22:06:21 +00:00
rycee ca6ac06770 deploy: 2f607e07f3 2024-11-05 22:41:15 +00:00
rycee 761a6974dc deploy: 1743615b61 2024-11-01 22:01:11 +00:00
rycee 6bff359277 deploy: 93435d27d2 2024-10-25 22:17:43 +00:00
rycee df3b1ccedf deploy: 0c0268a3c8 2024-10-25 14:06:35 +00:00
rycee c87827804c deploy: c0e2315987 2024-10-25 13:57:28 +00:00
rycee 9b8f612dc6 deploy: 6cc03e337a 2024-10-25 13:56:09 +00:00
rycee 522d9179b2 deploy: c77c3bb233 2024-10-25 09:28:12 +00:00
rycee e090f86894 deploy: 5feb9dba3c 2024-10-25 08:24:35 +00:00
rycee 99c67113d3 deploy: 82378b3f7f 2024-10-25 08:11:32 +00:00
rycee 78c443c31a deploy: c7cfdb3864 2024-10-25 08:06:59 +00:00
rycee 9dc3b99f34 deploy: a4353cc43d 2024-10-24 07:03:32 +00:00
rycee 78f4a7299f deploy: 892a6443b7 2024-10-20 08:56:15 +00:00
rycee 3b97ba02b4 deploy: 09a0c0c029 2024-10-18 14:04:55 +00:00
rycee 3478478111 deploy: e78cbb2027 2024-10-17 20:49:47 +00:00
rycee d909545c9d deploy: e43902a7d6 2024-10-17 11:52:56 +00:00
rycee cd013387f8 deploy: 800a191f33 2024-10-17 11:51:04 +00:00
rycee fd4c69c550 deploy: 1d9b4a3e60 2024-10-17 11:39:07 +00:00
rycee a39248a9b9 deploy: 628b15d275 2024-10-17 11:24:15 +00:00
rycee 2f755ed86c deploy: 2a4fd1cfd8 2024-10-15 21:38:36 +00:00
teto 31834cb7a7 deploy: e1aec543f5 2024-10-14 11:02:24 +00:00
rycee 0239e8af21 deploy: 2b13611eae 2024-10-11 22:22:26 +00:00
teto eac37bfb9f deploy: 65ae9c1473 2024-10-11 12:49:45 +00:00
rycee dd15e02f5b deploy: 5828309542 2024-10-11 11:55:54 +00:00
rycee d58d2e3a51 deploy: 03f8e0b3b3 2024-10-10 22:15:29 +00:00
rycee c84b4f2858 deploy: 8bb5d53c58 2024-10-10 19:23:46 +00:00
teto 4386340d9a deploy: 038630363e 2024-10-07 21:40:20 +00:00
teto bf8d573995 deploy: 3ac39b2a8b 2024-10-07 13:17:17 +00:00
teto 5f6a77f709 deploy: fcf5e608ac 2024-10-07 10:19:09 +00:00
rycee 9df248931c deploy: 437ec62009 2024-10-02 06:15:39 +00:00
rycee eb1e0d69e4 deploy: 14929f7089 2024-09-21 07:16:30 +00:00
rycee 18c6565158 deploy: 4803bf558b 2024-09-20 09:14:44 +00:00
rycee 91b02f5270 deploy: 8d7e352a4b 2024-09-20 07:45:41 +00:00
rycee 8aa8bffc08 deploy: ecaed80b18 2024-09-20 07:34:44 +00:00
rycee 596f3e5f8b deploy: 1f7b8188a9 2024-09-19 16:45:56 +00:00
rycee 9ad9217c44 deploy: 4974dfb26e 2024-09-17 22:13:35 +00:00
rycee f30bf399ef deploy: a9c9cc6e50 2024-09-15 23:01:29 +00:00
rycee 42900c3a7c deploy: f084d65319 2024-09-14 07:18:52 +00:00
rycee 0bedb8d069 deploy: 43845d04f8 2024-09-14 07:15:13 +00:00
rycee 8475e6307b deploy: 503af483e1 2024-09-13 10:19:12 +00:00
rycee 35c7f4f551 deploy: 7923c69152 2024-09-13 10:03:17 +00:00
rycee 2c20efdcd5 deploy: 4c8647b1ed 2024-09-13 09:01:02 +00:00
rycee e7c5106f7a deploy: daaf0c2f8d 2024-09-13 08:52:23 +00:00
rycee 42166188e8 deploy: cb3ab5928c 2024-09-13 08:50:28 +00:00
rycee e89f33a20c deploy: 433e686675 2024-09-13 07:58:49 +00:00
rycee 12e7ac7963 deploy: 10541f19c5 2024-09-09 15:37:34 +00:00
rycee 982785f5b7 deploy: 77c9414828 2024-09-09 06:30:33 +00:00
rycee 745fa5967e deploy: aaebdea769 2024-09-07 07:43:21 +00:00
rycee 89fcc5e295 deploy: b00bdf59c0 2024-09-06 12:56:32 +00:00
rycee db8c0b2743 deploy: 5130249ab2 2024-09-06 12:48:53 +00:00
rycee 2909aa5e86 deploy: 471e3eb0a1 2024-09-01 11:24:28 +00:00
rycee 7a47f02f45 deploy: b18f3ebc40 2024-08-23 12:04:34 +00:00
rycee 6ffac1c71d deploy: 40ddec2f8a 2024-08-23 11:30:00 +00:00
rycee 5016c4be9e deploy: 2598861031 2024-08-18 13:16:22 +00:00
rycee b66edf3cc1 deploy: b3d5ea65d8 2024-08-07 07:22:38 +00:00
rycee 7af2143125 deploy: a6c743980e 2024-08-06 10:36:41 +00:00
rycee 668b7ee331 deploy: 4fcd54df7c 2024-07-30 06:33:58 +00:00
rycee 8350f79e61 deploy: 792757f643 2024-07-28 23:31:42 +00:00
rycee e05f96d1fb deploy: 587fcca66e 2024-07-28 21:37:52 +00:00
rycee 16615617f1 deploy: a11cfcd0a1 2024-07-28 21:01:46 +00:00
rycee e9e23d44b2 deploy: 975b83ca56 2024-07-27 08:11:24 +00:00
teto f6fae09924 deploy: bc2b96acda 2024-07-26 12:29:22 +00:00
rycee 73c27f3628 deploy: 304a011325 2024-07-24 21:47:29 +00:00
rycee 6f0f4109ad deploy: afd2021bed 2024-07-16 13:20:09 +00:00
rycee b32a140cfe deploy: a38f88045e 2024-07-16 13:18:27 +00:00
rycee 3f7231bd58 deploy: 57d85c6c6d 2024-07-10 21:14:36 +00:00
rycee f147abb1b3 deploy: 2fb5c1e0a1 2024-07-08 21:38:21 +00:00
rycee e36701978e deploy: 10486e6b31 2024-07-06 18:09:27 +00:00
rycee 0b1caf1d0b deploy: e3582e5151 2024-07-05 21:39:08 +00:00
rycee 4203c425a7 deploy: c23060ce95 2024-07-04 23:08:10 +00:00
rycee 0a91a5f492 deploy: e915831472 2024-07-03 21:37:00 +00:00
rycee d3ab241abb deploy: 269cc18d94 2024-07-03 21:30:01 +00:00
rycee 792e0821b8 deploy: 36317d4d38 2024-06-29 16:10:38 +00:00
rycee ad2729bc6b deploy: 7e68e55d2e 2024-06-28 15:25:00 +00:00
rycee 17a3f994bc deploy: 19e2f43e0b 2024-06-28 14:16:50 +00:00
rycee 60a462ced2 deploy: 1a4f12ae0b 2024-06-26 22:21:17 +00:00
rycee b1be543101 deploy: 92a26bf6df 2024-06-26 07:11:09 +00:00
rycee 22eff6399e deploy: d2f631a96e 2024-06-23 22:08:12 +00:00
rycee 7021cd656a deploy: cd88671199 2024-06-22 06:52:21 +00:00
SebTM dbbd25fd3e deploy: 8d5e27b480 2024-06-13 01:48:27 +00:00
rycee 5f5df22ee1 deploy: 892f76bd0a 2024-06-11 21:36:37 +00:00
rycee 9191dd6fa7 deploy: 8bdb74eaff 2024-06-09 11:09:46 +00:00
rycee 93a8761796 deploy: a7117efb37 2024-06-04 18:24:30 +00:00
sumnerevans b3ff97b99c deploy: 83bfe1bac8 2024-06-04 04:21:30 +00:00
rycee 0480d2ff0b deploy: 04bc391a90 2024-05-29 21:23:08 +00:00
rycee 290c3bf354 deploy: 10c7c219b7 2024-05-27 22:08:06 +00:00
rycee 1e4960a3bf deploy: 90010df158 2024-05-27 22:05:06 +00:00
rycee 7ad5f2353e deploy: 939375b396 2024-05-27 22:00:05 +00:00
rycee a4de68e3e5 deploy: 0cf552f39f 2024-05-27 21:56:19 +00:00
rycee 2270ca3b49 deploy: 5d151429e1 2024-05-26 15:20:06 +00:00
rycee ac0a38c0f3 deploy: d179da4e81 2024-05-25 20:25:10 +00:00
rycee 86bb01f4d9 deploy: 25dedb0d52 2024-05-23 07:09:47 +00:00
rycee 26c9fa3b07 deploy: d768262018 2024-05-10 22:59:01 +00:00
rycee 1c25341711 deploy: 15d7ec3051 2024-05-10 22:25:16 +00:00
rycee 61937b83aa deploy: 5514ed3210 2024-05-10 21:50:37 +00:00
rycee 2e6c253754 deploy: f2c5ba5e72 2024-05-10 18:38:52 +00:00
rycee b999a43b7c deploy: f55718aec3 2024-05-10 16:26:09 +00:00
rycee db7c90581a deploy: 223743313b 2024-05-10 14:00:31 +00:00
rycee 887329deb0 deploy: c6ddd80fb1 2024-05-10 13:35:12 +00:00
rycee f59c59df77 deploy: 4855bfb6ce 2024-05-10 11:43:40 +00:00
rycee 28b416db37 deploy: f61917cbaa 2024-05-10 10:43:51 +00:00
rycee dd15b9cf77 deploy: 6e277d9566 2024-05-07 10:25:45 +00:00
rycee fb1c99a543 deploy: 6ebe7be2e6 2024-05-06 08:56:22 +00:00
rycee bd48b70513 deploy: 3dfe05aa9b 2024-05-05 17:59:55 +00:00
rycee 78849ee8ba deploy: fdaaf543ba 2024-05-05 09:14:01 +00:00
rycee 5260042206 deploy: f69bf670d2 2024-05-05 07:38:36 +00:00
rycee 050d0a322a deploy: 6d3b6dc922 2024-04-30 22:15:27 +00:00
rycee d1a6d19654 deploy: 3c0df2a7e4 2024-04-30 21:55:37 +00:00
rycee 63706b590a deploy: 5632659886 2024-04-29 22:32:36 +00:00
rycee 8ec5ec5fe6 deploy: 4fe1f064bd 2024-04-29 22:10:07 +00:00
rycee 7dd0748175 deploy: 08d3cbfe4d 2024-04-29 21:27:21 +00:00
rycee 0e503b0b53 deploy: b8d81ef15e 2024-04-29 20:59:12 +00:00
rycee 5712df2f6c deploy: 2af7c78b7b 2024-04-29 07:54:23 +00:00
rycee f1c5901d9a deploy: c002bc08c8 2024-04-28 21:52:40 +00:00
rycee 72ad21cc8b deploy: d1980931de 2024-04-28 20:42:51 +00:00
rycee 4e2c1ab7d5 deploy: c1609d584a 2024-04-27 07:41:22 +00:00
rycee 2f3b78b4da deploy: bfa7c06436 2024-04-23 21:32:48 +00:00
rycee fd379e3076 deploy: e866aae5bb 2024-04-22 18:43:04 +00:00
teto 6817d2e990 deploy: 46833c3115 2024-04-22 12:45:20 +00:00
rycee d8ce6c8e70 deploy: 670d9ecc3e 2024-04-21 21:12:35 +00:00
rycee aa002e816e deploy: 2846d5230a 2024-04-21 15:43:33 +00:00
rycee f059cc9f2f deploy: a204082274 2024-04-19 22:36:17 +00:00
rycee bbcede1118 deploy: 938357cb23 2024-04-19 17:26:43 +00:00
rycee da8a061fe9 deploy: 6a171bfd84 2024-04-19 16:23:35 +00:00
rycee 4e88c31683 deploy: 1f305c363e 2024-04-19 15:17:20 +00:00
rycee 9cf405d467 deploy: 31c77dcc2e 2024-04-19 15:16:33 +00:00
rycee b863756912 deploy: 7ca7025cf2 2024-04-19 14:27:04 +00:00
rycee 871cd691de deploy: 0184c8180f 2024-04-19 12:20:58 +00:00
rycee 982c4a07f3 deploy: b62cad68b7 2024-04-19 10:40:11 +00:00
rycee d1dd6be21a deploy: b5b2b1ac63 2024-04-19 10:05:53 +00:00
rycee 957f39e615 deploy: 8ff7bb3f4d 2024-04-19 09:57:18 +00:00
rycee a6873ed5b4 deploy: ffc3600f40 2024-04-19 06:58:10 +00:00
rycee 65f967ab93 deploy: ff1c364654 2024-04-18 22:30:00 +00:00
rycee ba96db4c9b deploy: f46814ec7c 2024-04-17 21:58:57 +00:00
rycee c7e311600d deploy: fa8c16e245 2024-04-16 21:44:57 +00:00
rycee a10afd5690 deploy: 9f32c66a51 2024-04-14 22:08:05 +00:00
teto 04266f2b19 deploy: 8fdf329526 2024-04-13 14:50:57 +00:00
rycee 390b3f0416 deploy: 18f89ef74f 2024-04-10 06:30:13 +00:00
rycee 5104926f43 deploy: b00d0e4fe9 2024-04-09 18:48:57 +00:00
teto 5b755f985f deploy: 782eed8bb6 2024-04-05 11:49:07 +00:00
rycee 3c3f6fcb3c deploy: 9de3aab091 2024-04-04 21:08:44 +00:00
rycee 7a389f9c2c deploy: 81cd71995a 2024-04-02 21:39:52 +00:00
rycee 07d514bc18 deploy: e429a60900 2024-04-02 21:38:56 +00:00
teto af2a402d24 deploy: 820be197cc 2024-03-31 20:07:37 +00:00
rycee b4d754bfd9 deploy: 3142bdcc47 2024-03-28 06:30:27 +00:00
sumnerevans e560b2c552 deploy: eb869521cb 2024-03-27 15:06:11 +00:00
rycee f71f301975 deploy: 19b87b9ae6 2024-03-22 16:19:34 +00:00
rycee d99945995a deploy: 93dcc3daa9 2024-03-18 22:22:21 +00:00
rycee 9460a49ba3 deploy: baf7659448 2024-03-18 21:36:32 +00:00
rycee 79f73d8218 deploy: 7b3fca5adc 2024-03-17 22:37:03 +00:00
rycee 18c020cf48 deploy: 206f457fff 2024-03-15 21:23:02 +00:00
rycee 4d8989e3eb deploy: c781b28add 2024-03-15 18:48:28 +00:00
rycee fabf809a43 deploy: 3ad5c12f3c 2024-03-15 18:04:11 +00:00
rycee 5fe1216373 deploy: dc2f3812b4 2024-03-15 12:36:44 +00:00
rycee a1d16ce0a7 deploy: ca922258e1 2024-03-15 10:55:15 +00:00
rycee 9b766c988b deploy: 029545350c 2024-03-15 09:14:36 +00:00
rycee 99c1671137 deploy: 096d9c04b3 2024-03-14 22:13:31 +00:00
rycee 8d0834dfbf deploy: 35536fc6d6 2024-03-14 21:34:28 +00:00
rycee b7a7c18fb7 deploy: bd9141ea97 2024-03-14 19:55:23 +00:00
rycee 67719e2343 deploy: 1ab3cec3a1 2024-03-14 08:17:31 +00:00
rycee 1c5b054ea1 deploy: 383296ffa4 2024-03-13 13:30:07 +00:00
rycee 976c570fe8 deploy: dab2437ca0 2024-03-13 11:25:29 +00:00
rycee 1c6070363c deploy: a500de54b2 2024-03-12 20:14:08 +00:00
rycee 2ccd3d34b7 deploy: 017b12de5b 2024-03-11 14:51:22 +00:00
rycee 04e35ee769 deploy: 36f873dfc8 2024-03-10 09:21:02 +00:00
rycee c58d87b2dd deploy: 16311f1d3c 2024-03-09 12:42:31 +00:00
rycee 417cdcb5f0 deploy: 17431970b4 2024-03-08 23:03:05 +00:00
rycee 48e0defbce deploy: bfc438e9b7 2024-03-08 22:53:42 +00:00
rycee 4c8449a7be deploy: b550d074fb 2024-03-08 22:34:13 +00:00
rycee 5d970a8fb0 deploy: 8b07ca5419 2024-03-08 13:21:53 +00:00
rycee 06ad5b3a22 deploy: 9a3a5b4402 2024-03-08 13:19:08 +00:00
rycee 0c18affd86 deploy: 0c65bfa3cf 2024-03-08 12:58:44 +00:00
teto e57d377b02 deploy: ad9254cd9a 2024-03-06 20:20:27 +00:00
rycee 6190a2dd68 deploy: f240015a3a 2024-03-06 17:44:41 +00:00
teto 777b80fdac deploy: 40c57ce052 2024-03-06 13:10:35 +00:00
teto 9e5b2ce735 deploy: d579633ff9 2024-03-03 17:13:24 +00:00
rycee d9d2786c13 deploy: 4de84265d7 2024-03-03 06:24:31 +00:00
rycee 6b82a631c9 deploy: 4ee704cb13 2024-02-24 20:35:20 +00:00
rycee 39d5055beb deploy: 3dda8e795f 2024-02-21 23:31:57 +00:00
rycee 84075c1f71 deploy: 517601b37c 2024-02-20 18:11:36 +00:00
rycee a96095b9a9 deploy: a54e05bc12 2024-02-18 22:15:23 +00:00
rycee 38b1fc0400 deploy: 354643e6c1 2024-02-14 14:11:16 +00:00
teto 8b2ccdfe09 deploy: a09cfdbaf1 2024-02-11 17:23:55 +00:00
rycee 11483cf376 deploy: f99eace7c1 2024-02-05 23:30:45 +00:00
rycee f6e11bde77 deploy: 7b4ea8d82f 2024-02-05 22:38:15 +00:00
rycee d01c59549a deploy: 13dbf2623d 2024-02-05 22:33:12 +00:00
rycee f119fa9287 deploy: 3c6f2dd59c 2024-02-05 22:04:57 +00:00
rycee a93812c647 deploy: 274bd470a5 2024-02-05 21:49:44 +00:00
rycee c740f2f687 deploy: afcedcf2c8 2024-02-05 06:36:41 +00:00
rycee 730267d80e deploy: 4740f2ccda 2024-02-04 23:11:50 +00:00
rycee 827c67fee5 deploy: 1683c507c2 2024-02-04 23:08:37 +00:00
rycee 9f7f6a042a deploy: f80df90c10 2024-02-04 22:38:02 +00:00
rycee 2f1dcc418f deploy: 2db6a2a429 2024-02-01 07:08:35 +00:00
rycee 1541d927fe deploy: d634c3abaf 2024-01-29 22:52:09 +00:00
rycee b449d33380 deploy: ebba24a6fe 2024-01-28 09:47:32 +00:00
rycee 463e87c9cc deploy: 70688f195a 2024-01-25 21:58:10 +00:00
rycee 592e3c8d34 deploy: 6359d40f6e 2024-01-24 22:24:19 +00:00
rycee f317e83a27 deploy: e84811035d 2024-01-24 19:51:22 +00:00
rycee 13632c0620 deploy: 3d0dc78e80 2024-01-23 07:22:38 +00:00
rycee 9796ad42f0 deploy: 020399c287 2024-01-21 23:18:49 +00:00
rycee 07eee49c19 deploy: 928f2528f9 2024-01-21 07:52:35 +00:00
rycee 96c77ae232 deploy: ce4b88c465 2024-01-20 00:14:16 +00:00
rycee 1572a5a81d deploy: b84191db12 2024-01-17 23:49:10 +00:00
rycee bec2bebbb2 deploy: 16cefa78cc 2024-01-16 23:06:51 +00:00
rycee b261fb51ce deploy: 7403ed4980 2024-01-12 23:57:24 +00:00
rycee 9508108f62 deploy: c36cb65c4a 2024-01-04 10:22:45 +00:00
rycee a61796db7e deploy: fcbc70a7ee 2024-01-03 19:52:47 +00:00
rycee fe6bc9daea deploy: 4d8f90205c 2024-01-03 10:41:02 +00:00
rycee fe65cf0017 deploy: 6e91c5df19 2024-01-01 09:37:06 +00:00
rycee 0befc7823e deploy: 2aff324cf6 2023-12-29 08:52:18 +00:00
rycee fba0eabea5 deploy: 77c698fa4b 2023-12-29 00:05:08 +00:00
rycee 00d3eb70b7 deploy: ba6b75011b 2023-12-28 20:26:34 +00:00
rycee 420490d4cf deploy: 6e2afa5c3b 2023-12-28 16:16:24 +00:00
rycee 6358e9ba57 deploy: c24c298562 2023-12-28 09:02:34 +00:00
rycee a9052790fb deploy: 0f11c14065 2023-12-28 08:30:47 +00:00
rycee 015052aaef deploy: 458544594b 2023-12-27 11:21:45 +00:00
rycee e3f8a26ed1 deploy: 015a36e9c7 2023-12-25 18:02:05 +00:00
rycee c7c7ebd2b3 deploy: 16fcb9674a 2023-12-25 09:27:41 +00:00
rycee 635a7fadc0 deploy: a2523ea034 2023-12-23 22:20:45 +00:00
rycee e9119f8cf3 deploy: 7184dfe663 2023-12-23 17:04:28 +00:00
rycee d341ac1698 deploy: 433120e47d 2023-12-20 15:11:53 +00:00
rycee e07c9729e8 deploy: efc177c15f 2023-12-19 23:19:40 +00:00
rycee d38194f22a deploy: ebeeef94ab 2023-12-19 22:54:01 +00:00
rycee 537b04902f deploy: e4dba0bd01 2023-12-17 11:59:49 +00:00
rycee 333af3d7ec deploy: e9b9ecef42 2023-12-16 14:01:58 +00:00
rycee 44faf1c824 deploy: b00a03b668 2023-12-16 10:04:33 +00:00
rycee d561771117 deploy: 7a69b3e738 2023-12-13 23:39:08 +00:00
rycee 837d873960 deploy: 0e7cd64674 2023-12-12 23:01:44 +00:00
rycee 2eace569ca deploy: 01a66e313f 2023-12-12 22:41:35 +00:00
rycee 74f10c4c72 deploy: defbb9c585 2023-12-10 10:13:24 +00:00
rycee e2e4efce2c deploy: fa91c109b0 2023-12-09 13:34:08 +00:00
rycee 6bf6c82698 deploy: 7db6291d95 2023-12-09 08:36:28 +00:00
dermetfan fda2b782e8 deploy: 948703f3e7 2023-12-04 07:58:20 +00:00
rycee eb85d4660a deploy: 4a8545f5e7 2023-12-01 12:27:23 +00:00
rycee 84909e5b42 deploy: db1878f013 2023-11-27 07:47:57 +00:00
rycee a903a4f88f deploy: 7c97c46dc4 2023-11-26 23:21:11 +00:00
rycee 5ecaff5425 deploy: a462e7315d 2023-11-26 00:14:11 +00:00
rycee 7386909aca deploy: 8cedd63eed 2023-11-24 17:45:14 +00:00
rycee 367836c0e1 deploy: e1f3b36ab0 2023-11-24 08:45:00 +00:00
rycee d07b5261da deploy: 134deb46ab 2023-11-22 23:17:44 +00:00
rycee 24dc067fb2 deploy: 1bd1e86464 2023-11-22 23:11:26 +00:00
teto 6dbee781ab deploy: 993fb02d20 2023-11-19 18:38:17 +00:00
rycee 515ebb7d18 deploy: 9a4725afa6 2023-11-19 09:43:00 +00:00
teto 1a007b8035 deploy: 3feeb77155 2023-11-17 22:55:27 +00:00
sumnerevans 3401eef02c deploy: ab1459a1fb 2023-11-15 22:26:32 +00:00
ncfavier 2986ad46b2 deploy: 280721186a 2023-11-12 10:12:04 +00:00
rycee 31368747c6 deploy: fad880ea93 2023-11-12 00:09:14 +00:00
rycee 72cb0d45e2 deploy: d78f6693ee 2023-11-12 00:07:08 +00:00
rycee 7ca12b3245 deploy: 691cbcc03a 2023-11-11 00:40:36 +00:00
rycee 7d56733b7b deploy: 54586daa59 2023-11-10 23:36:12 +00:00
sumnerevans 6c929a769a deploy: 6a8444467c 2023-11-07 14:56:07 +00:00
teto 787a692622 deploy: c067d57fc4 2023-11-06 17:06:26 +00:00
sumnerevans 51c337ef7a deploy: 8765d4e38a 2023-11-03 15:34:12 +00:00
rycee 58ad54a215 deploy: 48b0a30202 2023-11-01 21:26:20 +00:00
rycee bf8d39428b deploy: a421804890 2023-11-01 21:17:10 +00:00
teto 75bd3f309c deploy: fc2a8842ea 2023-11-01 17:41:08 +00:00
teto f3e4d946a3 deploy: 8e5416b478 2023-10-30 12:56:04 +00:00
rycee e34b399544 deploy: 9d0f799c66 2023-10-25 16:12:35 +00:00
rycee 9870281457 deploy: 6045b68ee7 2023-10-24 06:34:09 +00:00
rycee 9c62566a88 deploy: f540f30f1f 2023-10-23 14:15:34 +00:00
rycee e095f78faf deploy: ae631b0b20 2023-10-20 22:01:44 +00:00
rycee bcd0a91f23 deploy: 3433206e51 2023-10-18 20:57:17 +00:00
rycee e340d1da80 deploy: 05649393ac 2023-10-18 06:46:57 +00:00
rycee be6e351dae deploy: 3e1f8df4f0 2023-10-18 06:35:05 +00:00
rycee 521eb49de1 deploy: b25161c6a2 2023-10-17 07:55:32 +00:00
rycee 225ea8d8a8 deploy: f6bb5c2973 2023-10-17 06:02:45 +00:00
teto 0e5ae3b12a deploy: 3b67ae3f66 2023-10-15 12:04:13 +00:00
rycee 4758eeb6c4 deploy: 9a2ce65697 2023-10-14 22:32:16 +00:00
rycee 611484749e deploy: 6bba64781e 2023-10-10 13:43:07 +00:00
rycee 4667fc4b4e deploy: 6dfbdc977e 2023-10-10 07:43:48 +00:00
rycee 0db9c2ae4d deploy: ed0770e962 2023-10-06 22:09:24 +00:00
rycee cb3aa4f7fe deploy: 44635279a0 2023-10-06 21:35:24 +00:00
rycee b24e8b6db4 deploy: 2874c6fce6 2023-10-04 08:58:55 +00:00
rycee a12c22ac63 deploy: b0e0d82696 2023-10-04 06:29:38 +00:00
rycee 85dee745b4 deploy: 55ce64c3ca 2023-10-03 20:53:57 +00:00
rycee 5ca5417326 deploy: 6f9b5b83ad 2023-10-01 08:42:02 +00:00
rycee 99fa075e11 deploy: 209a24dff2 2023-10-01 07:27:50 +00:00
rycee 3e13a15cc4 deploy: f1b7775d23 2023-09-30 08:08:43 +00:00
rycee 84e0f3564a deploy: 4f02e35f9d 2023-09-29 10:53:03 +00:00
rycee 229d4d92db deploy: 1d813ff5a6 2023-09-28 22:30:24 +00:00
rycee fe810a2f76 deploy: dd88dbc694 2023-09-26 06:46:01 +00:00
rycee 432b5b8a9b deploy: a88df2fb10 2023-09-24 11:04:11 +00:00
rycee b4743b0f01 deploy: 835465e8ba 2023-09-24 07:48:33 +00:00
rycee d062090ebb deploy: 7413408b04 2023-09-23 22:55:54 +00:00
teto 4f561925a6 deploy: e0c70942c0 2023-09-23 18:54:37 +00:00
rycee 4f6b01822d deploy: 7ee73f5363 2023-09-19 20:25:35 +00:00
rycee 8fd60d2cd2 deploy: 92364581dd 2023-09-19 06:28:33 +00:00
teto e19bbd1bea deploy: f092a92202 2023-09-18 20:43:17 +00:00
rycee ebf7d8367e deploy: aed5ed979e 2023-09-13 21:13:31 +00:00
rycee 5234bd2373 deploy: a0ddf43b62 2023-09-13 06:12:36 +00:00
rycee 9d1a1a5cdc deploy: 5171f5ef65 2023-09-11 22:00:47 +00:00
rycee c755a34fe0 deploy: ac1c7c34db 2023-09-11 20:35:53 +00:00
rycee 8292d9693d deploy: 91341cde41 2023-09-07 16:51:42 +00:00
rycee 3256b8d9eb deploy: 3c0e381fef 2023-09-05 11:00:17 +00:00
teto 7de94d6900 deploy: a7eab56be5 2023-08-30 09:58:42 +00:00
teto eb5f1bd77b deploy: 90e62f96c7 2023-08-27 18:48:47 +00:00
rycee a73e07fc62 deploy: f8c5fd7509 2023-08-27 14:25:08 +00:00
rycee a2884785ad deploy: 8eb8c212e5 2023-08-22 16:48:34 +00:00
rycee 1e18377497 deploy: 9db5b89f40 2023-08-16 15:48:02 +00:00
rycee 340e64f76b deploy: 18791781ea 2023-08-15 06:47:36 +00:00
ncfavier dc4784103d deploy: 88067b9b14 2023-08-14 07:41:05 +00:00
ncfavier a482d31e66 deploy: 406d34d919 2023-08-12 16:11:52 +00:00
teto 0aeb0855cf deploy: 255f921049 2023-08-12 15:22:04 +00:00
ncfavier 757af21760 deploy: 6e1eff9aac 2023-08-10 13:06:29 +00:00
ncfavier 90d7abfac8 deploy: a8f8f48320 2023-08-09 16:41:58 +00:00
ncfavier 66c09c59a4 deploy: 7b8d43fbaf 2023-08-08 15:01:18 +00:00
ncfavier f1bbd2227f deploy: 15043a6591 2023-08-04 10:13:49 +00:00
ncfavier 9c2fdff1ba deploy: 8c731978f0 2023-08-01 17:28:25 +00:00
ncfavier 8167ad20c6 deploy: 4fd794d3df 2023-07-31 23:41:38 +00:00
rycee c1a0f5a040 deploy: f58889c07e 2023-07-29 17:44:17 +00:00
ncfavier 29fa47ee98 deploy: 8d243f7da1 2023-07-27 16:55:09 +00:00
ncfavier db5a99e0b5 deploy: ba2c0737cc 2023-07-25 16:50:02 +00:00
rycee a9a8c21338 deploy: a30f5b5b35 2023-07-24 10:39:49 +00:00
rycee b2635c9a12 deploy: ab70a02363 2023-07-24 09:45:59 +00:00
rycee e6b2715540 deploy: ee5673246d 2023-07-20 22:16:28 +00:00
ncfavier 96d1b56cee deploy: 1443abd269 2023-07-20 17:52:55 +00:00
rycee a80a38af3c deploy: c707d4f552 2023-07-19 21:29:25 +00:00
rycee d431010763 deploy: 7579044149 2023-07-19 16:10:38 +00:00
ncfavier b01ac687ac deploy: f5b03feb33 2023-07-15 18:54:39 +00:00
ncfavier e09caeed3e deploy: c1cdce3d89 2023-07-14 19:27:18 +00:00
ncfavier f4ceefee89 deploy: f63b39a67d 2023-07-14 19:27:02 +00:00
ncfavier 4f1ddb238a deploy: d2e47de536 2023-07-14 19:26:59 +00:00
ncfavier d04d616b88 deploy: bec87d536c 2023-07-14 18:35:38 +00:00
rycee bfeb49a43f deploy: e15010ee6e 2023-07-08 22:31:26 +00:00
rycee f130a50837 deploy: 98282a481d 2023-07-08 10:28:22 +00:00
rycee 06b4bb4a3c deploy: 069d450b6d 2023-07-08 09:43:15 +00:00
rycee 289d0a0297 deploy: 050d01a62c 2023-07-08 08:50:07 +00:00
ncfavier 106c306983 deploy: 34db2f0521 2023-07-07 11:58:24 +00:00
ncfavier 5aba144c1c deploy: 719de878f7 2023-07-07 09:40:27 +00:00
ncfavier 979121f7b0 deploy: b23c7501f7 2023-07-05 10:24:42 +00:00
teto efbfd5444f deploy: 4a26e21030 2023-07-04 10:15:45 +00:00
ncfavier f9cd0c8193 deploy: 3be2abb2e6 2023-07-04 09:29:24 +00:00
sumnerevans 178cddbfba deploy: 89d10f8adc 2023-07-01 14:51:09 +00:00
sumnerevans f11101c63c deploy: 7a0e9a6782 2023-07-01 13:42:32 +00:00
sumnerevans 5001ee38c8 deploy: 44d1a8542a 2023-06-30 23:50:13 +00:00
rycee ffb5b00b74 deploy: a7002d6bfc 2023-06-28 16:33:39 +00:00
ncfavier dabdead167 deploy: 47c2adc6b3 2023-06-28 09:42:27 +00:00
ncfavier 9325af1bb6 deploy: f5f64ac022 2023-06-28 09:27:43 +00:00
rycee e5aa8ee4f8 deploy: 172d46d4b2 2023-06-24 18:01:18 +00:00
rycee 5156f2a08c deploy: 28b6c3670c 2023-06-24 11:34:44 +00:00
rycee ff59dd871f deploy: 29872a1c8f 2023-06-24 10:11:08 +00:00
rycee 1a1a8e99fa deploy: d2b6f2d154 2023-06-23 07:51:26 +00:00
rycee f1a630bc58 deploy: 491f74db89 2023-06-23 07:37:41 +00:00
rycee 3b28b85f89 deploy: 70ac18872a 2023-06-22 22:52:48 +00:00
ncfavier 3249789ee1 deploy: 6c78ba7932 2023-06-22 14:36:35 +00:00
ncfavier 4e80a54a4e deploy: 1fefd7bb8d 2023-06-21 16:39:48 +00:00
teto ef49f45945 deploy: 50cb4d8a1e 2023-06-21 13:51:13 +00:00
rycee 2f1abd93ae deploy: e6d134ce12 2023-06-20 21:39:59 +00:00
rycee 5e6e9d152b deploy: ec58f8bed7 2023-06-20 21:35:45 +00:00
ncfavier b7d84aa2b1 deploy: e8b5f8f9b3 2023-06-20 10:44:18 +00:00
ncfavier 4a55110d85 deploy: f06a43dca0 2023-06-19 19:57:47 +00:00
ncfavier 825006cb0c deploy: 6bdd72b914 2023-06-19 14:30:54 +00:00
ncfavier 5f273f3875 deploy: a10aa82e8a 2023-06-19 09:38:21 +00:00
ncfavier a198297637 deploy: 9ba7b3990e 2023-06-16 13:34:25 +00:00
teto c0694bb6cb deploy: ea2f17615e 2023-06-16 09:11:27 +00:00
ncfavier 9374fcf980 deploy: 4e09c83255 2023-06-15 18:10:33 +00:00
ncfavier 32ac647149 deploy: d214b93ee3 2023-06-15 14:07:07 +00:00
rycee 06c7830e2d deploy: e0034971f9 2023-06-14 22:05:54 +00:00
rycee e45f32581c deploy: 194086df82 2023-06-14 21:40:53 +00:00
ncfavier d555a212e6 deploy: 32376992f7 2023-06-14 19:17:22 +00:00
rycee 67171cd8df deploy: 75b24cc557 2023-06-14 15:55:37 +00:00
teto b95f4acffb deploy: 0d1e053ce9 2023-06-13 14:32:48 +00:00
teto acd8c76703 deploy: d9a97e8b33 2023-06-13 09:08:58 +00:00
ncfavier bf8501459e deploy: cbbceb4894 2023-06-13 08:42:24 +00:00
rycee 056dc9ca1f deploy: c8dafb187b 2023-06-13 06:47:58 +00:00
teto 2b2ffa3aec deploy: b01eb1eb3b 2023-06-12 21:22:27 +00:00
teto b3bb0ab568 deploy: 9e37a1b6f9 2023-06-12 10:03:06 +00:00
ncfavier 0801c17692 deploy: 0144ac418e 2023-06-10 10:11:41 +00:00
ncfavier fc0f4a3515 deploy: 0945875a2a 2023-06-09 20:33:11 +00:00
ncfavier 4f8fca072e deploy: 2a69182c56 2023-06-09 20:16:35 +00:00
rycee 244ab4aab1 deploy: e7fdcb40b2 2023-06-09 19:30:54 +00:00
ncfavier b8ad6ff8b0 deploy: 1e5d741ea3 2023-06-09 10:06:12 +00:00
ncfavier 063cb98826 deploy: cc6745b35f 2023-06-07 20:16:13 +00:00
ncfavier bec3530169 deploy: 39c7d0a97a 2023-06-07 12:52:07 +00:00
ncfavier 5f8ca49d1e deploy: 3512a6dafb 2023-06-07 08:34:05 +00:00
rycee 01831a129c deploy: 28614ed7a1 2023-06-05 21:09:44 +00:00
ncfavier 4c8123a95a deploy: 24d590cc32 2023-06-05 20:47:12 +00:00
rycee b74c32aa4c deploy: bffc49ffb2 2023-06-03 23:13:15 +00:00
ncfavier 95c32aa1c9 deploy: 2951946183 2023-06-02 16:00:23 +00:00
ncfavier 42031dec04 deploy: 96078e4a93 2023-05-31 22:44:59 +00:00
ncfavier ec256194c0 deploy: 53ccbe0170 2023-05-31 22:02:21 +00:00
rycee 20e693ff6b deploy: f1490b8caf 2023-05-31 18:22:51 +00:00
ncfavier 69f2203e4c deploy: 54a9d6456e 2023-05-30 21:07:25 +00:00
ncfavier 701e363088 deploy: 2d963854ae 2023-05-27 12:12:50 +00:00
ncfavier cfd39a5c25 deploy: d1f04b0f36 2023-05-25 13:07:23 +00:00
ncfavier 4e91931e71 deploy: d9995d94f1 2023-05-22 20:49:17 +00:00
ncfavier 1babdc4cb0 deploy: 27ef11f021 2023-05-20 15:23:04 +00:00
ncfavier 65cdc516fc deploy: b9a52ad20e 2023-05-19 08:30:37 +00:00
ncfavier 6826c089bb deploy: c10403a573 2023-05-18 20:38:16 +00:00
ncfavier d78efbd86b deploy: 59659243cd 2023-05-17 11:00:32 +00:00
teto 2f4233bf54 deploy: c0deab0eff 2023-05-15 13:38:22 +00:00
rycee c3b18dc7e2 deploy: e4272987f7 2023-05-14 15:34:33 +00:00
rycee cb541c65ec deploy: 6702b22b98 2023-05-13 15:22:40 +00:00
rycee 27091843bc deploy: e0026e16a5 2023-05-13 14:09:16 +00:00
rycee a90235c9ee deploy: eec2272999 2023-05-12 22:25:26 +00:00
ncfavier 794170ffcc deploy: 70c8bd08e6 2023-05-12 11:55:28 +00:00
ncfavier 102c3bbf5f deploy: a835096fd2 2023-05-12 09:21:24 +00:00
ncfavier a036af39e3 deploy: cc9f65d104 2023-05-11 19:26:44 +00:00
ncfavier 182dc442b4 deploy: 6be873663e 2023-05-11 12:23:38 +00:00
ncfavier d786754ad7 deploy: 2f6a917ade 2023-05-11 12:05:27 +00:00
ncfavier ed2dabd9fb deploy: 622fa73725 2023-05-11 12:05:03 +00:00
ncfavier bf5f693c9f deploy: f714b17031 2023-05-11 11:59:38 +00:00
ncfavier 55199f20a5 deploy: fa720861b5 2023-05-11 09:22:33 +00:00
ncfavier fc9859c835 deploy: b365342adb 2023-05-11 09:21:48 +00:00
sumnerevans 11f1b51449 deploy: 010c269877 2023-05-10 23:55:35 +00:00
rycee f338ade642 deploy: 983f8a1bb9 2023-05-09 16:55:06 +00:00
ncfavier 3762b8e582 deploy: e34fbe1801 2023-05-07 21:45:48 +00:00
ncfavier b77d757614 deploy: d12ca77844 2023-05-07 21:45:19 +00:00
rycee 60513a6f40 deploy: 990b82ecd3 2023-05-07 10:45:07 +00:00
ncfavier fd553c6220 deploy: ae6d5466bf 2023-05-04 14:59:27 +00:00
ncfavier 8798d24fef deploy: 6abb775e75 2023-05-04 10:29:20 +00:00
ncfavier df927a4447 deploy: 514c0a71f4 2023-05-03 22:43:13 +00:00
ncfavier b9d95baf55 deploy: 788777b536 2023-05-03 22:13:31 +00:00
ncfavier 3135271829 deploy: 3144311f31 2023-04-29 14:54:18 +00:00
rycee 192ed122a3 deploy: c4f3a37071 2023-04-28 21:13:25 +00:00
ncfavier 0e0f6eb1ac deploy: 6142193635 2023-04-25 10:46:21 +00:00
ncfavier cbf99755ec deploy: 0263da497e 2023-04-24 14:42:31 +00:00
rycee f88a4d61ac deploy: e21ec3db17 2023-04-23 18:04:35 +00:00
rycee 8b6be74a60 deploy: 6169690ae3 2023-04-22 15:16:53 +00:00
rycee 55a2abcefc deploy: 5cd5a1b585 2023-04-22 15:12:40 +00:00
sumnerevans 2907b78f2b deploy: 5160039edc 2023-04-20 06:12:33 +00:00
rycee eb439aa374 deploy: dfe7024f7e 2023-04-19 15:40:49 +00:00
ncfavier 3c336a2370 deploy: 5ae849d3c5 2023-04-19 13:05:39 +00:00
rycee 0a9b076b9e deploy: 2dcb61d396 2023-04-18 06:33:21 +00:00
rycee 81ac42d1ff deploy: fa980cc985 2023-04-18 06:31:18 +00:00
rycee fa1dd8cf14 deploy: 58b8685e47 2023-04-17 21:17:08 +00:00
rycee 41b7a0d5dc deploy: 6db559daa9 2023-04-17 20:57:07 +00:00
rycee f69b1d9e89 deploy: e17e5e4f48 2023-04-17 20:36:54 +00:00
rycee c09b0e5383 deploy: cd690d2021 2023-04-17 19:56:52 +00:00
ncfavier fd61e87c38 deploy: ae79840bc7 2023-04-17 15:54:53 +00:00
rycee 2c1b1a7f28 deploy: 53bd74f786 2023-04-17 07:36:05 +00:00
sumnerevans b4cd038055 deploy: 68eaf4b577 2023-04-16 23:35:29 +00:00
rycee d8151fd698 deploy: 40ebb62101 2023-04-15 19:36:22 +00:00
rycee fa0cf20a4b deploy: 28698126bd 2023-04-11 22:27:24 +00:00
ncfavier 14c31e32e2 deploy: ec06f419af 2023-04-04 08:42:53 +00:00
rycee d21d0e41fc deploy: d3fd3b9d69 2023-03-30 22:18:47 +00:00
ncfavier 2e4124e018 deploy: 765e4007b6 2023-03-28 10:47:23 +00:00
rycee c53c82fd97 deploy: cf662b6c98 2023-03-25 23:16:27 +00:00
rycee 60ab95695c deploy: 99680311f1 2023-03-25 14:56:23 +00:00
ncfavier 308bcfffe6 deploy: 3ace6a31dd 2023-03-25 14:33:29 +00:00
rycee 9ce409e88b deploy: 2f8d24b7f5 2023-03-25 11:02:33 +00:00
rycee 69e3eecb20 deploy: db37c53760 2023-03-24 19:24:25 +00:00
ncfavier 6bc6fbf059 deploy: 363c46b248 2023-03-22 10:26:03 +00:00
ncfavier 36bd7c4714 deploy: c6a7bc90ca 2023-03-22 09:51:13 +00:00
rycee ed3ba2e491 deploy: 486ba3de4e 2023-03-22 07:36:18 +00:00
rycee 9dd0541586 deploy: e60080ddfb 2023-03-22 07:28:46 +00:00
ncfavier c752f42246 deploy: e386ec640e 2023-03-21 10:34:54 +00:00
rycee 7a1745bcd0 deploy: a8f5ca239f 2023-03-21 09:53:27 +00:00
rycee 19789829f8 deploy: 2bf15d3835 2023-03-21 07:52:04 +00:00
ncfavier b419631529 deploy: b832390db3 2023-03-16 11:49:57 +00:00
rycee 1f8a6aae78 deploy: c8cb60b8a1 2023-03-15 22:03:42 +00:00
ncfavier efddf410f5 deploy: 95201931f2 2023-03-15 18:23:12 +00:00
ncfavier 991f742152 deploy: 215af6252d 2023-03-15 10:53:51 +00:00
rycee 96ed3a09b2 deploy: cae54dc45c 2023-03-14 22:12:30 +00:00
ncfavier ee7b9f1637 deploy: 24c1a6335e 2023-03-13 17:46:08 +00:00
ncfavier 7fecbe5fe7 deploy: 7fe539dfbb 2023-03-13 13:38:28 +00:00
rycee 3eea3eda52 deploy: bf5712c586 2023-03-11 22:07:33 +00:00
rycee 73496d91a0 deploy: c03d1e75a1 2023-03-10 16:12:31 +00:00
ncfavier 30564a3983 deploy: 36999b8d19 2023-03-08 10:30:51 +00:00
rycee f2ce2ed3da deploy: defd16c5d5 2023-03-07 22:53:35 +00:00
ncfavier ab8ba60c46 deploy: 3c18113bd7 2023-03-05 08:42:42 +00:00
ncfavier b8313202e6 deploy: db1c22626a 2023-03-02 10:59:55 +00:00
rycee 3b2c4e767c deploy: f807788035 2023-03-01 21:49:01 +00:00
ncfavier 06c3027759 deploy: ef7d316578 2023-02-28 21:51:51 +00:00
ncfavier 13aab594ba deploy: 9438e56a7b 2023-02-28 21:04:26 +00:00
ncfavier f4307e5b03 deploy: 305daba44a 2023-02-27 21:33:10 +00:00
ncfavier 21594c6ccc deploy: 635bbcdd6f 2023-02-27 12:05:53 +00:00
rycee df2ca3dc72 deploy: fc3432bac2 2023-02-26 18:44:53 +00:00
ncfavier 30301c96d1 deploy: 693d76eeb8 2023-02-26 08:31:46 +00:00
ncfavier 5ea274aeb6 deploy: 664945b3e0 2023-02-24 22:17:07 +00:00
rycee 5cb5b5731f deploy: 4295fdfa6b 2023-02-22 22:31:56 +00:00
rycee 54586d3d04 deploy: c7c69ec405 2023-02-21 21:08:30 +00:00
rycee 908cb7db8f deploy: 5e889b385c 2023-02-20 22:51:55 +00:00
ncfavier ce94605424 deploy: 72ce74d3ea 2023-02-20 11:31:26 +00:00
rycee a9ad8cf5bc deploy: ebb21e1bf6 2023-02-20 06:58:07 +00:00
rycee e114c3ca75 deploy: 9e9a0e43fe 2023-02-19 22:46:23 +00:00
rycee 66ecc2a7df deploy: da72e6fc6b 2023-02-15 20:35:03 +00:00
ncfavier f508f9af92 deploy: d7a5a28fc3 2023-02-08 10:01:32 +00:00
rycee a7a39e2ac0 deploy: c43d4a3d6d 2023-02-06 07:09:34 +00:00
ncfavier 8492678a37 deploy: 9621e9ab80 2023-02-05 11:10:27 +00:00
ncfavier c0e4596641 deploy: 9f4268e6b6 2023-02-05 10:24:21 +00:00
ncfavier c4b916231f deploy: 6d2ba4654d 2023-02-05 10:14:56 +00:00
ncfavier 75d71a98fb deploy: ffc022b6a7 2023-02-05 10:13:26 +00:00
ncfavier a15819e1eb deploy: 2ffc6d6496 2023-02-05 10:03:21 +00:00
rycee bc52fe753b deploy: d1c7730bb7 2023-02-02 21:17:58 +00:00
rycee 919937e5f4 deploy: 1d94de5604 2023-01-31 22:40:44 +00:00
rycee 203f7a5e31 deploy: 1c6f3054ca 2023-01-31 22:14:07 +00:00
ncfavier 9edc647e16 deploy: 69696fe539 2023-01-31 16:07:24 +00:00
rycee be72e9d7f8 deploy: 08a778d803 2023-01-28 17:53:09 +00:00
rycee 3e256f1d19 deploy: 7efca2ca18 2023-01-26 21:57:56 +00:00
ncfavier cba397329b deploy: c59f0eac51 2023-01-24 10:31:10 +00:00
rycee 1a571e4e35 deploy: 2c29ae48f9 2023-01-18 12:40:32 +00:00
ncfavier 6ec883e4c6 deploy: bd3efacb82 2023-01-17 09:36:17 +00:00
teto effa21cfbe deploy: d633afe0d9 2023-01-15 18:21:09 +00:00
rycee 6b1d6465ce deploy: 2827b53064 2023-01-14 23:36:27 +00:00
ncfavier e448acd01c deploy: 176e455371 2023-01-10 09:35:50 +00:00
rycee f61b9547af deploy: 4f0c1afba7 2023-01-09 11:34:44 +00:00
teto 3e9d57a34b deploy: 684bdb386c 2023-01-08 21:06:49 +00:00
teto 5ce50d657e deploy: 2cff1c7642 2023-01-07 11:00:47 +00:00
rycee 892ea04a90 deploy: 709a87fe33 2023-01-06 22:53:02 +00:00
sumnerevans 7cdc3134cf deploy: 1786883425 2023-01-06 04:50:18 +00:00
rycee 3ca6ccaee9 deploy: 3ecd5305a4 2023-01-05 21:41:46 +00:00
ncfavier caf12dffd7 deploy: d01e7280ad 2023-01-03 18:26:51 +00:00
ncfavier 2de78ea45d deploy: c1a830c8fa 2023-01-02 19:37:11 +00:00
teto e9de33d7df deploy: dd99675ee8 2022-12-29 21:36:56 +00:00
teto dad560dac4 deploy: c8f6322303 2022-12-29 21:34:10 +00:00
rycee 2eda13ba80 deploy: 079a33a015 2022-12-29 21:28:10 +00:00
teto fb91f5101f deploy: f97f191fe7 2022-12-29 12:43:10 +00:00
teto 9c2339409a deploy: a993eac106 2022-12-29 00:49:36 +00:00
rycee a4ddddf83c deploy: fa1bc088ea 2022-12-28 22:35:50 +00:00
rycee b8d0622c79 deploy: fb49fbc368 2022-12-28 22:13:42 +00:00
rycee e87b4a5c47 deploy: 8745cc9a21 2022-12-28 21:39:00 +00:00
rycee 0160bd554a deploy: 3ad22341a2 2022-12-28 20:26:47 +00:00
rycee c4594c2b8a deploy: 646ac0ad17 2022-12-28 16:41:05 +00:00
rycee 506edcfebb deploy: c55fa26ce0 2022-12-25 11:35:56 +00:00
rycee 26c22bccc6 deploy: 939731b8cb 2022-12-25 09:07:40 +00:00
rycee a4c8c1d37c deploy: d7eee202e5 2022-12-23 22:15:48 +00:00
rycee 5f48d5f69c deploy: e7eba9cc46 2022-12-19 14:36:40 +00:00
rycee 92738da75e deploy: 37713c6b04 2022-12-18 07:27:54 +00:00
sumnerevans c7b53b2949 deploy: 7d55a72d4c 2022-12-16 16:56:16 +00:00
rycee 924b467936 deploy: b7eb400d41 2022-12-16 16:07:00 +00:00
rycee 88fab93069 deploy: 0e9e86b179 2022-12-16 15:13:23 +00:00
rycee ce9ce85ab1 deploy: e412025fff 2022-12-13 22:49:36 +00:00
rycee 14e5aa9378 deploy: 263f6e4523 2022-12-13 21:49:58 +00:00
rycee c15edb10c7 deploy: 7e81e7ae2b 2022-12-05 22:33:37 +00:00
rycee d0a84b526e deploy: b5c083300b 2022-12-05 12:43:32 +00:00
rycee 31f368e4aa deploy: c3060ab937 2022-12-05 11:58:33 +00:00
rycee e5583f5cb0 deploy: 6ce326cef9 2022-12-05 10:15:51 +00:00
rycee b71e916d54 deploy: e3e2abaef5 2022-12-05 08:46:43 +00:00
rycee b002c24153 deploy: 90b0e5f440 2022-12-04 14:39:32 +00:00
rycee 6668972acb deploy: e56714a057 2022-12-04 13:37:02 +00:00
rycee cd476ce9b8 deploy: 9fb1bb9794 2022-12-04 08:48:11 +00:00
rycee 8aa7e32de8 deploy: ca48fced83 2022-12-04 08:23:47 +00:00
rycee 095520d631 deploy: eb3598cf44 2022-12-03 09:25:32 +00:00
rycee dfe2cfd4e4 deploy: 71fa4cdf9c 2022-12-02 14:52:02 +00:00
rycee 20c5a41252 deploy: e38ce0ae16 2022-11-30 11:12:24 +00:00
rycee 141cdff016 deploy: 50c9bccb6a 2022-11-27 18:20:07 +00:00
teto 73bea6a3d9 deploy: f7fed4dd3d 2022-11-27 17:49:33 +00:00
teto 2bace16a28 deploy: 1bdbebc3f8 2022-11-27 15:16:19 +00:00
rycee bad65feca5 deploy: 7ae7250df8 2022-11-27 08:43:49 +00:00
teto 9e39bba215 deploy: e999dfe7cb 2022-11-27 00:50:03 +00:00
teto 9510d6087f deploy: cc58d31953 2022-11-27 00:38:23 +00:00
rycee b968c5ad6f deploy: 62cb5bcf93 2022-11-24 22:32:23 +00:00
rycee d165df7cd6 deploy: f7641a3ff3 2022-11-21 23:09:04 +00:00
sumnerevans 8c142a2b61 deploy: 433e8de330 2022-11-21 15:36:07 +00:00
rycee 37279a0e2a deploy: c0f9cbcf93 2022-11-19 23:39:42 +00:00
sumnerevans 08aaa98f11 deploy: 5589b28e66 2022-11-18 16:01:51 +00:00
sumnerevans 07c337fa64 deploy: c94c9c342f 2022-11-18 16:00:17 +00:00
sumnerevans 5e064830a2 deploy: fe85cc4c37 2022-11-17 20:27:43 +00:00
rycee e57c9cc4de deploy: bc90de24d8 2022-11-13 11:45:57 +00:00
rycee e0ea54d47d deploy: 651db464dc 2022-11-13 09:19:06 +00:00
rycee 8111634844 deploy: 6ce3493a3c 2022-11-09 08:30:22 +00:00
rycee 386a92fcb6 deploy: d20e3d070c 2022-11-08 09:17:00 +00:00
rycee c00446e117 deploy: 886675991b 2022-11-07 14:55:25 +00:00
rycee 43b5377d35 deploy: 989d4fa536 2022-11-05 23:33:06 +00:00
rycee bbce1dc247 deploy: b764068a50 2022-11-04 15:54:47 +00:00
rycee 324ab4ded9 deploy: 9333581075 2022-11-03 09:51:08 +00:00
rycee c9efbaf6be deploy: 916811c8f9 2022-11-02 11:52:47 +00:00
rycee b2d01fcb7e deploy: 04e844090e 2022-11-02 00:19:59 +00:00
rycee b425cffddc deploy: 160025ca46 2022-10-31 09:25:10 +00:00
rycee 43e4c57276 deploy: d3f21617ac 2022-10-27 16:44:40 +00:00
rycee 8b141fe238 deploy: 7dc4e4ebd7 2022-10-24 22:25:58 +00:00
berbiche 161f14079f deploy: 186d9399f9 2022-10-23 20:53:21 +00:00
rycee ea7dd7141f deploy: 69d19b9839 2022-10-22 19:34:43 +00:00
rycee 269100721f deploy: c485669ca5 2022-10-20 08:19:48 +00:00
rycee a3e7e14189 deploy: d1191c6d05 2022-10-20 06:49:18 +00:00
rycee f170ab0d62 deploy: 42f81ac107 2022-10-18 08:13:28 +00:00
rycee 8058803f39 deploy: 04f5399978 2022-10-16 20:15:51 +00:00
berbiche 4f0a03ab6a deploy: 2ecb3ea990 2022-10-15 19:49:55 +00:00
rycee 0758285b54 deploy: 2d8e5a9934 2022-10-12 23:27:40 +00:00
rycee 979542b74d deploy: e1f1160284 2022-10-08 23:24:12 +00:00
rycee 6523b2cfbd deploy: bd87a34bb4 2022-10-08 20:19:08 +00:00
rycee cf64dcb62f deploy: 9fcae11ff2 2022-10-07 08:41:13 +00:00
rycee a10af515f2 deploy: be2cade373 2022-10-06 23:37:34 +00:00
rycee 56cd565813 deploy: 8c297e1816 2022-10-06 23:21:13 +00:00
rycee d13178364c deploy: 599e22b1c7 2022-10-06 22:39:23 +00:00
rycee fe1ba962f7 deploy: 6427ae9578 2022-10-06 17:53:44 +00:00
teto 62e18b055a deploy: e4e639dd4d 2022-10-03 07:51:39 +00:00
rycee 02ba151020 deploy: a7f0cc2d7b 2022-09-30 21:54:44 +00:00
rycee 33315518a7 deploy: 9727190b80 2022-09-30 18:48:30 +00:00
rycee bee451ad2c deploy: 5c5a5b9b45 2022-09-30 18:41:33 +00:00
berbiche 220858c749 deploy: a053da0f22 2022-09-30 16:55:44 +00:00
berbiche 2a63bd675f deploy: e7be7c4688 2022-09-30 16:54:28 +00:00
rycee 5ab983b803 deploy: 864ff685fe 2022-09-29 11:16:46 +00:00
rycee f77d42a230 deploy: 9da6c0232e 2022-09-29 11:03:40 +00:00
rycee 9737c2c9b4 deploy: 28334988db 2022-09-29 10:04:51 +00:00
dermetfan 61a78ec23d deploy: 65b65ce5ef 2022-09-26 18:36:58 +00:00
rycee 360276af09 deploy: 707cb75ed3 2022-09-25 23:01:35 +00:00
rycee d979e001d9 deploy: 9b91709899 2022-09-25 21:10:50 +00:00
teto 0f264f407f deploy: bd83eab622 2022-09-22 08:40:53 +00:00
rycee 29b1df551d deploy: f17819f4f1 2022-09-21 22:58:12 +00:00
rycee a9eb968b26 deploy: f5e4614c11 2022-09-21 22:36:18 +00:00
rycee 6e78b24ebb deploy: 41790ba656 2022-09-19 23:27:12 +00:00
rycee eac8790692 deploy: 9555918151 2022-09-19 20:25:11 +00:00
rycee 64308e80c1 deploy: 5427f3d1f0 2022-09-16 11:58:31 +00:00
rycee 9d437d57c6 deploy: 6745da6dce 2022-09-15 07:35:34 +00:00
rycee 8ae8309c1f deploy: ebd7830814 2022-09-15 07:23:25 +00:00
berbiche 106ea3b306 deploy: 60c6bfe322 2022-09-13 20:07:47 +00:00
rycee 2feaab06fe deploy: 9f7fe353b6 2022-09-09 21:39:12 +00:00
rycee b7dcef7225 deploy: f9f4c8e1e7 2022-09-09 10:08:16 +00:00
rycee 3cb8dce6b3 deploy: 4cfc0a1e02 2022-09-08 18:08:16 +00:00
rycee b314be1c67 deploy: 6ec6b2e362 2022-09-08 17:24:48 +00:00
rycee 5b51b132bd deploy: 340ec22f6f 2022-09-08 09:18:39 +00:00
sumnerevans 11baf6706f deploy: de94878b6b 2022-09-06 13:51:26 +00:00
sumnerevans 3f6496909b deploy: 583a99f016 2022-09-05 16:56:59 +00:00
rycee 6cab5d8d46 deploy: 140aaed3df 2022-09-05 13:06:21 +00:00
rycee cd27874e8e deploy: de079ec371 2022-09-05 12:46:32 +00:00
rycee 342dbf9d96 deploy: 7b512c94ff 2022-09-05 10:48:44 +00:00
berbiche f3b1edc959 deploy: d89bdff445 2022-08-27 04:10:27 +00:00
berbiche d691924642 deploy: 8e4220e6c6 2022-08-27 02:38:16 +00:00
teto 84615139d9 deploy: 0884d6c6e4 2022-08-26 20:12:15 +00:00
berbiche 9a285340a1 deploy: 5bb1f67568 2022-08-26 19:49:42 +00:00
rycee 0748e0b1e4 deploy: 3d3bbdfe95 2022-08-25 23:06:19 +00:00
rycee ff5918d529 deploy: 76fbb1b15e 2022-08-25 22:14:09 +00:00
rycee 2a469e1cf3 deploy: 7bb4576f46 2022-08-25 21:25:08 +00:00
rycee 6faf11f882 deploy: ae474885f7 2022-08-25 19:18:41 +00:00
berbiche 0191a5659d deploy: c5b4177bda 2022-08-25 19:02:49 +00:00
berbiche e6a6e1053b deploy: b382b59faf 2022-08-24 19:57:41 +00:00
teto 18d6d88c21 deploy: 353d21e108 2022-08-23 20:03:01 +00:00
rycee 14e19ef2bf deploy: 8ea0e4d6d8 2022-08-23 19:00:09 +00:00
teto 5315382109 deploy: 0160a0cef0 2022-08-22 20:49:56 +00:00
rycee 32cb3ebe1c deploy: ff5133843c 2022-08-14 19:53:40 +00:00
rycee 15b63a12a7 deploy: 44dcad5604 2022-08-14 19:04:30 +00:00
rycee e36b3b55cd deploy: 8675cfa549 2022-08-12 19:06:45 +00:00
teto efba0140cb deploy: 324fedcf9f 2022-08-11 21:09:17 +00:00
rycee aa22ecbecc deploy: 389f2b2037 2022-08-08 16:54:11 +00:00
rycee 567346ec0c deploy: f5e9879e74 2022-08-07 13:34:28 +00:00
rycee 759427fd20 deploy: d9e03b7f8c 2022-08-07 09:13:53 +00:00
rycee f9a4468bad deploy: 91f26e0b0e 2022-08-07 09:05:27 +00:00
rycee e71fec0cfe deploy: d1c677ac25 2022-08-01 16:53:18 +00:00
sumnerevans 8f79c416b7 deploy: 7146638e9e 2022-07-31 01:50:13 +00:00
rycee 3294451c73 deploy: 0e2f7876d2 2022-07-27 12:33:43 +00:00
rycee c575c9e300 deploy: b13946438f 2022-07-27 12:14:35 +00:00
rycee 644fe27257 deploy: a3b778e672 2022-07-25 11:47:53 +00:00
rycee 30288109a6 deploy: 572f348a10 2022-07-24 13:31:28 +00:00
rycee 2fa552d1d4 deploy: 218cb3aee2 2022-07-23 13:27:26 +00:00
rycee 3881a4562c deploy: 9cf40a43fc 2022-07-23 13:15:54 +00:00
rycee 7d6138b70c deploy: 64c745fe1c 2022-07-18 13:02:32 +00:00
rycee 907520dc99 deploy: 2c94b9801f 2022-07-13 13:34:44 +00:00
rycee 475beadf55 deploy: 66d7007e43 2022-07-13 12:57:03 +00:00
rycee 697aab4366 deploy: 602f2ce59c 2022-07-12 21:55:39 +00:00
rycee 1bd6006f63 deploy: b8bb5f291a 2022-07-12 20:39:46 +00:00
rycee 36eb962948 deploy: 6311f4adc3 2022-07-12 09:56:03 +00:00
rycee eb2ca47493 deploy: 177f1887d4 2022-07-12 09:40:52 +00:00
rycee 9ead114d4f deploy: 0639aa34f1 2022-07-12 08:49:53 +00:00
rycee 5db9a0b897 deploy: 8d5b07fc83 2022-07-09 19:48:52 +00:00
sumnerevans bced1e4924 deploy: 25a9948361 2022-07-07 17:04:58 +00:00
sumnerevans 1372e5c0d3 deploy: 12cfcc1b9d 2022-07-07 06:55:44 +00:00
sumnerevans 2cd806457b deploy: ef990143b6 2022-07-07 06:50:38 +00:00
berbiche d1d979d3d3 deploy: face4094d4 2022-07-07 03:37:11 +00:00
rycee bed95508f1 deploy: f2445620d1 2022-07-04 09:50:32 +00:00
rycee 6877c0298d deploy: 3bf16c0fd1 2022-06-27 22:28:52 +00:00
rycee 3cc466cfc4 deploy: 9550595502 2022-06-26 20:52:28 +00:00
rycee 0930704a6c deploy: 0ca0b91088 2022-06-26 19:39:28 +00:00
rycee 157659b856 deploy: 72a135b093 2022-06-26 18:07:21 +00:00
rycee 322bad116e deploy: f26946858e 2022-06-25 23:18:04 +00:00
rycee df05dacef7 deploy: e0baf8ee0c 2022-06-25 09:52:25 +00:00
rycee d13ec3a9af deploy: da55d18ba2 2022-06-25 09:26:17 +00:00
rycee 9eaf9b698f deploy: 223b9deead 2022-06-24 23:13:48 +00:00
rycee 8105b5cf9f deploy: 65bcfaccc5 2022-06-24 17:36:03 +00:00
rycee d34bc58a1e deploy: fd047c84f7 2022-06-24 17:03:17 +00:00
rycee bb98e26b45 deploy: 77f1c7636a 2022-06-21 23:17:50 +00:00
rycee d1c33b50ab deploy: d059b9448a 2022-06-21 22:58:17 +00:00
rycee ccae411b60 deploy: 206ded407e 2022-06-21 19:58:32 +00:00
rycee 9d2453f5bb deploy: ce563f5911 2022-06-20 23:18:20 +00:00
rycee 6d8f1fbc72 deploy: 60b064249d 2022-06-20 23:03:56 +00:00
rycee ef9e6148a5 deploy: 931e610552 2022-06-20 22:52:32 +00:00
rycee 894e7a5e97 deploy: 3c710201d5 2022-06-20 22:35:13 +00:00
rycee 82c579cf95 deploy: ce8266dedc 2022-06-19 22:36:58 +00:00
rycee 367a771cf4 deploy: 931653b99f 2022-06-18 23:26:22 +00:00
rycee 1c2b5cc9ec deploy: 586ac1fd58 2022-06-18 22:54:03 +00:00
rycee 8b7a1c86ef deploy: a0e7ffe7aa 2022-06-18 19:10:07 +00:00
teto 52eebec2d7 deploy: 07dbd4c0dd 2022-06-15 21:45:36 +00:00
teto d9b358fff0 deploy: 935ecea67d 2022-06-13 18:00:28 +00:00
teto 68c12dac5d deploy: 70824bb5c7 2022-06-07 19:02:04 +00:00
teto 13b72fa3c4 deploy: 64ab7d6e8d 2022-06-07 18:46:07 +00:00
teto cbd7cc7538 deploy: a3638db009 2022-06-05 09:49:37 +00:00
rycee 6dcceb37b7 deploy: 684e85d01d 2022-06-01 20:45:10 +00:00
rycee 86530b6fe5 deploy: bda2c80b4c 2022-05-30 20:16:34 +00:00
rycee e4fb4b4426 deploy: 2c8489e57a 2022-05-25 17:00:10 +00:00
rycee 12d9a4ecfd deploy: e66f0ff69a 2022-05-23 21:25:39 +00:00
sumnerevans d486d13bf0 deploy: 94780dd888 2022-05-21 17:13:10 +00:00
rycee 9b3b6d25fd deploy: e6869735d2 2022-05-19 21:45:29 +00:00
rycee e78539c824 deploy: cb9f03d519 2022-05-18 23:12:54 +00:00
rycee f015b7a048 deploy: 32a7da69dc 2022-05-15 22:27:33 +00:00
sumnerevans b6a20644f2 deploy: 273598f53e 2022-05-13 14:28:08 +00:00
teto f815babcfa deploy: f735a8502b 2022-05-10 20:25:23 +00:00
berbiche 85a416cc51 deploy: 882bd8118b 2022-05-07 01:28:22 +00:00
berbiche 52a0eccd13 deploy: c13ffa3ed4 2022-05-03 22:30:04 +00:00
sumnerevans 2b405d0eb1 deploy: ac722cddf4 2022-05-03 17:21:49 +00:00
rycee 372f581577 deploy: 0304f0f58b 2022-05-02 22:57:54 +00:00
rycee e01b5987a9 deploy: 5872aad1d0 2022-05-02 21:28:54 +00:00
sumnerevans 75c06bdead deploy: 26858fc0db 2022-05-01 14:27:50 +00:00
sumnerevans 7a07cb3441 deploy: df6010551d 2022-05-01 00:39:21 +00:00
sumnerevans 860751ce21 deploy: f8b51be714 2022-04-29 20:02:40 +00:00
rycee c60011b444 deploy: 65a32578d9 2022-04-24 07:17:59 +00:00
berbiche 90f3f3c010 deploy: f47001cec9 2022-04-17 22:06:56 +00:00
berbiche e86c1370aa deploy: c82b8ac5ad 2022-04-17 21:08:39 +00:00
rycee 0406dcfdb4 deploy: 7add9ce2e5 2022-04-15 22:18:09 +00:00
berbiche b912cd42cb deploy: d49d68f419 2022-04-15 00:59:01 +00:00
rycee cbfdaf0340 deploy: 7da4e6680f 2022-04-13 21:23:02 +00:00
berbiche cf2d3cfba2 deploy: e39a9d0103 2022-04-11 01:54:50 +00:00
berbiche 2261272c20 deploy: 66ffa7a0a6 2022-04-07 06:39:01 +00:00
berbiche 5749773023 deploy: 07b941f0c4 2022-04-05 03:48:57 +00:00
berbiche 3f5592e603 deploy: a985e711e8 2022-04-05 03:33:11 +00:00
berbiche ec712a25f8 deploy: 3549f5d0f5 2022-04-05 03:32:45 +00:00
sumnerevans 8368ba630a deploy: 0382c5f75e 2022-04-04 14:54:19 +00:00
rycee f42ae7d7de deploy: d123fca83c 2022-03-27 00:24:39 +00:00
rycee 934f3b014a deploy: 8afee75d0d 2022-03-26 08:44:54 +00:00
rycee 625a463414 deploy: ac94041153 2022-03-23 23:51:37 +00:00
rycee e85b6b7576 deploy: e2ebc3a3af 2022-03-23 22:40:07 +00:00
sumnerevans 8c19d49ca1 deploy: 64823066c2 2022-03-21 21:42:37 +00:00
berbiche d878d50c97 deploy: 7cf15b19a9 2022-03-18 22:55:01 +00:00
berbiche 3732dabf36 deploy: e2a85ac43f 2022-03-18 02:57:35 +00:00
berbiche d565e47334 deploy: 32e433d07d 2022-03-18 02:48:15 +00:00
sumnerevans 59fa886585 deploy: 590da80ceb 2022-03-18 02:43:46 +00:00
berbiche e8f13f4e63 deploy: e01facc340 2022-03-17 19:31:37 +00:00
uvNikita b62f8cfa33 deploy: 970b57fd3c 2022-03-17 12:45:52 +00:00
rycee bb83b097eb deploy: 8bdfa41b4e 2022-03-13 21:33:28 +00:00
rycee 710baac496 deploy: e6e19ea5a8 2022-03-13 10:58:17 +00:00
rycee 228830142b deploy: afe96e7433 2022-03-06 09:41:48 +00:00
rycee d63a702db8 deploy: 87beebc7a2 2022-03-06 09:09:40 +00:00
berbiche 749f480c0d deploy: d119cea376 2022-03-04 03:33:44 +00:00
rycee 4558469892 deploy: e58a7cb13d 2022-03-04 00:26:18 +00:00
berbiche 864fd55a98 deploy: 1d90b6065a 2022-02-26 22:42:48 +00:00
rycee 452aec530a deploy: c7a13f76a7 2022-02-26 11:36:46 +00:00
berbiche 9d9a34d1ab deploy: 650cfe60f3 2022-02-24 23:46:29 +00:00
rycee e311bc8fcc deploy: 8f7d925503 2022-02-24 23:05:16 +00:00
sumnerevans 27850f982f deploy: b3af91d293 2022-02-21 21:18:04 +00:00
rycee 8db61274ca deploy: 4f4165a8b9 2022-02-17 23:39:16 +00:00
rycee 6fb19643d7 deploy: 5b208b42b2 2022-02-17 22:00:20 +00:00
rycee 35d25bf46c deploy: 30082a623a 2022-02-17 21:47:11 +00:00
rycee 1cb88762e9 deploy: 498c188e62 2022-02-17 17:43:25 +00:00
rycee ac94f820b6 deploy: 810e5f3613 2022-02-17 00:07:18 +00:00
teto 89d8ba66ea deploy: a3c18a60d5 2022-02-16 15:39:06 +00:00
rycee 17b537849c deploy: 50204cea94 2022-02-15 22:57:15 +00:00
rycee e455461f50 deploy: 7c2ae0bdd2 2022-02-12 23:06:50 +00:00
rycee 3e7d1729eb deploy: 44934a1a91 2022-02-12 22:51:40 +00:00
rycee e2be631550 deploy: 85bbc6cc12 2022-02-10 21:42:14 +00:00
sumnerevans 3a1090e440 deploy: e2aa1f5986 2022-02-08 18:55:15 +00:00
berbiche 5b250cc8f1 deploy: 1ca6293c8f 2022-02-07 17:41:53 +00:00
rycee e4e17ecdfe deploy: 63dccc4e60 2022-02-04 00:10:04 +00:00
rycee d4bf6c45f0 deploy: 1fa809f783 2022-02-03 22:15:02 +00:00
berbiche e61a376a00 deploy: 9d369c75ce 2022-02-02 21:36:14 +00:00
berbiche 66e8308dca deploy: 933b6d97b4 2022-02-02 21:35:09 +00:00
berbiche b1f6c2e05f deploy: 184b0154f2 2022-02-02 20:58:04 +00:00
rycee 9084cec1de deploy: 418ae217dd 2022-01-28 23:12:14 +00:00
rycee 59e3ccccf0 deploy: fb939d1acf 2022-01-28 22:17:56 +00:00
teto 6ba42941a0 deploy: 4e92ec84f9 2022-01-27 18:16:47 +00:00
teto 1bc43c0419 deploy: aa6261bb96 2022-01-27 17:59:10 +00:00
teto cc4a3990bb deploy: 8d3fe1366b 2022-01-27 15:28:20 +00:00
rycee 4706414949 deploy: 24ed6e6d4d 2022-01-26 23:55:34 +00:00
rycee 1070a9815a deploy: cbc176010b 2022-01-26 23:11:35 +00:00
rycee 0dc906706c deploy: 93b52ce0bd 2022-01-26 21:48:16 +00:00
rycee dfa4c8f539 deploy: 990ca662c4 2022-01-25 23:02:15 +00:00
rycee df6afa7c92 deploy: 462d4a7abd 2022-01-24 23:43:20 +00:00
rycee 33ac20ef79 deploy: 192675b149 2022-01-24 23:11:42 +00:00
rycee eb3ef1a73d deploy: c47c350f65 2022-01-22 20:29:37 +00:00
rycee 627eab7a5b deploy: e622c5d836 2022-01-22 17:27:50 +00:00
rycee 486bb80725 deploy: 54b8b13a9b 2022-01-22 16:13:50 +00:00
rycee 791ba16a99 deploy: d469b9bf8a 2022-01-22 15:30:44 +00:00
berbiche c22319dda2 deploy: b59752b9ff 2022-01-17 23:22:30 +00:00
berbiche e8294186c2 deploy: 9bceb8292e 2022-01-17 21:39:11 +00:00
berbiche c5410d0a9d deploy: 60d2c9660b 2022-01-17 21:38:29 +00:00
berbiche 247f613ded deploy: 986cf41b3b 2022-01-16 23:20:23 +00:00
rycee cdb43e285e deploy: 1477eb1555 2022-01-16 17:49:36 +00:00
rycee 99c666ba1f deploy: a5dd5d5f19 2022-01-14 00:17:32 +00:00
rycee c2960b76e0 deploy: 204f9808d3 2022-01-11 14:32:47 +00:00
rycee 12b064cc82 deploy: 8a5550aea3 2022-01-11 12:59:40 +00:00
berbiche c35acfa385 deploy: f3be3cda6a 2022-01-10 07:17:57 +00:00
berbiche 38663c0411 deploy: a90ddcd627 2022-01-09 03:54:30 +00:00
rycee 80a901ad4e deploy: 5fb55d51e2 2022-01-06 08:30:16 +00:00
berbiche 5143088069 deploy: 426ab2cf11 2022-01-05 03:59:08 +00:00
sumnerevans 4eba5361d5 deploy: 65e5b835a9 2022-01-03 19:04:04 +00:00
rycee c5789604db deploy: adaea605db 2022-01-02 07:50:03 +00:00
rycee b8946bbe6c deploy: 89bdef7994 2021-12-31 10:02:05 +00:00
rycee 7ce10c058e deploy: 2f40cd05dc 2021-12-29 09:41:07 +00:00
rycee 6aefb8f9f3 deploy: c9dbe2847e 2021-12-29 08:49:40 +00:00
rycee a17e8cf655 deploy: 0b197562ab 2021-12-27 23:03:23 +00:00
berbiche b889eb031b deploy: f15b151ca1 2021-12-23 22:01:25 +00:00
rycee 190aff9803 deploy: 1b03a8ab7a 2021-12-21 22:55:43 +00:00
rycee f78b64b8c5 deploy: 02426bb52f 2021-12-21 22:40:06 +00:00
rycee 9fee8e70c7 deploy: 7ec50b1f77 2021-12-21 19:56:31 +00:00
rycee 1eea673188 deploy: aef97988da 2021-12-20 21:59:58 +00:00
rycee a90d0e0d01 deploy: 679e07e32e 2021-12-20 21:35:27 +00:00
berbiche 1265353248 deploy: 3db6036775 2021-12-19 05:22:10 +00:00
rycee f6d52fdc95 deploy: d8f9dcfbd3 2021-12-16 18:48:16 +00:00
rycee 7cbcc00bcf deploy: 78aa7cceff 2021-12-16 18:22:32 +00:00
rycee e8a15c1cde deploy: 9bcad20013 2021-12-13 20:50:16 +00:00
rycee 09b69da2f8 deploy: 3d46c011d2 2021-12-12 17:13:33 +00:00
rycee 56495fa2cc deploy: 0ebed30a10 2021-12-11 18:21:26 +00:00
rycee 99a4a34de2 deploy: 6fe3b539e0 2021-12-11 11:57:20 +00:00
rycee 41e5b1f896 deploy: fa73c3167e 2021-12-10 23:33:46 +00:00
rycee 452b2ca05d deploy: c7592b747b 2021-12-10 23:11:16 +00:00
rycee 1ca27363cd deploy: 829e89a16f 2021-12-08 10:42:17 +00:00
rycee 73ed7a3c09 deploy: 736581f113 2021-12-08 00:32:59 +00:00
rycee baa0f3bf4a deploy: 1aaa1a033b 2021-12-03 18:12:50 +00:00
rycee d2e5694080 deploy: 290a188dad 2021-12-03 17:53:03 +00:00
rycee 09d66100a7 deploy: f46972e466 2021-12-03 17:48:02 +00:00
rycee ef9df77426 deploy: fbb80207f3 2021-12-03 00:17:36 +00:00
rycee 58f6b9981a deploy: f23073f1da 2021-11-30 22:31:51 +00:00
rycee 0162bee547 deploy: 7c320a5325 2021-11-30 21:24:18 +00:00
rycee a48019f5c4 deploy: ea1794a798 2021-11-26 08:27:09 +00:00
rycee f3854a41e1 deploy: 579f2e8beb 2021-11-25 21:45:50 +00:00
berbiche 56aac0e8d5 deploy: 609370699f 2021-11-25 00:10:45 +00:00
berbiche 17dbd4a3c1 deploy: df931a59a5 2021-11-24 02:33:51 +00:00
berbiche 1ab1c4009a deploy: c2aa831491 2021-11-23 06:07:26 +00:00
rycee 1703f0869c deploy: 15ae861e1b 2021-11-21 20:20:31 +00:00
rycee afaa80b40b deploy: 8a16d62e95 2021-11-20 08:45:30 +00:00
rycee 9c3dd761e4 deploy: 8230decb3f 2021-11-19 23:01:09 +00:00
rycee 83ab9c3a48 deploy: 2452979efe 2021-11-18 19:56:03 +00:00
rycee f888031120 deploy: d85bf67c48 2021-11-17 23:22:51 +00:00
sumnerevans 5deef532c8 deploy: 5559ef0023 2021-11-16 18:52:32 +00:00
sumnerevans 27370bdc39 deploy: 05a3116091 2021-11-16 17:32:03 +00:00
berbiche 190a631998 deploy: a7c5b00d44 2021-11-15 21:01:36 +00:00
rycee e41ea7354e deploy: 2dcd9eb021 2021-11-15 19:58:45 +00:00
berbiche e8b3b913fe deploy: 3f12ce5f7d 2021-11-15 04:01:11 +00:00
rycee f9f8afa1ad deploy: 0f5d93119c 2021-11-13 23:31:16 +00:00
teto 2bf50175f1 deploy: f7a37ad0b6 2021-11-13 23:08:06 +00:00
rycee c152769a40 deploy: 520adafcb9 2021-11-13 00:29:03 +00:00
rycee d76e39cac5 deploy: be1ad30503 2021-11-12 22:43:38 +00:00
berbiche 764f9a36fa deploy: 1e5c8e9bff 2021-11-10 05:00:22 +00:00
sumnerevans d814037567 deploy: f6f013f764 2021-11-06 16:11:03 +00:00
teto 135a708bf4 deploy: 70c5b268e1 2021-11-04 16:43:57 +00:00
rycee 25ce345d82 deploy: 288faaa5a6 2021-11-02 08:18:27 +00:00
rycee a396b3e02e deploy: 21590d40c1 2021-11-01 23:19:33 +00:00
rycee 29d2147792 deploy: 2e1a5b53ec 2021-11-01 21:57:00 +00:00
rycee e7d37fac59 deploy: 7e30aec282 2021-10-30 18:34:17 +00:00
sumnerevans e1e1df707e deploy: 158bc59398 2021-10-28 04:14:33 +00:00
sumnerevans d92103ad03 deploy: 9282dbc1fa 2021-10-27 22:41:25 +00:00
rycee 064e4133e2 deploy: 406eeec0b9 2021-10-23 19:41:33 +00:00
berbiche d58ad2ef03 deploy: 8278c14f5f 2021-10-22 21:53:04 +00:00
rycee 4b6552ca68 deploy: cfe82d9f44 2021-10-21 21:23:54 +00:00
rycee 648cbc644f deploy: 3e4fedc1d9 2021-10-21 20:49:06 +00:00
sumnerevans 57b47f45b9 deploy: 91155a98ed 2021-10-20 15:23:06 +00:00
rycee 3efe11e047 deploy: b5d738b5a3 2021-10-18 07:46:19 +00:00
rycee 58b1fa0b5d deploy: d244ca125f 2021-10-18 06:49:23 +00:00
rycee 0b5e207619 deploy: a77a01d1f6 2021-10-12 22:06:40 +00:00
rycee db9f06b008 deploy: 0b47ded208 2021-10-11 19:54:53 +00:00
rycee e572e27083 deploy: 32285d8fe6 2021-10-08 22:54:39 +00:00
berbiche 34778c3d2b deploy: 82c92a18ba 2021-10-08 21:30:07 +00:00
berbiche 9e7133252f deploy: fd2f746016 2021-10-08 20:37:41 +00:00
berbiche 47ae6c8cd3 deploy: 854406680b 2021-10-06 14:12:53 +00:00
berbiche c3a15c9bfb deploy: 592da767bd 2021-10-05 23:15:39 +00:00
rycee f855e193da deploy: af2007bb77 2021-10-05 22:08:53 +00:00
berbiche a2514d4ebf deploy: e4df31dcea 2021-10-05 16:59:17 +00:00
rycee d031e89d64 deploy: 88f9b33384 2021-10-04 20:54:30 +00:00
rycee 2b71a3063e deploy: 099cbcf13e 2021-10-03 21:56:43 +00:00
rycee 3d9c85a69e deploy: e0a87d75e9 2021-10-03 10:19:36 +00:00
rycee 26f4c88c21 deploy: 095f3e32ae 2021-10-03 07:58:15 +00:00
rycee 1eea3ba803 deploy: 0f3dfc94ef 2021-10-02 23:02:07 +00:00
rycee 0ec4badff1 deploy: 52e84a040e 2021-09-30 23:35:31 +00:00
rycee 31c6326578 deploy: cb09a968e9 2021-09-27 22:08:35 +00:00
rycee dbef184d54 deploy: eee807560b 2021-09-23 21:01:43 +00:00
rycee a5cdbaa4aa deploy: 7cb118c9d2 2021-09-21 20:09:41 +00:00
rycee e6f9f27cbe deploy: 514acaebb9 2021-09-14 22:21:53 +00:00
rycee 49b4c70dc9 deploy: 4b964d2f7b 2021-09-14 21:41:59 +00:00
rycee 88ff1e2a13 deploy: 208e310e94 2021-09-12 22:36:42 +00:00
rycee 0547f00eb5 deploy: 275f39611d 2021-09-07 21:56:00 +00:00
sumnerevans 77c616ef00 deploy: 5e46262cb1 2021-09-06 01:01:08 +00:00
rycee 785ca6121b deploy: 2952168ed5 2021-09-04 21:14:17 +00:00
sumnerevans 8f7ba0f15c deploy: 21a2ff4496 2021-08-31 16:53:05 +00:00
berbiche f154dc20b4 deploy: 61ca2fc1c0 2021-08-30 03:43:33 +00:00
berbiche aa50466c2c deploy: 33db7cc6a6 2021-08-27 02:09:20 +00:00
rycee 2290f38717 deploy: f637e145d7 2021-08-26 07:06:10 +00:00
rycee 253dd24c17 deploy: 521a03d8bf 2021-08-26 06:54:17 +00:00
sumnerevans 4c099fdedb deploy: 2cf19d1d98 2021-08-24 19:35:49 +00:00
sumnerevans 7291eb5b70 deploy: 9029fd2b9d 2021-08-23 14:40:29 +00:00
berbiche c9f7d188ba deploy: c5b3069145 2021-08-22 00:41:42 +00:00
berbiche 2f7ee90b65 deploy: bf6b85136b 2021-08-19 04:34:33 +00:00
rycee 09753fb78e deploy: 1a6df903e3 2021-08-18 22:15:44 +00:00
rycee 650edb014e deploy: 49a03303e1 2021-08-18 21:59:10 +00:00
berbiche 8fcb81247b deploy: a5c609b4b1 2021-08-18 02:58:52 +00:00
berbiche e999b2ed84 deploy: ec260995e2 2021-08-18 01:44:59 +00:00
rycee b4606895b3 deploy: 72394f6d6b 2021-08-17 22:45:49 +00:00
berbiche f6709905c9 deploy: 8d68dbd144 2021-08-17 20:12:53 +00:00
rycee 5401c28e2d deploy: 7ef3db3730 2021-08-17 17:53:17 +00:00
rycee 8670877b08 deploy: ad0fc085c7 2021-08-16 22:13:40 +00:00
rycee f079baa408 deploy: 763b1a1c55 2021-08-16 21:46:00 +00:00
rycee c9def71c5b deploy: 3d93e1e802 2021-08-12 19:38:41 +00:00
sumnerevans 90e3c373c8 deploy: c049a09d1a 2021-08-11 15:22:35 +00:00
sumnerevans 54e72bbb24 deploy: a57ef9dad1 2021-08-10 18:41:55 +00:00
rycee 9e792c2e14 deploy: 5515ec99cc 2021-08-09 22:36:55 +00:00
berbiche e03b58a6fd deploy: 2c4234cb79 2021-08-09 00:30:16 +00:00
berbiche 73e79da56e deploy: 59be1f4983 2021-08-08 00:45:26 +00:00
rycee 013ce618f4 deploy: b0d769691c 2021-08-06 22:18:11 +00:00
rycee 22ee43487b deploy: ab6517d34a 2021-08-06 20:53:23 +00:00
rycee 5b59a8f228 deploy: 5f6364fc28 2021-07-29 14:05:30 +00:00
rycee 28f703b17e deploy: f00b7fff53 2021-07-29 14:03:04 +00:00
rycee ab494ddbb3 deploy: addc78bea0 2021-07-29 14:02:07 +00:00
rycee 9e75117dbb deploy: f3e596818876e024788796368a08c96cada8ae1b 2021-07-29 14:00:13 +00:00
berbiche 8ffac2eb41 deploy: 2272fc312d 2021-07-28 19:53:17 +00:00
berbiche c89d4446a7 deploy: e08c696524 2021-07-28 19:40:14 +00:00
teto cd71f90a5e deploy: 47ad3655ec 2021-07-27 14:00:42 +00:00
sumnerevans 181a060df6 deploy: f6f6990fc8 2021-07-26 15:16:45 +00:00
berbiche 67c6c24054 deploy: addc78bea0 2021-07-26 02:40:51 +00:00
rycee 654fcc7736 deploy: cc6909d407 2021-07-23 22:32:23 +00:00
rycee 28dcd5985d deploy: ddeeb031fd 2021-07-23 21:19:57 +00:00
berbiche 95a3d251f2 deploy: 41101d0e62 2021-07-21 04:18:15 +00:00
rycee d70fa02a50 deploy: d7e089699a 2021-07-19 21:07:11 +00:00
rycee ee55bcf040 deploy: 5f433eb164 2021-07-18 20:13:06 +00:00
rycee 6848d3f540 deploy: c476cc61b2 2021-07-15 13:50:05 +00:00
sumnerevans 00a8d91127 deploy: f56a087cbc 2021-07-15 13:10:43 +00:00
rycee 5fcb4f8779 deploy: 775cb20bd4 2021-07-12 09:05:59 +00:00
rycee d700b07f1a deploy: 06ee8ec8df 2021-07-07 21:49:41 +00:00
berbiche 97cbdb922b deploy: 97d183e2e4 2021-07-05 20:30:21 +00:00
rycee 6ae850442b deploy: ac319fd314 2021-07-04 07:42:15 +00:00
sumnerevans 2b990dc80e deploy: 3f6cb409ca 2021-06-29 19:03:38 +00:00
sumnerevans 4256aea64a deploy: 5b08b33e8f 2021-06-29 17:13:45 +00:00
sumnerevans 0b435a5f22 deploy: 85d67b0a6e 2021-06-28 15:12:02 +00:00
sumnerevans 9dc056026b deploy: dc4337d9fe 2021-06-28 06:51:20 +00:00
sumnerevans 3c2cb81fd4 deploy: a17bc3217f 2021-06-28 06:05:21 +00:00
berbiche 8e39b4f676 deploy: 8d3b273afe 2021-06-26 22:30:34 +00:00
berbiche 05247d9e06 deploy: 8eee5f5272 2021-06-26 21:30:24 +00:00
rycee 13fa41e77f deploy: 0ada50fc9c 2021-06-25 09:19:26 +00:00
rycee 16e6b2a470 deploy: 7e2b1a42aa 2021-06-24 23:09:08 +00:00
sumnerevans 361c6773aa deploy: b42fce7aaa 2021-06-23 02:57:28 +00:00
berbiche 5b95d1c200 deploy: 49864a4370 2021-06-23 00:37:30 +00:00
rycee 984f376d6e deploy: cd11c02c28 2021-06-20 20:33:20 +00:00
berbiche f17fe1876a deploy: dc1b6b8349 2021-06-20 04:58:20 +00:00
berbiche 56e4b88349 deploy: e70524cd2b 2021-06-19 22:41:02 +00:00
sumnerevans 0a25ed53ad deploy: d04e52b0c0 2021-06-17 15:07:36 +00:00
berbiche 0e411d08fd deploy: 3aa479d551 2021-06-17 01:07:00 +00:00
rycee 1971a83f5e deploy: 63af2d3e4c 2021-06-15 22:10:33 +00:00
rycee 0bc18806a1 deploy: e92f5bb79e 2021-06-15 21:40:37 +00:00
rycee a14bfb7ac2 deploy: 1e8d0beae4 2021-06-15 21:15:45 +00:00
berbiche 42edc2637d deploy: be0e73a308 2021-06-15 16:23:05 +00:00
berbiche a5de3c54d0 deploy: e0f2949c98 2021-06-15 16:12:16 +00:00
rycee 11d9f0d83e deploy: 1375fd4a03 2021-06-14 21:21:17 +00:00
rycee 5c3a7f4954 deploy: fb50102daf 2021-06-13 07:58:29 +00:00
berbiche d0ceb53e62 deploy: 42847469b3 2021-06-09 15:15:59 +00:00
berbiche 867d820daa deploy: 06a98ba0fd 2021-06-07 21:39:27 +00:00
berbiche 142892835d deploy: f74dc9c70b 2021-06-07 20:14:25 +00:00
sumnerevans 371ddc67bd deploy: 9424f31f86 2021-06-07 14:08:06 +00:00
sumnerevans f70e5068aa deploy: 3ffe2a4cdf 2021-06-07 13:41:18 +00:00
sumnerevans 8a56f90268 deploy: afb5fd962c 2021-06-06 21:32:05 +00:00
sumnerevans 9f9ec374bd deploy: 7591c8041d 2021-06-06 00:09:47 +00:00
sumnerevans c7fc87a4f0 deploy: e9ed9c2e11 2021-06-05 22:58:58 +00:00
sumnerevans 9f7ed639d2 deploy: 5eb199e937 2021-06-05 22:11:56 +00:00
rycee 8cb30b8ea8 deploy: 19d95258ac 2021-06-05 18:27:54 +00:00
rycee 52d5dbc27f deploy: 45f9cb06a9 2021-06-03 20:54:47 +00:00
rycee a555ad0806 deploy: d3cdabb5c9 2021-06-03 20:43:59 +00:00
sumnerevans 19a8802e70 deploy: 95da56b783 2021-06-03 00:04:03 +00:00
berbiche 0fd7f0d094 deploy: 30102ea9e5 2021-06-02 23:37:05 +00:00
berbiche a49d339ff9 deploy: d6bbd02e95 2021-06-02 23:27:55 +00:00
berbiche c2c8226995 deploy: b917624670 2021-06-02 15:06:02 +00:00
rycee 1ca1f44d5d deploy: 0e329cee4c 2021-05-30 21:07:11 +00:00
rycee 55a35ec3d9 deploy: d2aaeac42c 2021-05-30 10:07:33 +00:00
rycee c5c07ab5f7 deploy: 07ad6a4f76 2021-05-29 22:42:48 +00:00
rycee 29399b127b deploy: 3591cd2b3b 2021-05-29 17:41:35 +00:00
sumnerevans cb103a5dff deploy: ddf35436b7 2021-05-27 16:55:11 +00:00
rycee a6f6799412 deploy: b840707a87 2021-05-26 08:05:26 +00:00
sumnerevans 2e2f7df031 deploy: 64607f58b7 2021-05-22 21:31:50 +00:00
NickHu 2478d5c33a deploy: 4f70f49cec 2021-05-22 02:15:55 +00:00
sumnerevans 1ac8873f2a deploy: 82ab1ad467 2021-05-21 02:24:42 +00:00
rycee daea0a7da0 deploy: b449cb77b1 2021-05-19 07:04:01 +00:00
sumnerevans b875079951 deploy: cced902dda 2021-05-19 04:59:24 +00:00
teto 8377a79129 deploy: 91450f23ce 2021-05-18 23:36:52 +00:00
rycee 450aba73a6 deploy: ff616b2734 2021-05-18 20:34:01 +00:00
rycee 35b58cf109 deploy: 73ecbd3722 2021-05-18 20:22:39 +00:00
rycee 3234d90fbf deploy: f9e45390de 2021-05-17 23:01:27 +00:00
sumnerevans 6b54181ba6 deploy: b0688a631b 2021-05-17 17:25:57 +00:00
sumnerevans fa43725309 deploy: 6a471f1b11 2021-05-17 04:55:44 +00:00
berbiche ad0b901d67 deploy: 77188bcd6e 2021-05-16 03:18:33 +00:00
berbiche 3fde1c6936 deploy: 23769994e8 2021-05-11 00:15:27 +00:00
berbiche fca2340fe4 deploy: 3b799f6ea4 2021-05-09 22:13:54 +00:00
rycee d535823c3d deploy: 4896c50074 2021-05-08 09:40:25 +00:00
berbiche d12c0c1a9e deploy: ff959fd49a 2021-05-07 19:29:40 +00:00
rycee f9c612c8a1 deploy: 86944b0fb1 2021-05-06 21:47:07 +00:00
rycee e032c914da deploy: 30355f8ee6 2021-05-06 21:07:14 +00:00
rycee e5a3d9e865 deploy: f298705ae4 2021-05-06 13:49:49 +00:00
rycee f1f40bc147 deploy: 90dd375eba 2021-05-05 22:14:22 +00:00
sumnerevans cb0ea2dabb deploy: 64c5228c08 2021-05-04 14:32:23 +00:00
sumnerevans 7ea0c3ee36 deploy: 9ffb206050 2021-05-04 03:55:31 +00:00
sumnerevans ba7cd69af0 deploy: e0ee5068dd 2021-05-04 03:47:47 +00:00
rycee d97214e520 deploy: 225bf275ba 2021-05-03 07:17:13 +00:00
berbiche 77a12243ec deploy: ca7868dc29 2021-05-01 22:11:24 +00:00
berbiche c68f50a483 deploy: 2f857761d0 2021-05-01 21:38:58 +00:00
berbiche a1ac609b22 deploy: 5709b5f953 2021-05-01 20:34:33 +00:00
sumnerevans a13fc2a6b9 deploy: 614a5b55bf 2021-05-01 15:57:03 +00:00
rycee a1115c3246 deploy: 2eed138026 2021-04-30 22:13:04 +00:00
rycee d8774277cb deploy: 5e6f09795c 2021-04-30 21:02:53 +00:00
berbiche e39085ee63 deploy: 137a584e22 2021-04-28 23:57:45 +00:00
rycee 49b9f1f3d9 deploy: 4727b0543d 2021-04-28 22:33:23 +00:00
berbiche 020100451b deploy: a759143ae1 2021-04-28 19:06:42 +00:00
berbiche 504d4dbe90 deploy: c0ba8c526d 2021-04-28 18:40:48 +00:00
berbiche 8913638934 deploy: 18ad12d52b 2021-04-27 21:17:17 +00:00
berbiche b9d920e2e2 deploy: d437baa41c 2021-04-27 20:40:49 +00:00
berbiche 2ff60eb154 deploy: 865e404826 2021-04-27 20:39:30 +00:00
berbiche 69c66c3844 deploy: b4e3f069f1 2021-04-27 19:37:25 +00:00
berbiche 66031b3b3f deploy: 827636c619 2021-04-25 05:57:29 +00:00
rycee 26a070f137 deploy: c2c26120d7 2021-04-24 17:08:19 +00:00
berbiche e43a3c18db deploy: 26fa84ebce 2021-04-23 02:28:09 +00:00
berbiche 3af3dadb7f deploy: db00b39a9a 2021-04-20 23:46:16 +00:00
berbiche 6d7afc18cb deploy: 1e7e8ac75d 2021-04-20 20:17:07 +00:00
teto f68dda396a deploy: 6aa6556bca 2021-04-18 23:53:14 +00:00
rycee 56a3dd4b95 deploy: ebbbd4f2b5 2021-04-15 06:54:40 +00:00
rycee 06392fcba0 deploy: 348b5a5a69 2021-04-14 22:07:28 +00:00
rycee d774b3b377 deploy: 7cf69a3b8d 2021-04-11 20:59:29 +00:00
rycee 6b27b6b0ae deploy: 073710d7f2 2021-04-11 20:31:28 +00:00
rycee ea717458f1 deploy: 18930aaf75 2021-04-11 20:18:31 +00:00
teto 5d84a8dc40 deploy: 91418d3e57 2021-04-11 17:53:19 +00:00
rycee 5b7db593d3 deploy: f567ea8228 2021-04-10 09:05:57 +00:00
berbiche 9fdd752ebf deploy: 17a10287d2 2021-04-10 01:45:54 +00:00
berbiche f5b7bb1dc7 deploy: 3a16ebdf72 2021-04-07 17:18:30 +00:00
teto fb1479bf81 deploy: 33edf558a0 2021-04-07 14:19:04 +00:00
teto 6f60964c5f deploy: 25a6a6d298 2021-04-03 23:48:22 +00:00
rycee 7977650aa7 deploy: 6e3d93d7cc 2021-04-03 16:12:00 +00:00
teto 2ec96fa1a0 deploy: 447ed0fbcb 2021-03-31 18:09:08 +00:00
berbiche ef702e5917 deploy: cbf0667037 2021-03-29 04:45:42 +00:00
rycee 6e9f2c41c6 deploy: c1761366b5 2021-03-28 08:13:37 +00:00
berbiche e6032c21f4 deploy: 7b30fc9922 2021-03-27 03:28:00 +00:00
berbiche b4ab60a13a deploy: fedfd430f9 2021-03-26 02:02:04 +00:00
rycee 6392b1f3f7 deploy: ddcd476603 2021-03-21 09:30:37 +00:00
berbiche d662a53044 deploy: f9b5172d95 2021-03-18 22:20:29 +00:00
berbiche 328501de11 deploy: de1fa8defb 2021-03-18 22:16:22 +00:00
rycee 993defd405 deploy: 07f6c6481e 2021-03-14 21:12:19 +00:00
rycee 3a78ae7f25 deploy: 42bb553544 2021-03-14 20:18:52 +00:00
berbiche eaa0cdf3be deploy: 57a7e5e2c5 2021-03-08 20:47:49 +00:00
berbiche 220e0f5cef deploy: 73559e0dbc 2021-03-05 03:34:03 +00:00
berbiche 193d636c73 deploy: 0e2dc4be30 2021-03-04 03:21:08 +00:00
rycee 65605630cb deploy: 69e2693342 2021-03-03 22:34:37 +00:00
berbiche 5a783238a6 deploy: e72e241d7a 2021-03-01 22:59:14 +00:00
berbiche 37e1a7cdab deploy: e7b1491fb8 2021-02-23 19:38:25 +00:00
berbiche 66d17b77fa deploy: 21952f1cab 2021-02-22 04:35:20 +00:00
rycee ae7071e1e6 deploy: 029767ca63 2021-02-21 17:47:38 +00:00
berbiche 7264bf26c9 deploy: 82d6ba7003 2021-02-21 06:03:12 +00:00
berbiche 87ac0accee deploy: eb3a0342a8 2021-02-21 05:38:30 +00:00
teto 1e6523ec31 deploy: da92360208 2021-02-20 17:35:51 +00:00
teto 2e2171e017 deploy: 55030c8302 2021-02-19 08:53:41 +00:00
berbiche 5a0062d32f deploy: 2e795f3efd 2021-02-17 04:20:11 +00:00
teto ea033c26f5 deploy: 1ee1d01daa 2021-02-12 18:07:18 +00:00
teto de913c131e deploy: 87e2ec341b 2021-02-09 15:00:25 +00:00
berbiche 63b2e0214d deploy: e6f2687a83 2021-02-09 04:38:11 +00:00
berbiche 26477ca940 deploy: 88e05a5472 2021-02-08 20:51:43 +00:00
rycee dae450bc11 deploy: d8dd2a09b0 2021-02-07 22:51:21 +00:00
rycee 0cad5acb1f deploy: bdee1be7b3 2021-02-07 09:21:50 +00:00
rycee 29a53c85d5 deploy: dd6ee694df 2021-02-07 09:13:04 +00:00
teto 60ae5b7715 deploy: 6dfa9ef85c 2021-02-06 21:26:39 +00:00
rycee 5eed5fb0d2 deploy: d420287583 2021-02-05 22:02:07 +00:00
rycee 2fadd15fc8 deploy: 46a750f94f 2021-02-05 21:25:41 +00:00
rycee 65addde07d deploy: 63d5d28db6 2021-02-04 22:52:39 +00:00
berbiche 18260fc741 deploy: 3f2f7f8efa 2021-02-03 23:49:25 +00:00
rycee 724af372ab deploy: bbb6d30001 2021-02-03 23:03:47 +00:00
berbiche d7c519ff19 deploy: 0fa2b16a07 2021-02-01 14:53:05 +00:00
rycee c68221dd67 deploy: df7d81b0b3 2021-01-31 11:43:58 +00:00
rycee 8a08827d64 deploy: 98d030f723 2021-01-30 08:27:28 +00:00
rycee a59bb3141a deploy: 7313258b45 2021-01-29 20:39:02 +00:00
rycee 9bb1dc474b deploy: db88b625f9 2021-01-27 21:49:52 +00:00
rycee 2ec46c7606 deploy: 7de0d07dd9 2021-01-27 18:07:09 +00:00
teto fb58f383d7 deploy: 6f7074d21d 2021-01-23 15:31:28 +00:00
rycee b01f55206c deploy: 08fc1586c0 2021-01-22 22:45:04 +00:00
rycee fdd5d1abca deploy: 4e86d65aee 2021-01-22 20:45:43 +00:00
berbiche 7656e0afa4 deploy: 2c0e3f61da 2021-01-21 23:11:04 +00:00
rycee 840a179194 deploy: 5280360d6c 2021-01-21 22:50:50 +00:00
rycee 9975313208 deploy: 6f5fa6350d 2021-01-21 19:35:13 +00:00
teto c38169974e deploy: 3fe2a57b95 2021-01-19 18:37:23 +00:00
rycee 78e7c0741b deploy: 8127799f79 2021-01-16 10:42:15 +00:00
rycee d490865359 deploy: 65d0e2d241 2021-01-11 23:37:37 +00:00
rycee 38b3577de2 deploy: a361541c10 2021-01-06 08:13:43 +00:00
rycee 1db04a5725 deploy: b9597e5774 2021-01-03 09:22:57 +00:00
rycee 27529a1537 deploy: 73506f947c 2021-01-02 08:00:08 +00:00
berbiche 82f705fdfe deploy: f0e6396b78 2021-01-02 02:36:31 +00:00
rycee 53943aabf5 deploy: 6acc6bc651 2021-01-01 09:06:26 +00:00
rycee 52ed2266d7 deploy: 05448dcedb 2020-12-31 14:40:44 +00:00
rycee 91617fb004 deploy: 374649a15b 2020-12-31 14:14:28 +00:00
rycee 7a8e956b72 deploy: 3e218f2600 2020-12-30 23:48:14 +00:00
rycee f62e835010 deploy: 9d53afb709 2020-12-30 16:54:35 +00:00
teto 24eacc2054 deploy: 8e0c1c55fb 2020-12-29 19:26:52 +00:00
rycee 32e2fa8793 deploy: 99f0074362 2020-12-29 08:16:52 +00:00
teto 2d33d23586 deploy: 5263fe4594 2020-12-27 15:11:50 +00:00
teto f7d1cb161e deploy: cd86c2638b 2020-12-27 15:10:53 +00:00
rycee d4286e8547 deploy: bcbf09a202 2020-12-26 08:10:38 +00:00
rycee 57fff653b5 deploy: ca7fd5a643 2020-12-25 12:32:54 +00:00
rycee f418a2afbb deploy: 3627ec4de5 2020-12-23 00:05:52 +00:00
rycee 15ab24a070 deploy: 2901044520 2020-12-21 23:43:17 +00:00
rycee 1857e5ea35 deploy: cb136f37c7 2020-12-21 23:30:14 +00:00
rycee 88b8cc033d deploy: 76de0632ac 2020-12-21 23:11:37 +00:00
rycee 4006d1c7fb deploy: 8b3fca4ec5 2020-12-21 22:28:48 +00:00
rycee 926851ca25 deploy: 2b1892e646 2020-12-20 23:35:26 +00:00
rycee 47f94b367e deploy: a1162e04b3 2020-12-20 23:18:35 +00:00
rycee 7cd11810bf deploy: e87bccabc3 2020-12-19 09:36:38 +00:00
rycee 706663aa59 deploy: 1a7f190cb9 2020-12-18 22:31:38 +00:00
rycee 3d2c905580 deploy: 66a68b4a58 2020-12-15 18:49:12 +00:00
rycee 0f6f1d0f3e deploy: 6dc8de259a 2020-12-15 17:37:47 +00:00
rycee 4e9c3ba25e deploy: 708cb61e82 2020-12-13 21:21:46 +00:00
rycee 3d067dd736 deploy: b6ed605d4a 2020-12-10 22:38:58 +00:00
rycee 62e82a6c1e deploy: 6739d8bb50 2020-12-10 21:50:33 +00:00
teto e2b759a783 deploy: 4f0b0d78af 2020-12-10 21:33:34 +00:00
teto 658653bd7d deploy: 9d775bad07 2020-12-10 21:31:13 +00:00
rycee ddc8bf79df deploy: e6a58a7e71 2020-12-09 22:57:30 +00:00
teto 404f16fa88 deploy: e3828769e8 2020-12-09 08:22:56 +00:00
rycee ca84d79658 deploy: 275d1b5212 2020-12-05 08:27:08 +00:00
teto 4d0ac3fa5d deploy: aaa5329d39 2020-12-04 17:39:56 +00:00
teto 7823cd3bed deploy: 005ea6cc18 2020-12-04 17:39:18 +00:00
rycee 190bd71c32 deploy: 0654364426 2020-12-01 22:29:31 +00:00
rycee 3ad078819c deploy: 0027b0e76b 2020-12-01 21:49:56 +00:00
rycee 50a43c1357 deploy: 33407189c1 2020-12-01 21:45:56 +00:00
rycee e45c0727bd deploy: 44f9d68d8c 2020-12-01 21:09:16 +00:00
rycee 09c407b904 deploy: c1faa848c5 2020-11-29 23:19:53 +00:00
rycee 07926924e1 deploy: c6263347de 2020-11-29 22:28:01 +00:00
rycee d0915d8140 deploy: a3a0f1289a 2020-11-22 12:22:47 +00:00
rycee 8d4a2c22ad deploy: 7b6ebf2785 2020-11-17 17:47:31 +00:00
rycee db0ebac216 deploy: 6dc68b1d16 2020-11-16 22:53:06 +00:00
rycee e7efbeed67 deploy: 964f698095 2020-11-16 22:13:17 +00:00
rycee 80357e8175 deploy: 4f20ee61c2 2020-11-16 21:51:01 +00:00
rycee 64edea9e85 deploy: 9e01441c5c 2020-11-15 23:13:55 +00:00
rycee 1d1fa58d87 deploy: 9fe15dc83b 2020-11-15 22:17:25 +00:00
rycee 7516311242 deploy: b04aa56503 2020-11-14 23:18:23 +00:00
rycee 9bbf4e2486 deploy: cde1d33e61 2020-11-14 23:10:09 +00:00
rycee 70e6e3e05f deploy: b3fdbfdf42 2020-11-14 22:29:58 +00:00
rycee c5182f37cf deploy: 234de0270a 2020-11-14 22:17:22 +00:00
rycee c49ce635d0 deploy: 9c14bbe988 2020-11-14 10:03:39 +00:00
rycee 1fbb294c59 deploy: 7c3c64208e 2020-11-14 09:59:04 +00:00
rycee 5f80e0a2ba deploy: fd79015c0f 2020-11-13 22:58:40 +00:00
rycee 2acb957cab deploy: 4cc1b77c3f 2020-11-06 08:10:01 +00:00
rycee 97371dd60c deploy: 9e9d8ffc7c 2020-11-05 23:17:39 +00:00
rycee 96467b414f deploy: faca77d77d 2020-11-05 22:01:29 +00:00
rycee 3e1dbcbff4 deploy: ef72617c4a 2020-11-03 22:15:02 +00:00
rycee cb19d9f778 deploy: 249e31b656 2020-11-03 21:47:44 +00:00
rycee a9ecee158f deploy: 0261950395 2020-11-03 19:30:27 +00:00
rycee f3cdb0ecf4 deploy: 1066e01707 2020-11-02 23:35:58 +00:00
rycee 566c40a6e6 deploy: 61e63c10dc 2020-11-02 23:22:59 +00:00
rycee 68c5bb1424 deploy: 5125fc0a47 2020-11-02 23:11:27 +00:00
rycee 6eb339828f deploy: cabf9ddd98 2020-11-02 22:51:50 +00:00
rycee e6e313ed79 deploy: 612afee126 2020-11-02 22:38:49 +00:00
rycee ed4f196a37 deploy: 072a6ea333 2020-11-02 22:25:42 +00:00
rycee f030d64ebf deploy: a98ec6ec15 2020-10-28 22:13:48 +00:00
rycee 8ba6cf44e5 deploy: c8746fb588 2020-10-28 21:42:44 +00:00
rycee 5830c14e30 deploy: b5291e995f 2020-10-28 21:24:03 +00:00
rycee 5264336c0f deploy: 28eb093a1e 2020-10-26 16:59:30 +00:00
rycee 831b0e152c deploy: abaebf3b34 2020-10-25 21:23:43 +00:00
rycee db39a57518 deploy: 9bf1f40af1 2020-10-22 22:02:36 +00:00
rycee 8d549c63c7 deploy: 22a3a5651d 2020-10-22 21:46:53 +00:00
rycee 9f8aa5137e deploy: 308ee310de 2020-10-22 21:24:14 +00:00
rycee b9e2d37fe4 deploy: 0778a80ee0 2020-10-22 21:10:06 +00:00
rycee 013a318299 deploy: 10df7a7eee 2020-10-22 20:53:15 +00:00
zimbatm 8d6c03f433 deploy: c508a8fdbcfa0839d6c39f71c0827bbd81df617b 2020-10-19 19:27:00 +00:00
zimbatm bd58410b95 deploy: 52ddb0cd4a0a3b951ede6cef5a137f18b942d9b6 2020-10-19 19:06:22 +00:00
5241 changed files with 348950 additions and 228848 deletions
-35
View File
@@ -1,35 +0,0 @@
image: nixos/unstable
sources:
- https://git.sr.ht/~rycee/home-manager
secrets:
- 01ad357c-3214-4f73-bb7e-2441e440cc51
- 7d16ccc0-1c4f-4fd6-91c1-c54fc0f5807f
- bd5f26ee-78b8-4a6f-9d68-8d8f53a068f1
environment:
NIX_CONFIG: "experimental-features = nix-command flakes"
packages:
- nixos.cachix
- nixos.jq
tasks:
- setup: |
cachix use rycee
- build: |
cd ./home-manager
gitBranch="$(git show -s --pretty=%D HEAD | sed '{ s/.*, //; s!origin/!!; }')"
[[ $gitBranch == master || $gitBranch == release-??.?? ]] || exit 0
nix build -L .#docs-html
cachix push rycee ./result
- deploy: |
cd ./home-manager
gitBranch="$(git show -s --pretty=%D HEAD | sed '{ s/.*, //; s!origin/!!; }')"
[[ $gitBranch == master || $gitBranch == release-??.?? ]] || exit 0
if [[ $gitBranch == master ]]; then
dirName="unstable"
else
dirName="$(jq -r .release < release.json)"
fi
rsync --delete -r --info=stats \
"result/share/doc/home-manager/" \
"hm-web:/srv/www/home-manager.dev/manual/$dirName"
-24
View File
@@ -1,24 +0,0 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# The JSON files contain newlines inconsistently
[*.json]
insert_final_newline = unset
# Makefiles always use tabs for indentation
[Makefile]
indent_style = tab
[*.md]
trim_trailing_whitespace = false
[*.plist]
insert_final_newline = false
-61
View File
@@ -1,61 +0,0 @@
# This file contains a list of commits that are not likely what you
# are looking for in a blame, such as mass reformatting or renaming.
#
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
# Treewide nixfmt-rfc-style
cba2f9ce95c8d10b66cacf05a275e3ad71959638
# Treewide remove with lib
0b491b460f52e87e23eb17bbf59c6ae64b7664c1
95711f926676018d279ba09fe7530d03b5d5b3e2
5e193cdcab61b5e7096ef3c132fdc0149e14f2d9
55cf1f16324e694c991e846ad5fc897f0f75ac64
a710f337d6f541f5ba50bc2d5daa6c34e9ee5834
10dca990ae02aaf41ff12c5b18dd3dcf258c0d04
d7f451d7b13bbe075abecfd345f8b149a000216a
65413f297f8c4c42a99270c15bce7bda1bfea724
b5976017741653251258112f7e6ee5d8b9e3a832
e0be70bcf94be20f8f0f6d215d909b614ab6ebeb
e30c6a41bc8548738341d10c0b17f8fead8e55ee
b5142d46a3f912ef99e9cec3e51d757fbeaf14ea
56374cc64d58451b359bb4e8502387d3a96e7c7b
32531e457215000b739da6cd40acfb080823f396
34d524f3edcf3a04c00ad2c09c24ec9d35d937f9
439a125afef8c97308ec0c6db75d38e15d92208d
5031c6d2978109336637977c165f82aa49fa16a7
b34b56689dcc75294e14e8c95db4e054a4e9573f
234613d77c939ff2e2c0f2c476a56d80930e5b8b
e3baf274f47678df6289c7482353cb6d38b7be5d
c90cd85b04ff3348978b05ba73ffc8e1b74b9fce
2d731a33b193209cb88b874e508ea912765f7d99
20fd9686b85dc64657a176466e23d0f3a5e1f760
96dee79b178d295b716052feca3ee46abc085abe
97d7946b5e107dd03cc82f21165251d4e0159655
0dfec9deb275854a56c97c356c40ef72e3a2e632
4b2d3b03becc184f2d1485e109c6a55f94d5f886
# Treewide remove lib.mdDoc
9f9e277b60a6e6915ad3a129e06861044b50fdf2
# Treewide replace usage of literalExample
bd11e2c5e67385970e59e55ba7a4c35d1ffaee4d
# Treewide nix fmt change
b4752b0eda6302b92a6d5dd554c83f188bc3ae6d
9136120c369d91144910a985262e3c3b8e8872d6
# Treewide remove noops
f2f1076c1f789595c2a2b18b76466fbd691025dd
# Treewide statix cleanup
01ea51d7065e0ab06a09df9db4d1c17f6eb2675f
74d8d470345b9324f89e14d675c14b92dc4a091d
5209a256fd507322b0dd09ade7bc61923da948cf
11ad9d2e42ebf6d00db4d7bae252f1c6b7dd36a4
74b0e979375b0ed469e2394820aa50ba2114800b
de90ee24082bb8dd44145f5c733b807467856820
# Deadnix cleanup
71402c5df34df5ee7b6c10d738018f9f0c8bde2b
a93d80bcec089abf80894c25ee3934b7e196bbd9
@@ -1,38 +0,0 @@
name: "✨ Feature Request"
description: "Suggest an improvement to Home Manager"
title: "[Feature Request] "
labels: ["feature request"]
body:
- type: markdown
attributes:
value: |
Thank you for contributing to Home Manager!
Before you open a new issue, please search the existing issues to see if your feature has already been requested or discussed.
- type: markdown
attributes:
value: "## 🔧 Existing Module Improvement"
- type: input
id: existing-module-name
attributes:
label: Module Name
description: "What is the name of the module?"
placeholder: "e.g., programs.git"
- type: textarea
id: existing-module-feature
attributes:
label: Requested Feature
description: "Please describe the new feature or improvement in detail."
- type: textarea
id: existing-module-limitation
attributes:
label: Current Limitations
description: "Why can't your goal be achieved with the current implementation? Please be specific."
- type: markdown
attributes:
value: "---"
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context, screenshots, or configuration examples about the feature request here.
-50
View File
@@ -1,50 +0,0 @@
name: Bug Report
description: File a bug/issue
title: 'bug: '
labels: [bug, triage]
body:
- type: checkboxes
attributes:
label: Are you following the right branch?
description: |
You should follow the branch of Home Manager that corresponds to your
version of Nixpkgs; see [the README](https://github.com/nix-community/home-manager#releases) for details.
options:
- label: My Nixpkgs and Home Manager versions are in sync
required: true
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: |
Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Issue description
description: |
Please describe the issue.
For support and help please use the IRC channel #home-manager at irc.oftc.net or
Matrix room <https://matrix.to/#/#hm:rycee.net> instead.
validations:
required: false
- type: textarea
attributes:
label: Maintainer CC
description: |
Please @ people who are in the `meta.maintainers` list of the offending module.
validations:
required: false
- type: textarea
id: system
attributes:
label: System information
description: |
Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the result.
render: markdown
validations:
required: true
-37
View File
@@ -1,37 +0,0 @@
name: "✨ New Module Request"
description: "Suggest an addition to Home Manager"
title: "[New Module Request] "
labels: ["new module request"]
body:
- type: markdown
attributes:
value: |
Thank you for contributing to Home Manager!
Before you open a new issue, please search the existing issues to see if your feature has already been requested or discussed.
- type: markdown
attributes:
value: "## New Program or Service"
- type: input
id: new-program-name
attributes:
label: Program/Service Name
description: "What is the name of the program or service you would like to add?"
placeholder: "e.g., my-cool-cli-tool"
- type: input
id: new-program-repo
attributes:
label: Upstream Repository
description: "Please provide a link to the source code repository."
placeholder: "https://github.com/user/repo"
- type: textarea
id: new-program-docs
attributes:
label: Configuration Documentation
description: "Please provide links to any relevant documentation for configuring this program."
placeholder: "e.g., man page, project wiki, configuration file examples, etc."
- type: textarea
id: new-program-reason
attributes:
label: Reason for Addition
description: "**Why do you want this program or service added to Home Manager?"
-49
View File
@@ -1,49 +0,0 @@
### Description
<!--
Please provide a brief description of your change.
-->
### Checklist
<!--
Please go through the following checklist before opening a non-WIP
pull-request.
Also make sure to read the guidelines found at
https://nix-community.github.io/home-manager/#sec-guidelines
-->
- [ ] Change is backwards compatible.
- [ ] Code formatted with `nix fmt` or
`nix-shell -A dev --run treefmt`.
- [ ] Code tested through `nix build .#test-all`
or a targeted `nix run .#tests -- <pattern>`.
- [ ] Test cases updated/added. See [example](https://github.com/nix-community/home-manager/commit/f3fbb50b68df20da47f9b0def5607857fcc0d021#diff-b61a6d542f9036550ba9c401c80f00ef).
- [ ] Commit messages are formatted like
```
{component}: {description}
{long description}
```
See [CONTRIBUTING](https://nix-community.github.io/home-manager/#sec-commit-style) for more information and [recent commit messages](https://github.com/nix-community/home-manager/commits/master) for examples.
- If this PR adds a new module
- [ ] Added myself as module maintainer. See [example](https://github.com/nix-community/home-manager/blob/a51598236f23c89e59ee77eb8e0614358b0e896c/modules/programs/lesspipe.nix#L11).
- [ ] Generate a news entry. See [News](https://nix-community.github.io/home-manager/index.xhtml#sec-news)
- [ ] Basic tests added. See [Tests](https://nix-community.github.io/home-manager/index.xhtml#sec-tests)
- If this PR adds an exciting new feature or contains a breaking change.
- [ ] Generate a news entry. See [News](https://nix-community.github.io/home-manager/index.xhtml#sec-news)
-30
View File
@@ -1,30 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "master"
schedule:
interval: "weekly"
commit-message:
prefix: "ci:"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "release-26.05"
schedule:
interval: "weekly"
commit-message:
prefix: "ci:"
- package-ecosystem: "nix"
directory: "/"
target-branch: "master"
schedule:
interval: "weekly"
commit-message:
prefix: "flake:"
- package-ecosystem: "nix"
directory: "/"
target-branch: "release-26.05"
schedule:
interval: "weekly"
commit-message:
prefix: "flake:"
-744
View File
@@ -1,744 +0,0 @@
"release":
- base-branch:
- '^release-.*'
"ai":
- changed-files:
- any-glob-to-any-file:
- modules/programs/aiac.nix
- modules/programs/aichat.nix
- modules/programs/aider-chat.nix
- modules/programs/claude-code/**/*
- modules/programs/codex.nix
- modules/programs/fabric-ai.nix
- modules/programs/antigravity-cli.nix
- modules/programs/mcp.nix
- modules/programs/mistral-vibe.nix
- modules/programs/mods.nix
- modules/programs/opencode.nix
- modules/services/local-ai.nix
- modules/services/ollama.nix
"audio":
- changed-files:
- any-glob-to-any-file:
- modules/programs/beets.nix
- modules/programs/cava.nix
- modules/programs/cavalier.nix
- modules/programs/cmus.nix
- modules/programs/ncmpcpp.nix
- modules/programs/ncspot.nix
- modules/programs/pianobar.nix
- modules/programs/pyradio.nix
- modules/programs/radio-active.nix
- modules/programs/radio-cli.nix
- modules/programs/rmpc.nix
- modules/programs/spotify-player.nix
- modules/programs/timidity.nix
- modules/services/amberol.nix
- modules/services/easyeffects.nix
- modules/services/fluidsynth.nix
- modules/services/librespot.nix
- modules/services/listenbrainz-mpd.nix
- modules/services/mopidy.nix
- modules/services/mpd-discord-rpc.nix
- modules/services/mpd-mpris.nix
- modules/services/mpd.nix
- modules/services/mpdris2-rs.nix
- modules/services/mpdris2.nix
- modules/services/mpdscribble.nix
- modules/services/mpris-proxy.nix
- modules/services/pasystray.nix
- modules/services/playerctld.nix
- modules/services/pulseeffects.nix
- modules/services/rescrobbled.nix
- modules/services/spotifyd.nix
- tests/modules/services/mpd/**/*
"automation":
- changed-files:
- any-glob-to-any-file:
- modules/services/autotiling.nix
- modules/services/caffeine.nix
- modules/services/darkman.nix
- modules/services/devilspie2.nix
- modules/services/espanso.nix
- modules/services/keynav.nix
- modules/services/skhd.nix
"backup":
- changed-files:
- any-glob-to-any-file:
- modules/programs/borgmatic.nix
- modules/programs/rclone.nix
- modules/services/borgmatic.nix
- modules/services/restic.nix
- tests/modules/programs/borgmatic/**/*
- tests/modules/services/borgmatic/**/*
"bars":
- changed-files:
- any-glob-to-any-file:
- modules/programs/ashell.nix
- modules/programs/eww.nix
- modules/programs/hyprpanel/default.nix
- modules/programs/i3bar-river.nix
- modules/programs/sketchybar.nix
- modules/programs/tray-tui.nix
- modules/programs/waybar.nix
- modules/programs/xmobar.nix
- modules/programs/yambar.nix
- modules/services/polybar.nix
- modules/services/taffybar.nix
- tests/modules/programs/ashell/**/*
- tests/modules/programs/i3bar-river/**/*
- tests/modules/programs/waybar/**/*
- tests/modules/services/polybar/**/*
"browsers":
- changed-files:
- any-glob-to-any-file:
- modules/misc/mozilla-messaging-hosts.nix
- modules/programs/amfora.nix
- modules/programs/chawan.nix
- modules/programs/chromium.nix
- modules/programs/firefox/**/*
- modules/programs/firefoxpwa.nix
- modules/programs/floorp.nix
- modules/programs/librewolf.nix
- modules/programs/nyxt.nix
- modules/programs/qutebrowser.nix
- modules/programs/w3m.nix
- tests/modules/programs/chromium/**/*
- tests/modules/programs/firefox/**/*
- tests/modules/programs/qutebrowser/**/*
"calendar":
- changed-files:
- any-glob-to-any-file:
- modules/*/vdirsyncer*.nix
- modules/accounts/calendar.nix
- modules/programs/khal/**/*
- modules/programs/pimsync/**/*
- modules/programs/qcal.nix
- modules/programs/vdirsyncer/**/*
- modules/services/pimsync.nix
- tests/modules/programs/khal/**/*
"clipboard":
- changed-files:
- any-glob-to-any-file:
- modules/services/clipcat.nix
- modules/services/cliphist.nix
- modules/services/clipman.nix
- modules/services/clipmenu.nix
- modules/services/clipse.nix
- modules/services/copyq.nix
- modules/services/parcellite.nix
- modules/services/pbgopy.nix
- modules/services/wl-clip-persist.nix
- tests/modules/services/clipman/**/*
- tests/modules/services/copyq/**/*
- tests/modules/services/wl-clip-persist/**/*
"cli-tools":
- changed-files:
- any-glob-to-any-file:
- modules/programs/aliae.nix
- modules/programs/amoco.nix
- modules/programs/antidote.nix
- modules/programs/atool.nix
- modules/programs/atuin.nix
- modules/programs/autojump.nix
- modules/programs/bashmount.nix
- modules/programs/bat.nix
- modules/programs/bottom.nix
- modules/programs/boxxy.nix
- modules/programs/broot.nix
- modules/programs/btop.nix
- modules/programs/carapace.nix
- modules/programs/clock-rs.nix
- modules/programs/delta.nix
- modules/programs/diff-highlight.nix
- modules/programs/diff-so-fancy.nix
- modules/programs/difftastic.nix
- modules/programs/dircolors.nix
- modules/programs/direnv.nix
- modules/programs/eza.nix
- modules/programs/fastfetch.nix
- modules/programs/fd.nix
- modules/programs/fzf.nix
- modules/programs/goto.nix
- modules/programs/grep.nix
- modules/programs/hstr.nix
- modules/programs/htop.nix
- modules/programs/hwatch.nix
- modules/programs/hyfetch.nix
- modules/programs/infat.nix
- modules/programs/inori.nix
- modules/programs/jq*.nix
- modules/programs/keychain.nix
- modules/programs/less.nix
- modules/programs/lesspipe.nix
- modules/programs/lsd.nix
- modules/programs/man.nix
- modules/programs/mc.nix
- modules/programs/mcfly.nix
- modules/programs/navi.nix
- modules/programs/nix-your-shell.nix
- modules/programs/nom.nix
- modules/programs/parallel.nix
- modules/programs/patdiff.nix
- modules/programs/pay-respects.nix
- modules/programs/pazi.nix
- modules/programs/pet.nix
- modules/programs/pistol.nix
- modules/programs/pls.nix
- modules/programs/readline.nix
- modules/programs/riff.nix
- modules/programs/ripgrep*.nix
- modules/programs/scmpuff.nix
- modules/programs/screen.nix
- modules/programs/script-directory.nix
- modules/programs/sesh.nix
- modules/programs/sherlock.nix
- modules/programs/skim.nix
- modules/programs/superfile.nix
- modules/programs/tealdeer.nix
- modules/programs/television.nix
- modules/programs/tmate.nix
- modules/programs/tmux.nix
- modules/programs/topgrade.nix
- modules/programs/translate-shell.nix
- modules/programs/ty.nix
- modules/programs/uv.nix
- modules/programs/vivid.nix
- modules/programs/watson.nix
- modules/programs/z-lua.nix
- modules/programs/zellij.nix
- modules/programs/zk.nix
- modules/programs/zoxide.nix
- modules/programs/zplug.nix
- tests/modules/programs/fzf/**/*
- tests/modules/programs/tmux/**/*
"contacts":
- changed-files:
- any-glob-to-any-file:
- modules/accounts/contacts.nix
- modules/programs/abook.nix
- modules/programs/khard.nix
- tests/modules/programs/abook/**/*
- tests/modules/programs/khard/**/*
"containers":
- changed-files:
- any-glob-to-any-file:
- modules/programs/distrobox.nix
- modules/programs/docker-cli.nix
- modules/services/colima.nix
- modules/services/podman/**/*
- modules/services/podman/linux/**/*
"desktop-ui":
- changed-files:
- any-glob-to-any-file:
- modules/programs/desktoppr.nix
- modules/programs/gnome-shell.nix
- modules/programs/hyprshot.nix
- modules/programs/quickshell.nix
- modules/programs/satty.nix
- modules/programs/swappy.nix
- modules/services/avizo.nix
- modules/services/blanket.nix
- modules/services/flameshot.nix
- modules/services/gromit-mpx.nix
- modules/services/linux-wallpaperengine.nix
- modules/services/picom.nix
- modules/services/random-background.nix
- modules/services/volnoti.nix
- modules/services/wob.nix
- modules/services/wpaperd.nix
"desktop-utilities":
- changed-files:
- any-glob-to-any-file:
- modules/programs/autorandr.nix
- modules/programs/bluetuith.nix
- modules/services/autorandr.nix
- modules/services/blueman-applet.nix
- modules/services/gnome-keyring.nix
- modules/services/lxqt-policykit-agent.nix
- modules/services/network-manager-applet.nix
- modules/services/polkit-gnome.nix
- modules/services/redshift-gammastep/**/*
- modules/services/sctd.nix
- modules/services/snixembed.nix
- modules/services/status-notifier-watcher.nix
- modules/services/systembus-notify.nix
- modules/services/tailscale-systray.nix
- modules/services/trayscale.nix
- modules/services/udiskie.nix
- modules/services/unclutter.nix
- modules/services/xembed-sni-proxy.nix
"dev-tools":
- changed-files:
- any-glob-to-any-file:
- modules/programs/amber.nix
- modules/programs/awscli.nix
- modules/programs/bacon.nix
- modules/programs/bun.nix
- modules/programs/cargo.nix
- modules/programs/darcs.nix
- modules/programs/earthly.nix
- modules/programs/eclipse.nix
- modules/programs/gcc.nix
- modules/programs/go.nix
- modules/programs/gradle.nix
- modules/programs/granted.nix
- modules/programs/grype.nix
- modules/programs/java.nix
- modules/programs/jetbrains-remote.nix
- modules/programs/k9s.nix
- modules/programs/kraftkit.nix
- modules/programs/kubecolor.nix
- modules/programs/kubeswitch.nix
- modules/programs/lazydocker.nix
- modules/programs/lazysql.nix
- modules/programs/matplotlib.nix
- modules/programs/mercurial.nix
- modules/programs/mergiraf.nix
- modules/programs/mise.nix
- modules/programs/mr.nix
- modules/programs/mypy.nix
- modules/programs/nh.nix
- modules/programs/nix-index.nix
- modules/programs/nix-init.nix
- modules/programs/nix-search-tv.nix
- modules/programs/npm.nix
- modules/programs/numbat.nix
- modules/programs/nvchecker.nix
- modules/programs/opam.nix
- modules/programs/openstackclient.nix
- modules/programs/pgcli.nix
- modules/programs/piston-cli.nix
- modules/programs/poetry.nix
- modules/programs/pyenv.nix
- modules/programs/pylint.nix
- modules/programs/pywal.nix
- modules/programs/rbenv.nix
- modules/programs/rizin.nix
- modules/programs/ruff.nix
- modules/programs/sagemath.nix
- modules/programs/sbt.nix
- modules/programs/sftpman.nix
- modules/programs/smug.nix
- modules/programs/sqls.nix
- modules/programs/tex-fmt.nix
- modules/programs/texlive.nix
- modules/programs/tirith.nix
- modules/programs/vim-vint.nix
- modules/programs/visidata.nix
- modules/programs/yarn/default.nix
- modules/services/lorri.nix
- tests/modules/programs/go/**/*
- tests/modules/programs/java/**/*
"editors":
- changed-files:
- any-glob-to-any-file:
- modules/programs/amp.nix
- modules/programs/anvil-editor.nix
- modules/programs/cudatext.nix
- modules/programs/emacs.nix
- modules/programs/formiko.nix
- modules/programs/fresh-editor.nix
- modules/programs/helix.nix
- modules/programs/kakoune.nix
- modules/programs/lapce.nix
- modules/programs/micro.nix
- modules/programs/ne.nix
- modules/programs/neovide.nix
- modules/programs/neovim.nix
- modules/programs/retext.nix
- modules/programs/vim.nix
- modules/programs/vscode/**/*
- modules/programs/zed-editor.nix
- modules/services/emacs.nix
- tests/modules/programs/emacs/**/*
- tests/modules/programs/helix/**/*
- tests/modules/programs/neovim/**/*
- tests/modules/programs/vim/**/*
"file-manager":
- changed-files:
- any-glob-to-any-file:
- modules/programs/joshuto.nix
- modules/programs/lf.nix
- modules/programs/nnn.nix
- modules/programs/ranger.nix
- modules/programs/vifm.nix
- modules/programs/xplr.nix
- modules/programs/yazi.nix
- tests/modules/programs/lf/**/*
- tests/modules/programs/nnn/**/*
- tests/modules/programs/ranger/**/*
- tests/modules/programs/yazi/**/*
"gaming":
- changed-files:
- any-glob-to-any-file:
- modules/programs/am2rlauncher.nix
- modules/programs/kodi.nix
- modules/programs/lutris.nix
- modules/programs/mangohud.nix
- modules/programs/prismlauncher.nix
- modules/programs/retroarch.nix
- modules/programs/sm64ex.nix
- modules/programs/ttyper.nix
- modules/programs/vinegar.nix
- modules/services/ludusavi.nix
"git":
- changed-files:
- any-glob-to-any-file:
- modules/programs/gh.nix
- modules/programs/gh-dash.nix
- modules/programs/git*.nix
- modules/programs/jjui.nix
- modules/programs/jujutsu.nix
- modules/programs/lazygit.nix
- modules/programs/lazyworktree.nix
- modules/programs/radicle.nix
- modules/programs/sapling.nix
- modules/services/git-sync.nix
- modules/services/radicle.nix
- tests/modules/programs/gh/**/*
- tests/modules/programs/gh-dash/**/*
- tests/modules/programs/git/**/*
"mail":
- changed-files:
- any-glob-to-any-file:
- modules/*/mbsync*
- modules/programs/aerc/**/*
- modules/programs/afew.nix
- modules/programs/alot/**/*
- modules/programs/astroid/**/*
- modules/programs/getmail*
- modules/programs/getmail/**/*
- modules/programs/himalaya.nix
- modules/programs/lieer.nix
- modules/programs/mbsync/**/*
- modules/programs/meli.nix
- modules/programs/msmtp*
- modules/programs/msmtp/**/*
- modules/programs/mu.nix
- modules/programs/mujmap.nix
- modules/programs/neomutt*
- modules/programs/neomutt/**/*
- modules/programs/notmuch/**/*
- modules/programs/offlineimap/**/*
- modules/programs/thunderbird.nix
- modules/services/getmail.nix
- modules/services/imapnotify/**/*
- modules/services/lieer.nix
- modules/services/muchsync.nix
- modules/services/protonmail-bridge.nix
- tests/modules/programs/aerc/*
- tests/modules/programs/alot/*
- tests/modules/programs/himalaya/*
- tests/modules/programs/mbsync/*
- tests/modules/programs/mujmap/*
- tests/modules/programs/neomutt/*
- tests/modules/programs/thunderbird/*
"messaging":
- changed-files:
- any-glob-to-any-file:
- modules/programs/abaddon.nix
- modules/programs/algia.nix
- modules/programs/discocss.nix
- modules/programs/discord.nix
- modules/programs/element-desktop.nix
- modules/programs/gurk-rs.nix
- modules/programs/halloy.nix
- modules/programs/havoc.nix
- modules/programs/hexchat.nix
- modules/programs/iamb.nix
- modules/programs/irssi.nix
- modules/programs/nheko.nix
- modules/programs/pidgin.nix
- modules/programs/senpai.nix
- modules/programs/tiny.nix
- modules/programs/vesktop.nix
- modules/programs/zapzap.nix
- modules/services/pantalaimon.nix
- tests/modules/programs/gurk-rs/**/*
- tests/modules/programs/irssi/**/*
- tests/modules/programs/nheko/**/*
"monitoring":
- changed-files:
- any-glob-to-any-file:
- modules/services/activitywatch.nix
- modules/services/batsignal.nix
- modules/services/cbatticon.nix
- modules/services/conky.nix
- modules/services/glance.nix
- modules/services/poweralertd.nix
"notification":
- changed-files:
- any-glob-to-any-file:
- modules/programs/noti.nix
- modules/services/dunst.nix
- modules/services/fnott.nix
- modules/services/mako.nix
- modules/services/notify-osd.nix
- modules/services/swaync.nix
- modules/services/twmn.nix
- tests/modules/services/dunst/**/*
- tests/modules/services/mako/**/*
"productivity":
- changed-files:
- any-glob-to-any-file:
- modules/programs/anki/**/*
- modules/programs/aphorme.nix
- modules/programs/calibre.nix
- modules/programs/comodoro.nix
- modules/programs/foliate.nix
- modules/programs/info.nix
- modules/programs/joplin-desktop.nix
- modules/programs/jrnl.nix
- modules/programs/ledger.nix
- modules/programs/newsboat.nix
- modules/programs/obsidian.nix
- modules/programs/onlyoffice.nix
- modules/programs/pandoc.nix
- modules/programs/papis.nix
- modules/programs/pubs.nix
- modules/programs/sioyek.nix
- modules/programs/taskwarrior.nix
- modules/programs/todoman.nix
- modules/programs/zathura.nix
- modules/services/comodoro.nix
- modules/services/rsibreak.nix
- modules/services/safeeyes.nix
- modules/services/taskwarrior-sync.nix
- modules/services/tomat.nix
"password-manager":
- changed-files:
- any-glob-to-any-file:
- modules/programs/browserpass.nix
- modules/programs/keepassxc.nix
- modules/programs/password-store.nix
- modules/programs/rbw.nix
- modules/programs/rofi-pass.nix
- modules/services/pass-secret-service.nix
- modules/services/proton-pass-agent.nix
- tests/modules/programs/keepassxc/**/*
- tests/modules/programs/password-store/**/*
- tests/modules/programs/rofi-pass/**/*
"photo":
- changed-files:
- any-glob-to-any-file:
- modules/programs/ahoviewer.nix
- modules/programs/feh.nix
- modules/programs/gallery-dl.nix
- modules/programs/imv.nix
- modules/programs/pqiv.nix
- modules/programs/swayimg.nix
- modules/programs/wallust.nix
"shell":
- changed-files:
- any-glob-to-any-file:
- modules/lib/zsh.nix
- modules/programs/bash.nix
- modules/programs/fish.nix
- modules/programs/intelli-shell.nix
- modules/programs/ion.nix
- modules/programs/nushell.nix
- modules/programs/oh-my-posh.nix
- modules/programs/powerline-go.nix
- modules/programs/sheldon.nix
- modules/programs/starship.nix
- modules/programs/zsh/**/*
- tests/modules/programs/bash/**/*
- tests/modules/programs/fish/**/*
- tests/modules/programs/nushell/**/*
- tests/modules/programs/zsh/**/*
"sync":
- changed-files:
- any-glob-to-any-file:
- modules/programs/acd-cli.nix
- modules/programs/airlift.nix
- modules/programs/alistral.nix
- modules/programs/onedrive.nix
- modules/programs/rtorrent.nix
- modules/services/davmail.nix
- modules/services/dropbox.nix
- modules/services/etesync-dav.nix
- modules/services/kdeconnect.nix
- modules/services/megasync.nix
- modules/services/nextcloud-client.nix
- modules/services/owncloud-client.nix
- modules/services/pizauth.nix
- modules/services/syncthing.nix
- modules/services/unison.nix
- tests/modules/services/dropbox/**/*
- tests/modules/services/syncthing/**/*
"system":
- changed-files:
- any-glob-to-any-file:
- modules/programs/anup.nix
- modules/programs/command-not-found/**/*
- modules/programs/gpg.nix
- modules/programs/home-manager.nix
- modules/programs/mullvad-vpn.nix
- modules/programs/opkssh.nix
- modules/programs/ssh.nix
- modules/services/gpg-agent.nix
- modules/services/home-manager*.nix
- modules/services/kbfs.nix
- modules/services/keybase.nix
- modules/services/macos-remap-keys/**/*
- modules/services/nix-gc.nix
- modules/services/ssh-agent.nix
- modules/services/ssh-tpm-agent.nix
- modules/services/yubikey-agent.nix
- tests/modules/services/home-manager*/**/*
"system-tools":
- changed-files:
- any-glob-to-any-file:
- modules/programs/andcli.nix
- modules/programs/aria2.nix
- modules/programs/aria2p.nix
- modules/programs/trippy.nix
- modules/services/arrpc.nix
- modules/services/cachix-agent.nix
- modules/services/fusuma.nix
- modules/services/grobi.nix
- modules/services/hound.nix
- modules/services/jankyborders.nix
- modules/services/opensnitch-ui.nix
- modules/services/osmscout-server.nix
- modules/services/plan9port.nix
- modules/services/psd.nix
- modules/services/pueue.nix
- modules/services/recoll.nix
- modules/services/signaturepdf.nix
- modules/services/tahoe-lafs.nix
- modules/services/tldr-update.nix
"terminal":
- changed-files:
- any-glob-to-any-file:
- modules/programs/alacritty.nix
- modules/programs/foot.nix
- modules/programs/ghostty.nix
- modules/programs/gnome-terminal.nix
- modules/programs/kitty.nix
- modules/programs/macchina/**/*
- modules/programs/ptyxis.nix
- modules/programs/rio.nix
- modules/programs/terminator.nix
- modules/programs/termite.nix
- modules/programs/urxvt.nix
- modules/programs/waveterm.nix
- modules/programs/wezterm.nix
- modules/services/shpool.nix
- tests/modules/programs/alacritty/**/*
- tests/modules/programs/foot/**/*
- tests/modules/programs/ghostty/**/*
- tests/modules/programs/kitty/**/*
"video":
- changed-files:
- any-glob-to-any-file:
- modules/programs/animdl.nix
- modules/programs/anime-downloader.nix
- modules/programs/aperture.nix
- modules/programs/asciinema.nix
- modules/programs/freetube.nix
- modules/programs/mpv.nix
- modules/programs/mpvpaper.nix
- modules/programs/obs-studio.nix
- modules/programs/streamlink.nix
- modules/programs/twitch-tui.nix
- modules/programs/yt-dlp.nix
- modules/services/jellyfin-mpv-shim.nix
- modules/services/plex-mpv-shim.nix
- tests/modules/programs/mpv/**/*
"remote-desktop":
- changed-files:
- any-glob-to-any-file:
- modules/programs/looking-glass-client.nix
- modules/services/remmina.nix
- modules/services/wayvnc.nix
"wayland":
- changed-files:
- any-glob-to-any-file:
- modules/programs/ashell.nix
- modules/programs/anyrun.nix
- modules/services/awww.nix
- modules/programs/bemenu.nix
- modules/programs/fuzzel.nix
- modules/programs/hyprlock.nix
- modules/programs/kickoff.nix
- modules/programs/onagre.nix
- modules/programs/sway-easyfocus.nix
- modules/programs/swaylock.nix
- modules/programs/swayr.nix
- modules/programs/tofi.nix
- modules/programs/waybar.nix
- modules/programs/waylogout.nix
- modules/programs/wayprompt.nix
- modules/programs/wleave.nix
- modules/programs/wlogout.nix
- modules/programs/wofi.nix
- modules/programs/workstyle.nix
- modules/programs/yofi.nix
- modules/programs/vicinae/**/*
- modules/programs/i3bar-river.nix
- modules/services/fnott.nix
- modules/services/hypridle.nix
- modules/services/hyprlauncher.nix
- modules/services/hyprpaper.nix
- modules/services/hyprpolkitagent.nix
- modules/services/hyprshell.nix
- modules/services/hyprsunset.nix
- modules/services/kanshi.nix
- modules/services/mako.nix
- modules/services/shikane.nix
- modules/services/swayidle.nix
- modules/services/swaync.nix
- modules/services/swayosd.nix
- modules/services/walker.nix
- modules/services/way-displays.nix
- modules/services/wlsunset.nix
- modules/services/wluma.nix
- modules/services/wpaperd.nix
- tests/modules/programs/ashell/**/*
- tests/modules/programs/i3bar-river/**/*
- tests/modules/programs/swaylock/**/*
- tests/modules/programs/vicinae/**/*
- tests/modules/programs/waybar/**/*
"window-managers":
- changed-files:
- any-glob-to-any-file:
- modules/programs/aerospace.nix
- modules/programs/i3bar-river.nix
- modules/programs/i3blocks.nix
- modules/programs/i3status-rust.nix
- modules/programs/i3status.nix
- modules/services/window-managers/**/*
"x11":
- changed-files:
- any-glob-to-any-file:
- modules/programs/i3blocks.nix
- modules/programs/i3status-rust.nix
- modules/programs/i3status.nix
- modules/programs/rofi.nix
- modules/programs/tint2.nix
- modules/programs/xmobar.nix
- modules/programs/yambar.nix
- modules/services/betterlockscreen.nix
- modules/services/dunst.nix
- modules/services/dwm-status.nix
- modules/services/picom.nix
- modules/services/polybar.nix
- modules/services/screen-locker.nix
- modules/services/stalonetray.nix
- modules/services/sxhkd.nix
- modules/services/taffybar.nix
- modules/services/trayer.nix
- modules/services/xcape.nix
- modules/services/xembed-sni-proxy.nix
- modules/services/xidlehook.nix
- modules/services/xscreensaver.nix
- modules/services/xsettingsd.nix
- modules/services/xsuspender.nix
- tests/modules/programs/i3blocks/**/*
- tests/modules/programs/i3status-rust/**/*
- tests/modules/programs/i3status/**/*
- tests/modules/programs/rofi/**/*
- tests/modules/services/picom/**/*
- tests/modules/services/polybar/**/*
-45
View File
@@ -1,45 +0,0 @@
# Based on
# https://github.com/NixOS/nixpkgs/blob/2566f9dc/.github/workflows/backport.yml
name: Backport
on:
pull_request_target:
types:
- closed
- labeled
permissions:
contents: write
pull-requests: write
jobs:
backport:
name: Backport Pull Request
if: >
vars.CI_APP_ID
&& github.event.pull_request.merged == true
&& (
github.event.action != 'labeled'
|| startsWith(github.event.label.name, 'backport')
)
runs-on: ubuntu-latest
steps:
- name: Create GitHub App token
uses: actions/create-github-app-token@v3
if: vars.CI_APP_ID
id: app-token
with:
app-id: ${{ vars.CI_APP_ID }}
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
- uses: actions/checkout@v7
with:
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.base.sha }}
- name: Create backport PRs
id: backport
uses: korthout/backport-action@v4
with:
# See https://github.com/korthout/backport-action#inputs
github_token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
branch_name: backport/${target_branch}/${pull_number}
copy_labels_pattern: .*
-15
View File
@@ -1,15 +0,0 @@
on:
push:
branches:
- master
jobs:
triage:
runs-on: ubuntu-latest
if: github.repository_owner == 'nix-community'
steps:
- uses: mschilde/auto-label-merge-conflicts@master
with:
CONFLICT_LABEL_NAME: "merge conflict"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MAX_RETRIES: 5
WAIT_MS: 10000
-30
View File
@@ -1,30 +0,0 @@
name: GitHub Pages
on:
push:
branches:
- master
workflow_dispatch:
jobs:
publish:
if: github.event_name != 'schedule' || github.repository_owner == 'nix-community'
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=channel:nixpkgs-unstable
- uses: cachix/cachix-action@v17
with:
name: nix-community
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: |
nix-build -A docs.html
cp -r result/share/doc/home-manager public
- name: Deploy
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
-35
View File
@@ -1,35 +0,0 @@
name: "Label PR"
on:
- pull_request_target
# WARNING:
# When extending this action, be aware that $GITHUB_TOKEN allows some write
# access to the GitHub API. This means that it should not evaluate user input in
# a way that allows code injection.
permissions:
contents: read
pull-requests: write
issues: write
jobs:
labels:
runs-on: ubuntu-latest
if: github.repository_owner == 'nix-community'
steps:
- name: Get changed files count
id: count
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
COUNT=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUMBER/files" --paginate --jq '.[].filename' | grep -c '^modules/' || true)
echo "Found $COUNT changed module files."
echo "count=$COUNT" >> "$GITHUB_OUTPUT"
- uses: actions/labeler@v6
if: steps.count.outputs.count <= 10
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
sync-labels: true
-81
View File
@@ -1,81 +0,0 @@
name: Tag Module Maintainers
on:
pull_request_target:
types: [opened, ready_for_review, reopened, synchronize]
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: write
jobs:
tag-maintainers:
runs-on: ubuntu-latest
if: |
github.event.pull_request.draft == false &&
github.event.pull_request.state == 'open'
steps:
- name: Create GitHub App token
uses: actions/create-github-app-token@v3
if: vars.CI_APP_ID
id: app-token
with:
app-id: ${{ vars.CI_APP_ID }}
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
- name: Checkout code
uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: Get Nixpkgs revision from flake.lock
id: get-nixpkgs
run: |
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
extra_nix_config: |
experimental-features = nix-command flakes
- name: Get changed files
id: changed-files
env:
GH_TOKEN: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
CHANGED_FILES=$(gh pr diff "$PR_NUMBER" --name-only | grep '^modules/' | grep -v '^modules/\(po\|.*\/news\)/' || true)
echo "Changed files:"
echo "$CHANGED_FILES"
echo "changed_files<<EOF" >> "$GITHUB_OUTPUT"
echo "$CHANGED_FILES" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: Extract Maintainers
id: extract-maintainers
env:
CHANGED_FILES: ${{ steps.changed-files.outputs.changed_files }}
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
run: |
echo "Extracting maintainers from changed files..."
MAINTAINERS=$(lib/python/extract-maintainers.py \
--changed-files "$CHANGED_FILES" \
--pr-author "$PR_AUTHOR")
echo "maintainers=$MAINTAINERS" >> "$GITHUB_OUTPUT"
echo "Found maintainers: $MAINTAINERS"
- name: Manage Reviewers
env:
GH_TOKEN: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
PR_NUMBER: ${{ github.event.pull_request.number }}
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
MAINTAINERS: ${{ steps.extract-maintainers.outputs.maintainers }}
CHANGED_FILES: ${{ steps.changed-files.outputs.changed_files }}
BOT_NAME: ${{ steps.app-token.outputs.app-slug || 'github-actions' }}
run: |
./lib/python/manage-reviewers.py \
--owner "$OWNER" \
--repo "$REPO" \
--pr-number "$PR_NUMBER" \
--pr-author "$PR_AUTHOR" \
--current-maintainers "$MAINTAINERS" \
--changed-files "$CHANGED_FILES" \
--bot-user-name "$BOT_NAME"
-128
View File
@@ -1,128 +0,0 @@
name: Test
on:
pull_request:
schedule:
- cron: "30 2 * * *"
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.run_id }}
cancel-in-progress: true
permissions: {}
jobs:
changes:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
docs: ${{ steps.changes.outputs.docs }}
format: ${{ steps.changes.outputs.format }}
hm: ${{ steps.changes.outputs.hm }}
parse: ${{ steps.changes.outputs.parse }}
tests: ${{ steps.changes.outputs.tests }}
steps:
- uses: actions/checkout@v7
- uses: dorny/paths-filter@v4
id: changes
with:
filters: |
tests:
- 'flake.lock'
- 'flake.nix'
- 'modules/**'
- 'nix-darwin/**'
- 'nixos/**'
- 'tests/**'
docs:
- '**.md'
- 'docs/**'
- 'flake.lock'
- 'flake.nix'
- 'modules/**'
format:
- '**/*.nix'
hm:
- 'flake.lock'
- 'flake.nix'
- 'home-manager/**'
parse:
- '**/*.nix'
- 'flake.lock'
tests:
needs: changes
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Get Nixpkgs revision from flake.lock
id: get-nixpkgs
run: |
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
- uses: cachix/install-nix-action@v31
if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outputs.hm == 'true' || needs.changes.outputs.parse == 'true' || needs.changes.outputs.format == 'true'
with:
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
extra_nix_config: |
sandbox = true
- name: Build docs
if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true'
run: nix build --show-trace .#docs-jsonModuleMaintainers
- name: Parse Nix files with nix and Lix
if: >-
matrix.os == 'ubuntu-latest' &&
(github.event_name == 'schedule' || needs.changes.outputs.parse == 'true')
run: nix build --show-trace --keep-going .#ci-parse .#ci-parse-lix
- name: Format Check
if: >-
matrix.os == 'ubuntu-latest' &&
(github.event_name == 'schedule' || needs.changes.outputs.format == 'true')
run: nix fmt -- --ci
- name: Test init --switch with locked inputs
if: github.event_name == 'schedule' || needs.changes.outputs.hm == 'true'
run: |
# Copy lock file to home directory for consistent testing
mkdir -p ~/.config/home-manager
cp flake.lock ~/.config/home-manager/
nix run .#home-manager -- init --switch --override-input home-manager .
- name: Uninstall
if: github.event_name == 'schedule' || needs.changes.outputs.hm == 'true'
run: yes | nix run . -- uninstall
- name: Generate Job Summary
if: github.event_name == 'pull_request'
shell: bash
run: |
echo "### Test Job Summary" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "A summary of tasks triggered by file changes in this PR:" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
if [[ "${{ needs.changes.outputs.docs }}" == "true" ]]; then
echo "- ✅ **Docs Build:** Triggered" >> "$GITHUB_STEP_SUMMARY"
else
echo "- ☑️ **Docs Build:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
fi
if [[ "${{ needs.changes.outputs.format }}" == "true" ]]; then
echo "- ✅ **Format Check:** Triggered" >> "$GITHUB_STEP_SUMMARY"
else
echo "- ☑️ **Format Check:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
fi
if [[ "${{ needs.changes.outputs.parse }}" == "true" ]]; then
echo "- ✅ **Nix Parse (nix + Lix):** Triggered" >> "$GITHUB_STEP_SUMMARY"
else
echo "- ☑️ **Nix Parse (nix + Lix):** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
fi
if [[ "${{ needs.changes.outputs.hm }}" == "true" ]]; then
echo "- ✅ **Home Manager Tests:** Triggered" >> "$GITHUB_STEP_SUMMARY"
else
echo "- ☑️ **Home Manager Tests:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
fi
if [[ "${{ needs.changes.outputs.tests }}" == "true" ]]; then
echo "- ✅ **General Tests:** Triggered" >> "$GITHUB_STEP_SUMMARY"
else
echo "- ☑️ **General Tests:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
fi
-286
View File
@@ -1,286 +0,0 @@
name: Update maintainers list
on:
push:
branches:
- main
paths:
- lib/maintainers.nix
schedule:
# Update every Monday at 9 AM UTC
- cron: "0 9 * * 1"
workflow_dispatch:
inputs:
create_pr:
description: "Create PR even if no changes"
required: false
default: false
type: boolean
jobs:
update-maintainers:
runs-on: ubuntu-latest
if: github.repository_owner == 'nix-community' || github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
issues: write
env:
pr_branch: update/maintainers-${{ github.ref_name }}
steps:
- name: Create GitHub App token
uses: actions/create-github-app-token@v3
if: vars.CI_APP_ID
id: app-token
with:
app-id: ${{ vars.CI_APP_ID }}
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
- name: Get GitHub App user info
id: user-info
if: vars.CI_APP_ID
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
slug: ${{ steps.app-token.outputs.app-slug }}
run: |
name="$slug[bot]"
id=$(gh api "/users/$name" --jq .id)
{
echo "id=$id"
echo "name=$name"
echo "email=$id+$name@users.noreply.github.com"
} >> "$GITHUB_OUTPUT"
- name: Checkout repository
uses: actions/checkout@v7
with:
token: ${{ steps.app-token.outputs.token || github.token }}
- name: Get Nixpkgs revision from flake.lock
id: get-nixpkgs
run: |
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
- name: Setup Git
env:
name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}
email: ${{ steps.user-info.outputs.email || '41898282+github-actions[bot]@users.noreply.github.com' }}
run: |
git config user.name "$name"
git config user.email "$email"
- name: Save old maintainers
id: old-maintainers
run: |
echo "📄 Saving old maintainers file for comparison..."
echo "old_maintainers=$(nix eval --file all-maintainers.nix --apply 'builtins.attrNames' --json 2>/dev/null || echo '[]')" >> "$GITHUB_OUTPUT"
- name: Generate updated maintainers list
run: |
echo "::group::📋 Generating updated generated/all-maintainers.nix..."
./lib/python/generate-all-maintainers.py
echo "::endgroup::"
echo "::group::🎨 Formatting with nixfmt..."
nix fmt all-maintainers.nix
echo "::endgroup::"
- name: Check for changes and compare maintainers
id: check-changes
env:
old_maintainers: ${{ steps.old-maintainers.outputs.old_maintainers }}
run: |
if git diff --quiet all-maintainers.nix; then
echo "No changes to all-maintainers.nix"
echo "has_changes=false" >> "$GITHUB_OUTPUT"
echo "maintainer_changes=No changes detected" >> "$GITHUB_OUTPUT"
else
echo "Changes detected in all-maintainers.nix"
echo "has_changes=true" >> "$GITHUB_OUTPUT"
# Get change statistics
added=$(git diff --numstat all-maintainers.nix | cut -f1)
removed=$(git diff --numstat all-maintainers.nix | cut -f2)
echo "changes_summary=+$added -$removed lines" >> "$GITHUB_OUTPUT"
# Compare old and new maintainers using nix eval
echo "🔍 Comparing maintainers..."
# Extract maintainer names from new file
new_maintainers=$(nix eval --file all-maintainers.nix --apply 'builtins.attrNames' --json)
# Compare using nix eval
comparison=$(nix eval --expr "
let
old = builtins.fromJSON ''$old_maintainers'';
new = builtins.fromJSON ''$new_maintainers'';
oldSet = builtins.listToAttrs (map (name: { name = name; value = true; }) old);
newSet = builtins.listToAttrs (map (name: { name = name; value = true; }) new);
added = builtins.filter (name: !(oldSet ? \${name})) new;
removed = builtins.filter (name: !(newSet ? \${name})) old;
in {
added = added;
removed = removed;
total_old = builtins.length old;
total_new = builtins.length new;
}
" --json)
# Format comparison output
added_count=$(echo "$comparison" | jq '.added | length')
removed_count=$(echo "$comparison" | jq '.removed | length')
total_old=$(echo "$comparison" | jq '.total_old')
total_new=$(echo "$comparison" | jq '.total_new')
maintainer_summary="**Added:** $added_count maintainers"
maintainer_summary="$maintainer_summary\n**Removed:** $removed_count maintainers"
maintainer_summary="$maintainer_summary\n**Total:** $total_old → $total_new maintainers"
if [ "$added_count" -gt 0 ]; then
added_names=$(echo "$comparison" | jq -r '.added | join(", ")')
maintainer_summary="$maintainer_summary\n\n**✅ Added:** $added_names"
fi
if [ "$removed_count" -gt 0 ]; then
removed_names=$(echo "$comparison" | jq -r '.removed | join(", ")')
maintainer_summary="$maintainer_summary\n\n**❌ Removed:** $removed_names"
fi
echo "maintainer_changes<<EOF" >> "$GITHUB_OUTPUT"
echo -e "$maintainer_summary" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
fi
- name: Validate generated file
if: steps.check-changes.outputs.has_changes == 'true'
run: |
echo "🔍 Validating generated all-maintainers.nix..."
if nix-instantiate --eval ./all-maintainers.nix --strict > /dev/null; then
echo "✅ Generated file has valid Nix syntax"
else
echo "❌ Generated file has invalid Nix syntax"
exit 1
fi
- name: Create update branch
run: |
git branch -D "$pr_branch" || echo "Nothing to delete"
git switch -c "$pr_branch"
- name: Get info on the current PR
id: open_pr_info
env:
GH_TOKEN: ${{ steps.app-token.outputs.token || github.token }}
run: |
# Query for info about the already open update PR
info=$(
gh api graphql -F owner='{owner}' -F repo='{repo}' -F branch="$pr_branch" -f query='
query($owner:String!, $repo:String!, $branch:String!) {
repository(owner: $owner, name: $repo) {
pullRequests(first: 1, states: OPEN, headRefName: $branch) {
nodes {
number
url
}
}
}
}
' | jq --raw-output '
.data.repository.pullRequests.nodes[]
| to_entries[]
| "\(.key)=\(.value)"
'
)
if [[ -n "$info" ]]; then
echo "PR info:"
echo "$info"
echo "$info" >> "$GITHUB_OUTPUT"
else
echo "No PR is currently open"
fi
- name: Fetch current PR's branch
if: steps.open_pr_info.outputs.number
run: |
git fetch origin "$pr_branch"
git branch --set-upstream-to "origin/$pr_branch"
- name: Create Pull Request
id: create-pr
if: steps.check-changes.outputs.has_changes == 'true' || github.event.inputs.create_pr == 'true'
env:
GH_TOKEN: ${{ steps.app-token.outputs.token || github.token }}
title: "maintainers: update all-maintainers.nix"
commit_body: |
Automated update of the master maintainers list combining:
- Home Manager specific maintainers from modules/lib/maintainers.nix
- Nixpkgs maintainers referenced in Home Manager modules
${{ steps.check-changes.outputs.maintainer_changes }}
Generated by: lib/python/generate-all-maintainers.py
pr_url: ${{ steps.open_pr_info.outputs.url }}
pr_num: ${{ steps.open_pr_info.outputs.number }}
pr_body: |
## 📋 Summary
This PR updates the master maintainers list (`all-maintainers.nix`) which combines:
- **Home Manager specific maintainers** from `modules/lib/maintainers.nix`
- **Nixpkgs maintainers** referenced in Home Manager modules
## 🔄 Changes
**Statistics:** ${{ steps.check-changes.outputs.changes_summary || 'No content changes (format/comment updates only)' }}
${{ steps.check-changes.outputs.maintainer_changes }}
The updated list includes all maintainers needed for review assignments across the Home Manager project.
## 🤖 Automation
- **Generated by:** `lib/python/generate-all-maintainers.py`
- **Trigger:** ${{ github.event_name == 'schedule' && 'Scheduled weekly update' || 'Manual workflow dispatch' }}
- **Validation:** File syntax verified with `nix eval`
---
🤖 *This PR was automatically created by the [update-maintainers workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})*
run: |
# Commit the changes
git add all-maintainers.nix
git commit -m "$title" -m "$commit_body"
echo "Pushing to remote branch $pr_branch"
git push --force --set-upstream origin "$pr_branch"
if [ -z "$pr_num" ]; then
echo "Creating new pull request."
PR_URL=$(
gh pr create \
--title "$title" \
--body "$pr_body"
)
else
PR_URL=$pr_url
echo "Pull request already exists: $PR_URL"
gh pr edit "$pr_num" --body "$pr_body"
fi
echo "pr_url=$PR_URL" >> "$GITHUB_OUTPUT"
- name: Summary
env:
has_changes: ${{ steps.check-changes.outputs.has_changes }}
changes: ${{ steps.check-changes.outputs.changes_summary }}
pr_url: ${{ steps.create-pr.outputs.pr_url}}
pr_num: ${{ steps.open_pr_info.outputs.number }}
run: |
if [[ "$has_changes" == "true" ]]; then
if [[ -n "$pr_num" ]]; then
echo "✅ Successfully updated PR with new changes."
echo "$changes"
echo "🔗 PR URL: $pr_url"
echo "### ✅ PR Updated" >> "$GITHUB_STEP_SUMMARY"
echo "[$pr_url]($pr_url)" >> "$GITHUB_STEP_SUMMARY"
elif [[ -n "$pr_url" ]]; then
echo "✅ Successfully created PR with maintainer updates."
echo "$changes"
echo "🔗 PR URL: $pr_url"
echo "### ✅ PR Created" >> "$GITHUB_STEP_SUMMARY"
echo "[$pr_url]($pr_url)" >> "$GITHUB_STEP_SUMMARY"
else
echo "❌ Failed to create or update pull request."
echo "### ❌ PR Operation Failed" >> "$GITHUB_STEP_SUMMARY"
echo "A pull request was intended but the URL was not captured. Please check the logs." >> "$GITHUB_STEP_SUMMARY"
fi
else
echo "️ No changes detected - maintainers list is up to date."
echo "### ️ No Changes" >> "$GITHUB_STEP_SUMMARY"
echo "The maintainers list is up-to-date. No PR was created." >> "$GITHUB_STEP_SUMMARY"
fi
@@ -1,52 +0,0 @@
name: Validate maintainers.nix
on:
pull_request:
paths:
- "modules/lib/maintainers.nix"
- "flake.lock"
- "all-maintainers.nix"
workflow_dispatch:
inputs:
run_tests:
description: 'Run validation tests'
required: false
default: true
type: boolean
jobs:
validate-maintainers:
runs-on: ubuntu-latest
if: github.repository_owner == 'nix-community'
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Get Nixpkgs revision from flake.lock
id: get-nixpkgs
run: |
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
- name: Validate Nix syntax
run: ./lib/python/validate-maintainers-syntax.py
- name: Validate maintainer entries
run: ./lib/python/validate-maintainer-entries.py
- name: Check for duplicate maintainers
run: ./lib/python/check-duplicate-maintainers.py
- name: Test generation
if: inputs.run_tests == true
run: |
echo "🔍 Testing all-maintainers.nix generation..."
./lib/python/generate-all-maintainers.py
echo "🔍 Validating generated file..."
if nix eval --file ./all-maintainers.nix --json > /dev/null; then
echo "✅ Generated file has valid Nix syntax"
else
echo "❌ Generated file has invalid Nix syntax"
exit 1
fi
- name: Summary
run: |
echo "✅ All validation checks passed!"
echo "📋 The maintainers.nix file is ready for merge"
-3
View File
@@ -1,3 +0,0 @@
/result*
/tests/flake.lock
.DS_Store
-20
View File
@@ -1,20 +0,0 @@
image: nixos/nix:latest
variables:
NIX_PATH: "nixpkgs=channel:nixos-unstable"
stages:
- deploy
pages:
stage: deploy
script:
- nix-build -A docs.html
- mkdir public
- cp -r ./result/share/doc/home-manager/* public/
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "master"
when: always
-1
View File
@@ -1 +0,0 @@
Noah Biewesch <dev@noahbiewesch.com> <90870942+trueNAHO@users.noreply.github.com>
+246
View File
@@ -0,0 +1,246 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Third-Party Tools and Extensions - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-e96d0476.css">
<link rel="stylesheet" href="css/chrome-d279d366.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="ch-3rd-party"></a></p>
<h1 id="third-party-tools-and-extensions"><a class="header" href="#third-party-tools-and-extensions">Third-Party Tools and Extensions</a></h1>
<p>Here is a collection of tools and extensions that relate to Home
Manager. Note, these are maintained outside the regular Home Manager
flow so quality and support may vary wildly. If you encounter problems
then please raise them in the corresponding project, not as issues in
the Home Manager tracker.</p>
<p>If you have made something interesting related to Home Manager then you
are encouraged to create a PR that expands this chapter.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="internals/activation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="3rd-party/collections.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="internals/activation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="3rd-party/collections.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-09f2665d.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+251
View File
@@ -0,0 +1,251 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Module Collections - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-3rd-party-module-collections"></a></p>
<h1 id="module-collections"><a class="header" href="#module-collections">Module Collections</a></h1>
<ul>
<li>
<p><a href="https://github.com/schuelermine/xhmm">xhmm — extra Home Manager
modules</a></p>
<p>A collection of modules maintained by Anselm Schüler.</p>
</li>
<li>
<p><a href="https://github.com/danth/stylix/">Stylix — System-wide colorscheming and
typography</a></p>
<p>Configure your applications to get coherent color scheme and font.</p>
</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../3rd-party.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../faq.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../3rd-party.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../faq.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+228
View File
@@ -0,0 +1,228 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Page not found - Home Manager Manual</title>
<base href="/">
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-e96d0476.css">
<link rel="stylesheet" href="css/chrome-d279d366.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1>
<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-09f2665d.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
-8
View File
@@ -1,8 +0,0 @@
# Contributing
Home Manager contribution guidelines live in the manual:
- [`docs/manual/contributing.md`](docs/manual/contributing.md)
- <https://nix-community.github.io/home-manager/#ch-contributing>
Read those docs before changing modules, tests, news entries, or release notes.
-28
View File
@@ -1,28 +0,0 @@
# Common commands
#
# Contributing manual:
# - https://nix-community.github.io/home-manager/#ch-contributing
# List tests matching a pattern `pattern`
list *pattern:
nix run .#tests -- -l {{pattern}}
# Run all tests matching a pattern `pattern`
test *pattern:
nix run .#tests -- {{pattern}}
# List integration tests
list_integration_tests:
nix run .#tests -- -t -l
# Run integration tests
integration_tests:
nix run .#tests -- -t integration-test-
# Create a news entry
create-news-entry:
modules/misc/news/create-news-entry.sh
# format codebase with treefmt
format:
treefmt
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2017-2026 Home Manager contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-255
View File
@@ -1,255 +0,0 @@
# Maintaining Home Manager
This file is intended as a reference for Home Manager's core maintainers,
although it may be interesting for anyone curious how we do certain things.
## Releasing
Home Manager releases stable versions in sync with NixOS/nixpkgs. A _`YY.05`_
version is released in May and a _`YY.11`_ version is released in November.
We do not need to wait for the release to come out of _"beta"_ before creating a
branch, however we _should_ wait before updating links and references on the
`master` branch.
Creating a stable branch may require temporarily disabling branch protection.
This can only be done by an "admin" or "owner".
Once a stable branch is created, its flake inputs should be updated to point to
the corresponding stable versions. The branch can be created before these exist,
in which case they should be updated when the corresponding stable inputs become
available.
Once a stable version is considered "out of beta", references to Home Manager's
stable branch should be updated on the `master` branch to reference the new
version.
### Release Workflow
The release process involves four phases in a specific order:
1. **On master - Mark current as stable**: Update all documentation and examples
to reflect the current release (e.g., 25.11) as stable, removing "(unstable)"
tags
2. **Cut the release branch**: Create the new release branch from master (e.g.,
`release-25.11`)
3. **On release branch - Mark as release branch**: Set `isReleaseBranch: true`
in `release.json`
4. **On master - Prepare for next**: Bump version to next release (e.g., 26.05)
and add "(unstable)" tag back
**Important**: The `isReleaseBranch` field in `release.json` is managed
differently on each branch:
- On **master**: Always remains `false`
- On **release branches**: Set to `true` in a separate commit after cutting the
branch from master
This workflow ensures that the release branch captures a stable snapshot of
master, which then moves forward to the next development cycle.
### Release Preparation Checklist
#### Step 1: On master - Mark Current as Stable
**When**: When ready to cut a new release branch (e.g., when preparing to
release 25.11)
Reference commits:
- `e08e6e2389234000b0447e57abf61d8ccd59a68e` (home-manager: set 25.05 as stable)
1. **README.md**
- Update example release branch references (e.g., `release-24.11`
`release-25.05`)
- Update current stable version references (e.g., `24.11``25.05`)
2. **docs/manual/installation/nix-darwin.md**
- Update channel version in example commands
- Update `home.stateVersion` in examples
3. **docs/manual/installation/nixos.md**
- Update channel version in example commands
- Update tarball URLs
- Update `home.stateVersion` in examples
4. **docs/manual/installation/standalone.md**
- Update channel version in example commands
5. **docs/manual/manual.md**
- Remove `(unstable)` suffix from version
6. **docs/manual/nix-flakes/standalone.md**
- Update flake references (e.g., `home-manager/release-24.11`
`home-manager/release-25.05`)
- Update `$branch` examples
7. **docs/manual/usage/configuration.md**
- Update `home.stateVersion` in example configurations
8. **docs/release-notes/rl-YYMM.md**
- Replace "This is the current unstable branch and the information in this
section is therefore not final."
- With: "The YY.MM release branch became stable in <Month>, YYYY."
9. **home-manager/home-manager** script
- Update default `home.stateVersion` in generated configurations
- Update `home.stateVersion` in uninstall function
10. **modules/misc/uninstall.nix**
- Update `home.stateVersion` in uninstall config
**Note**: Do NOT change `isReleaseBranch` in `release.json` - keep it as `false`
#### Step 2: Cut the release branch
**When**: After Step 1 is merged to master
1. Create the new release branch from master
- Example: `git checkout -b release-25.11 master`
2. Push the branch to the repository
#### Step 3: On the release branch - Mark as Release Branch
**When**: Immediately after creating the release branch
Reference commits:
- `70a787cc5` (release: set release branch)
1. **release.json**
- Change `isReleaseBranch` from `false` to `true`
- Do NOT change the `release` field (it's already correct from Step 1)
2. **flake.nix**
- Update the nixpkgs input to track the corresponding stable branch
- Example: For `release-25.11`, change from:
```nix
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
```
to:
```nix
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
```
- Run `nix flake update` to update flake.lock to the stable branch
- Commit the flake.nix and flake.lock changes
**Note**: The release branch should track the stable NixOS release channel
(e.g., `nixos-25.11`), while master continues to track `nixpkgs-unstable`.
#### Step 3.5: On master - Update CI for the New Release Branch
**When**: After marking the release branch as a release branch (Step 3)
**Where**: On the **master** branch (CI workflows run from master)
**What**: Update GitHub Actions workflows to include the new stable branch
1. **.github/workflows/update-flake.yml** (on master)
- Replace the old stable branch with the new release branch in the matrix
- Example: When creating `release-25.11`, update the matrix from:
```yaml
strategy:
matrix:
branch: [master, release-25.05]
```
to:
```yaml
strategy:
matrix:
branch: [master, release-25.11]
```
- This ensures automated flake.lock updates run on the current stable branch
- Note: We only maintain CI for the latest stable release, not older releases
2. **.github/dependabot.yml** (on master)
- Replace the old stable branch with the new release branch
- Example: When creating `release-25.11`, update the target-branch from:
```yaml
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "release-25.05"
schedule:
interval: "weekly"
commit-message:
prefix: "ci:"
```
to:
```yaml
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "release-25.11"
schedule:
interval: "weekly"
commit-message:
prefix: "ci:"
```
- This ensures automated dependency updates for GitHub Actions on the current
stable branch
- Note: We only maintain dependabot for the latest stable release, not older
releases
**Important**: CI workflows are executed from master, so this change must be
committed to the master branch.
#### Step 4: On master - Prepare for Next Release
**When**: After cutting the release branch, prepare master for the next
development cycle
Reference commits:
- `9a4a9f1d6e43fe4044f6715ae7cc85ccb1d2fe09` (home-manager: prepare 25.11)
1. **docs/release-notes/rl-YYMM.md** (CREATE NEW)
- Create new release notes file for next version with unstable warning
- Example: Create `rl-2605.md` when preparing for 26.05
2. **docs/manual/manual.md**
- Update version to next release with `(unstable)` tag
- Example: `25.11` → `26.05 (unstable)`
3. **docs/release-notes/release-notes.md**
- Add new release notes file `rl-YYMM.md` at the top of the chapters list
4. **home-manager/home-manager** script
- Update `--version` output to next version
- Example: `echo 25.11-pre` → `echo 26.05-pre`
5. **modules/misc/version.nix**
- Add new version string to `stateVersion` enum list
- Example: Add `"26.05"` after `"25.11"`
6. **release.json**
- Update `release` field to next version (e.g., `"25.11"` → `"26.05"`)
- **IMPORTANT**: Keep `isReleaseBranch` as `false` on master
### Version State Changes
Each release may introduce state version changes that affect the default
behavior of Home Manager for users who set `home.stateVersion` to that version.
State version changes should be documented in the release notes under a "State
Version Changes" section, explaining what behavior changes for users who set
their state version to the new release.
### Backporting
Stable branches get bug fixes and security updates, but usually not new modules
or features. When backporting:
1. Use `git cherry-pick -x <commit>` to preserve the original commit reference
2. Test that the backport builds successfully
3. Consider whether the change might affect existing stable users
4. Update the PR/commit message to indicate it's a backport
If a user needs a module backported, they should open an issue explaining the
use case.
-21
View File
@@ -1,21 +0,0 @@
.PHONY: all all-tests test test-install format
NIXPKGS_REV := nixpkgs-unstable
NIX_PATH := nixpkgs=https://github.com/NixOS/nixpkgs/archive/${NIXPKGS_REV}.tar.gz
all: all-tests test-install
all-tests:
$(MAKE) test TEST=all
test:
ifndef TEST
$(error Use 'make test TEST=<test_name>' to run desired test)
endif
nix-shell --pure tests -I ${NIX_PATH} -A run.${TEST}
test-install:
HOME=$(shell mktemp -d) NIX_PATH=${NIX_PATH} nix-shell . -A install
format:
# added 2026-03-01
@echo "run \"nix-shell -A dev --run 'just format'\" instead"
-124
View File
@@ -1,124 +0,0 @@
Home Manager using Nix
======================
This project provides a basic system for managing a user environment using the
[Nix][] package manager together with the Nix libraries found in [Nixpkgs][]. It
allows declarative configuration of user specific (non-global) packages and
dotfiles.
Usage
-----
Before attempting to use Home Manager please read [the warning
below](#words-of-warning).
For a systematic overview of Home Manager and its available options, please see:
- [Home Manager manual][manual]
- [Home Manager configuration options][configuration options]
- [3rd party Home Manager option
search](https://home-manager-options.extranix.com/)
If you would like to contribute to Home Manager, then please have a look at
["Contributing" in the manual][contributing].
Releases
--------
Home Manager is developed against the `nixpkgs-unstable` branch, which often
causes it to contain tweaks for changes/packages not yet released in stable
[NixOS][].
To avoid breaking users' configurations, Home Manager is released in branches
corresponding to NixOS releases (e.g. `release-26.05`). These branches get
fixes, but usually not new modules. If you need a module to be backported, then
feel free to open an issue.
Words of warning
----------------
Unfortunately, it is quite possible to get difficult to understand errors when
working with Home Manager. You should therefore be comfortable using the [Nix][]
language and the various tools in the Nix ecosystem.
If you are not very familiar with Nix but still want to use Home Manager then
you are strongly encouraged to start with a small and very simple configuration
and gradually make it more elaborate as you learn.
In some cases Home Manager cannot detect whether it will overwrite a previous
manual configuration. For example, the Gnome Terminal module will write to your
dconf store and cannot tell whether a configuration that is about to be
overwritten was from a previous Home Manager generation or from manual
configuration.
Home Manager targets `nixpkgs-unstable` and NixOS version 26.05 (the current
stable version), it may or may not work on other Linux distributions and NixOS
versions.
Now when your expectations have been built up and you are eager to try all this
out you can go ahead and read the rest of this text.
Contact
-------
You can chat with us on IRC in the channel [#home-manager][] on [OFTC][]. There
is also a [Matrix room](https://matrix.to/#/#hm:rycee.net), which is bridged to
the IRC channel.
Installation
------------
Home Manager can be used in three primary ways:
1. Using the standalone `home-manager` tool. For platforms other than NixOS and
Darwin, this is the only available choice. It is also recommended for people
on [NixOS][] or Darwin that want to manage their home directory independently
of the system as a whole. See ["Standalone installation" in the
manual][manual standalone install] for instructions on how to perform this
installation.
1. As a module within a NixOS system configuration. This allows the user
profiles to be built together with the system when running `nixos-rebuild`.
See ["NixOS module" in the manual][manual nixos install] for a description of
this setup.
1. As a module within a [nix-darwin] system configuration. This allows the user
profiles to be built together with the system when running `darwin-rebuild`.
See ["nix-darwin module" in the manual][manual nix-darwin install] for a
description of this setup.
Home Manager provides both the channel-based setup and the flake-based one. See
[Nix Flakes][manual nix flakes] for a description of the flake-based setup.
Translations
------------
Home Manager has basic support for internationalization through
[gettext](https://www.gnu.org/software/gettext/). The translations are hosted by
[Weblate](https://weblate.org/). If you would like to contribute to the
translation effort then start by going to the [Home Manager Weblate
project](https://hosted.weblate.org/engage/home-manager/).
<a href="https://hosted.weblate.org/engage/home-manager/">
<img src="https://hosted.weblate.org/widgets/home-manager/-/multi-auto.svg" alt="Translation status" />
</a>
License
-------
This project is licensed under the terms of the [MIT license](LICENSE).
[#home-manager]: https://webchat.oftc.net/?channels=home-manager
[Nix Flakes]: https://wiki.nixos.org/wiki/Flakes
[NixOS]: https://nixos.org/
[Nix]: https://nixos.org/explore.html
[Nixpkgs]: https://github.com/NixOS/nixpkgs
[OFTC]: https://oftc.net/
[configuration options]: https://nix-community.github.io/home-manager/options.xhtml
[contributing]: https://nix-community.github.io/home-manager/#ch-contributing
[manual nix flakes]: https://nix-community.github.io/home-manager/#ch-nix-flakes
[manual nix-darwin install]: https://nix-community.github.io/home-manager/#sec-install-nix-darwin-module
[manual nixos install]: https://nix-community.github.io/home-manager/#sec-install-nixos-module
[manual standalone install]: https://nix-community.github.io/home-manager/#sec-install-standalone
[manual]: https://nix-community.github.io/home-manager/
[nix-darwin]: https://github.com/nix-darwin/nix-darwin
[rollbacks]: https://nix-community.github.io/home-manager/index.xhtml#sec-usage-rollbacks
-2537
View File
File diff suppressed because it is too large Load Diff
+77
View File
@@ -0,0 +1,77 @@
/*
Based off of the Ayu theme
Original by Dempfi (https://github.com/dempfi/ayu)
*/
.hljs {
display: block;
overflow-x: auto;
background: #191f26;
color: #e6e1cf;
}
.hljs-comment,
.hljs-quote {
color: #5c6773;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-regexp,
.hljs-link,
.hljs-selector-id,
.hljs-selector-class {
color: #ff7733;
}
.hljs-number,
.hljs-meta,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #ffee99;
}
.hljs-string,
.hljs-bullet {
color: #b8cc52;
}
.hljs-title,
.hljs-built_in,
.hljs-section {
color: #ffb454;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-symbol {
color: #ff7733;
}
.hljs-name {
color: #36a3d9;
}
.hljs-tag {
color: #00568d;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #91b362;
}
.hljs-deletion {
color: #d96c75;
}
+870
View File
@@ -0,0 +1,870 @@
'use strict';
/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */
// Fix back button cache problem
window.onunload = function() { };
// Global variable, shared between modules
function playground_text(playground, hidden = true) {
const code_block = playground.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
return editor.getValue();
} else if (hidden) {
return code_block.textContent;
} else {
return code_block.innerText;
}
}
/**
* Helper for global keypress handlers so they don't trigger when certain elements are active.
* @returns {boolean} True if the keypress handler should be skipped.
*/
function mdbook_something_else_has_focus(e) {
// Check composedPath in case the event happened from something generated
// from the shadowDOM.
const target = e.composedPath()[0] || e.target;
// If this is the `checkbox-img` input which has the focus, we want to handle it here.
if (target.classList.contains('checkbox-img')) {
return false;
}
return /^(?:input|select|textarea)$/i.test(target.nodeName);
}
(function codeSnippets() {
function fetch_with_timeout(url, options, timeout = 6000) {
return Promise.race([
fetch(url, options),
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)),
]);
}
const playgrounds = Array.from(document.querySelectorAll('.playground'));
if (playgrounds.length > 0) {
fetch_with_timeout('https://play.rust-lang.org/meta/crates', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
})
.then(response => response.json())
.then(response => {
// get list of crates available in the rust playground
const playground_crates = response.crates.map(item => item['id']);
playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
});
}
function handle_crate_list_update(playground_block, playground_crates) {
// update the play buttons after receiving the response
update_play_button(playground_block, playground_crates);
// and install on change listener to dynamically update ACE editors
if (window.ace) {
const code_block = playground_block.querySelector('code');
if (code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
editor.addEventListener('change', () => {
update_play_button(playground_block, playground_crates);
});
// add Ctrl-Enter command to execute rust code
editor.commands.addCommand({
name: 'run',
bindKey: {
win: 'Ctrl-Enter',
mac: 'Ctrl-Enter',
},
exec: _editor => run_rust_code(playground_block),
});
}
}
}
// updates the visibility of play button based on `no_run` class and
// used crates vs ones available on https://play.rust-lang.org
function update_play_button(pre_block, playground_crates) {
const play_button = pre_block.querySelector('.play-button');
// skip if code is `no_run`
if (pre_block.querySelector('code').classList.contains('no_run')) {
play_button.classList.add('hidden');
return;
}
// get list of `extern crate`'s from snippet
const txt = playground_text(pre_block);
const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
const snippet_crates = [];
let item;
while (item = re.exec(txt)) {
snippet_crates.push(item[1]);
}
// check if all used crates are available on play.rust-lang.org
const all_available = snippet_crates.every(function(elem) {
return playground_crates.indexOf(elem) > -1;
});
if (all_available) {
play_button.classList.remove('hidden');
play_button.hidden = false;
} else {
play_button.classList.add('hidden');
}
}
function run_rust_code(code_block) {
let result_block = code_block.querySelector('.result');
if (!result_block) {
result_block = document.createElement('code');
result_block.className = 'result hljs language-bash';
code_block.append(result_block);
}
const text = playground_text(code_block);
const classes = code_block.querySelector('code').classList;
let edition = '2015';
classes.forEach(className => {
if (className.startsWith('edition')) {
edition = className.slice(7);
}
});
const params = {
version: 'stable',
optimize: '0',
code: text,
edition: edition,
};
if (text.indexOf('#![feature') !== -1) {
params.version = 'nightly';
}
result_block.innerText = 'Running...';
fetch_with_timeout('https://play.rust-lang.org/evaluate.json', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
body: JSON.stringify(params),
})
.then(response => response.json())
.then(response => {
if (response.result.trim() === '') {
result_block.innerText = 'No output';
result_block.classList.add('result-no-output');
} else {
result_block.innerText = response.result;
result_block.classList.remove('result-no-output');
}
})
.catch(error => result_block.innerText = 'Playground Communication: ' + error.message);
}
// Syntax highlighting Configuration
hljs.configure({
tabReplace: ' ', // 4 spaces
languages: [], // Languages used for auto-detection
});
const code_nodes = Array
.from(document.querySelectorAll('code'))
// Don't highlight `inline code` blocks in headers.
.filter(function(node) {
return !node.parentElement.classList.contains('header');
});
if (window.ace) {
// language-rust class needs to be removed for editable
// blocks or highlightjs will capture events
code_nodes
.filter(function(node) {
return node.classList.contains('editable');
})
.forEach(function(block) {
block.classList.remove('language-rust');
});
code_nodes
.filter(function(node) {
return !node.classList.contains('editable');
})
.forEach(function(block) {
hljs.highlightBlock(block);
});
} else {
code_nodes.forEach(function(block) {
hljs.highlightBlock(block);
});
}
// Adding the hljs class gives code blocks the color css
// even if highlighting doesn't apply
code_nodes.forEach(function(block) {
block.classList.add('hljs');
});
Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) {
const lines = Array.from(block.querySelectorAll('.boring'));
// If no lines were hidden, return
if (!lines.length) {
return;
}
block.classList.add('hide-boring');
const buttons = document.createElement('div');
buttons.className = 'buttons';
buttons.innerHTML = '<button title="Show hidden lines" \
aria-label="Show hidden lines"></button>';
buttons.firstChild.innerHTML = document.getElementById('fa-eye').innerHTML;
// add expand button
const pre_block = block.parentNode;
pre_block.insertBefore(buttons, pre_block.firstChild);
buttons.firstChild.addEventListener('click', function(e) {
if (this.title === 'Show hidden lines') {
this.innerHTML = document.getElementById('fa-eye-slash').innerHTML;
this.title = 'Hide lines';
this.setAttribute('aria-label', e.target.title);
block.classList.remove('hide-boring');
} else if (this.title === 'Hide lines') {
this.innerHTML = document.getElementById('fa-eye').innerHTML;
this.title = 'Show hidden lines';
this.setAttribute('aria-label', e.target.title);
block.classList.add('hide-boring');
}
});
});
if (window.playground_copyable) {
Array.from(document.querySelectorAll('pre code')).forEach(function(block) {
const pre_block = block.parentNode;
if (!pre_block.classList.contains('playground')) {
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const clipButton = document.createElement('button');
clipButton.className = 'clip-button';
clipButton.title = 'Copy to clipboard';
clipButton.setAttribute('aria-label', clipButton.title);
clipButton.innerHTML = '<i class="tooltiptext"></i>';
buttons.insertBefore(clipButton, buttons.firstChild);
}
});
}
// Process playground code blocks
Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) {
// Add play button
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const runCodeButton = document.createElement('button');
runCodeButton.className = 'play-button';
runCodeButton.hidden = true;
runCodeButton.title = 'Run this code';
runCodeButton.setAttribute('aria-label', runCodeButton.title);
runCodeButton.innerHTML = document.getElementById('fa-play').innerHTML;
buttons.insertBefore(runCodeButton, buttons.firstChild);
runCodeButton.addEventListener('click', () => {
run_rust_code(pre_block);
});
if (window.playground_copyable) {
const copyCodeClipboardButton = document.createElement('button');
copyCodeClipboardButton.className = 'clip-button';
copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
copyCodeClipboardButton.title = 'Copy to clipboard';
copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
}
const code_block = pre_block.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const undoChangesButton = document.createElement('button');
undoChangesButton.className = 'reset-button';
undoChangesButton.title = 'Undo changes';
undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
undoChangesButton.innerHTML +=
document.getElementById('fa-clock-rotate-left').innerHTML;
buttons.insertBefore(undoChangesButton, buttons.firstChild);
undoChangesButton.addEventListener('click', function() {
const editor = window.ace.edit(code_block);
editor.setValue(editor.originalCode);
editor.clearSelection();
});
}
});
})();
(function themes() {
const html = document.querySelector('html');
const themeToggleButton = document.getElementById('mdbook-theme-toggle');
const themePopup = document.getElementById('mdbook-theme-list');
const themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
const themeIds = [];
themePopup.querySelectorAll('button.theme').forEach(function(el) {
themeIds.push(el.id);
});
const stylesheets = {
ayuHighlight: document.querySelector('#mdbook-ayu-highlight-css'),
tomorrowNight: document.querySelector('#mdbook-tomorrow-night-css'),
highlight: document.querySelector('#mdbook-highlight-css'),
};
function showThemes() {
themePopup.style.display = 'block';
themeToggleButton.setAttribute('aria-expanded', true);
themePopup.querySelector('button#mdbook-theme-' + get_theme()).focus();
}
function updateThemeSelected() {
themePopup.querySelectorAll('.theme-selected').forEach(function(el) {
el.classList.remove('theme-selected');
});
const selected = get_saved_theme() ?? 'default_theme';
let element = themePopup.querySelector('button#mdbook-theme-' + selected);
if (element === null) {
// Fall back in case there is no "Default" item.
element = themePopup.querySelector('button#mdbook-theme-' + get_theme());
}
element.classList.add('theme-selected');
}
function hideThemes() {
themePopup.style.display = 'none';
themeToggleButton.setAttribute('aria-expanded', false);
themeToggleButton.focus();
}
function get_saved_theme() {
let theme = null;
try {
theme = localStorage.getItem('mdbook-theme');
} catch {
// ignore error.
}
return theme;
}
function delete_saved_theme() {
localStorage.removeItem('mdbook-theme');
}
function get_theme() {
const theme = get_saved_theme();
if (theme === null || theme === undefined || !themeIds.includes('mdbook-theme-' + theme)) {
if (typeof default_dark_theme === 'undefined') {
// A customized index.hbs might not define this, so fall back to
// old behavior of determining the default on page load.
return default_theme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches
? default_dark_theme
: default_light_theme;
} else {
return theme;
}
}
let previousTheme = default_theme;
function set_theme(theme, store = true) {
let ace_theme;
if (theme === 'coal' || theme === 'navy') {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = false;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else if (theme === 'ayu') {
stylesheets.ayuHighlight.disabled = false;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = false;
ace_theme = 'ace/theme/dawn';
}
setTimeout(function() {
themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
}, 1);
if (window.ace && window.editors) {
window.editors.forEach(function(editor) {
editor.setTheme(ace_theme);
});
}
if (store) {
try {
localStorage.setItem('mdbook-theme', theme);
} catch {
// ignore error.
}
}
html.classList.remove(previousTheme);
html.classList.add(theme);
previousTheme = theme;
updateThemeSelected();
}
const query = window.matchMedia('(prefers-color-scheme: dark)');
query.onchange = function() {
set_theme(get_theme(), false);
};
// Set theme.
set_theme(get_theme(), false);
themeToggleButton.addEventListener('click', function() {
if (themePopup.style.display === 'block') {
hideThemes();
} else {
showThemes();
}
});
themePopup.addEventListener('click', function(e) {
let theme;
if (e.target.className === 'theme') {
theme = e.target.id;
} else if (e.target.parentElement.className === 'theme') {
theme = e.target.parentElement.id;
} else {
return;
}
theme = theme.replace(/^mdbook-theme-/, '');
if (theme === 'default_theme' || theme === null) {
delete_saved_theme();
set_theme(get_theme(), false);
} else {
set_theme(theme);
}
});
themePopup.addEventListener('focusout', function(e) {
// e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
if (!!e.relatedTarget &&
!themeToggleButton.contains(e.relatedTarget) &&
!themePopup.contains(e.relatedTarget)
) {
hideThemes();
}
});
// Should not be needed, but it works around an issue on macOS & iOS:
// https://github.com/rust-lang/mdBook/issues/628
document.addEventListener('click', function(e) {
if (themePopup.style.display === 'block' &&
!themeToggleButton.contains(e.target) &&
!themePopup.contains(e.target)
) {
hideThemes();
}
});
document.addEventListener('keydown', function(e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
return;
}
if (!themePopup.contains(e.target)) {
return;
}
let li;
switch (e.key) {
case 'Escape':
e.preventDefault();
hideThemes();
break;
case 'ArrowUp':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.previousElementSibling) {
li.previousElementSibling.querySelector('button').focus();
}
break;
case 'ArrowDown':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.nextElementSibling) {
li.nextElementSibling.querySelector('button').focus();
}
break;
case 'Home':
e.preventDefault();
themePopup.querySelector('li:first-child button').focus();
break;
case 'End':
e.preventDefault();
themePopup.querySelector('li:last-child button').focus();
break;
}
});
})();
(function sidebar() {
const sidebar = document.getElementById('mdbook-sidebar');
const sidebarLinks = document.querySelectorAll('#mdbook-sidebar a');
const sidebarToggleButton = document.getElementById('mdbook-sidebar-toggle');
const sidebarResizeHandle = document.getElementById('mdbook-sidebar-resize-handle');
const sidebarCheckbox = document.getElementById('mdbook-sidebar-toggle-anchor');
let firstContact = null;
/* Because we cannot change the `display` using only CSS after/before the transition, we
need JS to do it. We change the display to prevent the browsers search to find text inside
the collapsed sidebar. */
if (!document.documentElement.classList.contains('sidebar-visible')) {
sidebar.style.display = 'none';
}
sidebar.addEventListener('transitionend', () => {
/* We only change the display to "none" if we're collapsing the sidebar. */
if (!sidebarCheckbox.checked) {
sidebar.style.display = 'none';
}
});
sidebarToggleButton.addEventListener('click', () => {
/* To allow the sidebar expansion animation, we first need to put back the display. */
if (!sidebarCheckbox.checked) {
sidebar.style.display = '';
// Workaround for Safari skipping the animation when changing
// `display` and a transform in the same event loop. This forces a
// reflow after updating the display.
sidebar.offsetHeight;
}
});
function showSidebar() {
document.documentElement.classList.add('sidebar-visible');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', 0);
});
sidebarToggleButton.setAttribute('aria-expanded', true);
sidebar.setAttribute('aria-hidden', false);
try {
localStorage.setItem('mdbook-sidebar', 'visible');
} catch {
// Ignore error.
}
}
function hideSidebar() {
document.documentElement.classList.remove('sidebar-visible');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', -1);
});
sidebarToggleButton.setAttribute('aria-expanded', false);
sidebar.setAttribute('aria-hidden', true);
try {
localStorage.setItem('mdbook-sidebar', 'hidden');
} catch {
// Ignore error.
}
}
// Toggle sidebar
sidebarCheckbox.addEventListener('change', function sidebarToggle() {
if (sidebarCheckbox.checked) {
const current_width = parseInt(
document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10);
if (current_width < 150) {
document.documentElement.style.setProperty('--sidebar-target-width', '150px');
}
showSidebar();
} else {
hideSidebar();
}
});
sidebarResizeHandle.addEventListener('mousedown', initResize, false);
function initResize() {
window.addEventListener('mousemove', resize, false);
window.addEventListener('mouseup', stopResize, false);
document.documentElement.classList.add('sidebar-resizing');
}
function resize(e) {
let pos = e.clientX - sidebar.offsetLeft;
if (pos < 20) {
hideSidebar();
} else {
if (!document.documentElement.classList.contains('sidebar-visible')) {
showSidebar();
}
pos = Math.min(pos, window.innerWidth - 100);
document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px');
}
}
//on mouseup remove windows functions mousemove & mouseup
function stopResize() {
document.documentElement.classList.remove('sidebar-resizing');
window.removeEventListener('mousemove', resize, false);
window.removeEventListener('mouseup', stopResize, false);
}
document.addEventListener('touchstart', function(e) {
firstContact = {
x: e.touches[0].clientX,
time: Date.now(),
};
}, { passive: true });
document.addEventListener('touchmove', function(e) {
if (!firstContact) {
return;
}
const curX = e.touches[0].clientX;
const xDiff = curX - firstContact.x,
tDiff = Date.now() - firstContact.time;
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) {
showSidebar();
} else if (xDiff < 0 && curX < 300) {
hideSidebar();
}
firstContact = null;
}
}, { passive: true });
})();
(function chapterNavigation() {
function zoomOutImages() {
for (const elem of Array.from(document.querySelectorAll('input.checkbox-img'))) {
elem.checked = false;
}
}
document.addEventListener('keydown', function(e) {
if (e.altKey ||
e.ctrlKey ||
e.metaKey ||
window.search && window.search.hasFocus() ||
mdbook_something_else_has_focus(e)
) {
return;
}
const html = document.querySelector('html');
function next() {
const nextButton = document.querySelector('.nav-chapters.next');
if (nextButton) {
window.location.href = nextButton.href;
}
}
function prev() {
const previousButton = document.querySelector('.nav-chapters.previous');
if (previousButton) {
window.location.href = previousButton.href;
}
}
function showHelp() {
const container = document.getElementById('mdbook-help-container');
const overlay = document.getElementById('mdbook-help-popup');
container.style.display = 'flex';
// Clicking outside the popup will dismiss it.
const mouseHandler = event => {
if (overlay.contains(event.target)) {
return;
}
if (event.button !== 0) {
return;
}
event.preventDefault();
event.stopPropagation();
document.removeEventListener('mousedown', mouseHandler);
hideHelp();
};
// Pressing esc will dismiss the popup.
const escapeKeyHandler = event => {
if (event.key === 'Escape') {
event.preventDefault();
event.stopPropagation();
document.removeEventListener('keydown', escapeKeyHandler, true);
hideHelp();
}
};
document.addEventListener('keydown', escapeKeyHandler, true);
document.getElementById('mdbook-help-container')
.addEventListener('mousedown', mouseHandler);
}
function hideHelp() {
document.getElementById('mdbook-help-container').style.display = 'none';
}
// Usually needs the Shift key to be pressed
switch (e.key) {
case '?':
e.preventDefault();
showHelp();
break;
case 'Escape':
zoomOutImages();
break;
}
// Rest of the keys are only active when the Shift key is not pressed
if (e.shiftKey) {
return;
}
switch (e.key) {
case 'ArrowRight':
e.preventDefault();
if (html.dir === 'rtl') {
prev();
} else {
next();
}
break;
case 'ArrowLeft':
e.preventDefault();
if (html.dir === 'rtl') {
next();
} else {
prev();
}
break;
}
});
})();
(function clipboard() {
const clipButtons = document.querySelectorAll('.clip-button');
function hideTooltip(elem) {
elem.firstChild.innerText = '';
elem.className = 'clip-button';
}
function showTooltip(elem, msg) {
elem.firstChild.innerText = msg;
elem.className = 'clip-button tooltipped';
}
const clipboardSnippets = new ClipboardJS('.clip-button', {
text: function(trigger) {
hideTooltip(trigger);
const playground = trigger.closest('pre');
return playground_text(playground, false);
},
});
Array.from(clipButtons).forEach(function(clipButton) {
clipButton.addEventListener('mouseout', function(e) {
hideTooltip(e.currentTarget);
});
});
clipboardSnippets.on('success', function(e) {
e.clearSelection();
showTooltip(e.trigger, 'Copied!');
});
clipboardSnippets.on('error', function(e) {
showTooltip(e.trigger, 'Clipboard error!');
});
})();
(function scrollToTop() {
const menuTitle = document.querySelector('.menu-title');
menuTitle.addEventListener('click', function() {
document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
});
})();
(function controllMenu() {
const menu = document.getElementById('mdbook-menu-bar');
(function controllPosition() {
let scrollTop = document.scrollingElement.scrollTop;
let prevScrollTop = scrollTop;
const minMenuY = -menu.clientHeight - 50;
// When the script loads, the page can be at any scroll (e.g. if you refresh it).
menu.style.top = scrollTop + 'px';
// Same as parseInt(menu.style.top.slice(0, -2), but faster
let topCache = menu.style.top.slice(0, -2);
menu.classList.remove('sticky');
let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
document.addEventListener('scroll', function() {
scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
// `null` means that it doesn't need to be updated
let nextSticky = null;
let nextTop = null;
const scrollDown = scrollTop > prevScrollTop;
const menuPosAbsoluteY = topCache - scrollTop;
if (scrollDown) {
nextSticky = false;
if (menuPosAbsoluteY > 0) {
nextTop = prevScrollTop;
}
} else {
if (menuPosAbsoluteY > 0) {
nextSticky = true;
} else if (menuPosAbsoluteY < minMenuY) {
nextTop = prevScrollTop + minMenuY;
}
}
if (nextSticky === true && stickyCache === false) {
menu.classList.add('sticky');
stickyCache = true;
} else if (nextSticky === false && stickyCache === true) {
menu.classList.remove('sticky');
stickyCache = false;
}
if (nextTop !== null) {
menu.style.top = nextTop + 'px';
topCache = nextTop;
}
prevScrollTop = scrollTop;
}, { passive: true });
})();
(function controllBorder() {
function updateBorder() {
if (menu.offsetTop === 0) {
menu.classList.remove('bordered');
} else {
menu.classList.add('bordered');
}
}
updateBorder();
document.addEventListener('scroll', updateBorder, { passive: true });
})();
})();
View File
-1
View File
@@ -1 +0,0 @@
attribute = "buildbot"
-45
View File
@@ -1,45 +0,0 @@
{
lib,
nix,
runCommand,
}:
let
home-manager =
with lib.fileset;
toSource {
root = ../.;
fileset = (fileFilter (file: file.hasExt "nix") ../.);
};
parseLog = "$TMPDIR/nix-parse.log";
in
runCommand "nix-parse-${nix.name}"
{
nativeBuildInputs = [
nix
];
}
''
export NIX_STORE_DIR=$TMPDIR/store
export NIX_STATE_DIR=$TMPDIR/state
nix-store --init
cd "${home-manager}"
# This will only show the first parse error, not all of them. That's fine, because
# the other CI jobs will report in more detail. This job is about checking parsing
# across different implementations / versions, not about providing the best DX.
# Returning all parse errors requires significantly more resources.
if ! find . -type f -iname '*.nix' | xargs -P $(nproc) nix-instantiate --parse 2> "${parseLog}" > /dev/null; then
cat "${parseLog}" >&2
echo "Parse failed in nix-instantiate." >&2
exit 1
fi
if grep "warning" "${parseLog}"; then
cat "${parseLog}" >&2
echo "Failing due to warnings in stderr" >&2
exit 1
fi
touch $out
''
+7
View File
File diff suppressed because one or more lines are too long
+256
View File
@@ -0,0 +1,256 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Contributing - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-e96d0476.css">
<link rel="stylesheet" href="css/chrome-d279d366.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="ch-contributing"></a></p>
<h1 id="contributing"><a class="header" href="#contributing">Contributing</a></h1>
<p>Contributions to Home Manager are very welcome. To make the process as
smooth as possible for both you and the Home Manager maintainers we
provide some guidelines that we ask you to follow. See <a href="contributing/getting-started.html#sec-contrib-getting-started">Getting
started</a> for information on how to set up
a suitable development environment and <a href="contributing/guidelines.html#sec-guidelines">Guidelines</a> for
the actual guidelines.</p>
<p>This text is mainly directed at those who would like to make code
contributions to Home Manager. If you just want to report a bug then
first look among the already <a href="https://github.com/nix-community/home-manager/issues">open
issues</a>, if you
find one matching yours then feel free to comment on it to add any
additional information you may have. If no matching issue exists then go
to the <a href="https://github.com/nix-community/home-manager/issues/new">new
issue</a> page
and write a description of your problem. Include as much information as
you can, ideally also include relevant excerpts from your Home Manager
configuration.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="writing-modules/types.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="contributing/getting-started.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="writing-modules/types.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="contributing/getting-started.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-09f2665d.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+272
View File
@@ -0,0 +1,272 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Getting started - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-contrib-getting-started"></a></p>
<h1 id="getting-started"><a class="header" href="#getting-started">Getting started</a></h1>
<p>If you have not previously forked Home Manager then you need to do that
first. Have a look at GitHubs <a href="https://help.github.com/articles/fork-a-repo/">Fork a
repo</a> for instructions on
how to do this.</p>
<p>Once you have a fork of Home Manager you should create a branch starting
at the most recent <code>master</code> branch. Give your branch a reasonably
descriptive name. Commit your changes to this branch and when you are
happy with the result and it fulfills <a href="guidelines.html#sec-guidelines">Guidelines</a> then
push the branch to GitHub and <a href="https://help.github.com/articles/creating-a-pull-request/">create a pull
request</a>.</p>
<p>Assuming your clone is at <code>$HOME/devel/home-manager</code> then you can make
the <code>home-manager</code> command use it by either</p>
<ol>
<li>
<p>overriding the default path by using the <code>-I</code> command line option:</p>
<pre><code class="language-shell">$ home-manager -I home-manager=$HOME/devel/home-manager
</code></pre>
<p>or, if using <a href="../nix-flakes/standalone.html#sec-flakes-standalone">flakes</a>:</p>
<pre><code class="language-shell">$ home-manager --override-input home-manager ~/devel/home-manager
</code></pre>
<p>or</p>
</li>
<li>
<p>changing the default path by ensuring your configuration includes</p>
<pre><code class="language-nix">programs.home-manager.enable = true;
programs.home-manager.path = "$HOME/devel/home-manager";
</code></pre>
<p>and running <code>home-manager switch</code> to activate the change.
Afterwards, <code>home-manager build</code> and <code>home-manager switch</code> will use
your cloned repository.</p>
</li>
</ol>
<p>The first option is good if you only temporarily want to use your clone.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../contributing.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/guidelines.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../contributing.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/guidelines.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+479
View File
@@ -0,0 +1,479 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Guidelines - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-guidelines"></a></p>
<h1 id="guidelines"><a class="header" href="#guidelines">Guidelines</a></h1>
<p>If your contribution satisfy the following rules then there is a good
chance it will be merged without too much trouble. The rules are
enforced by the Home Manager maintainers and to a lesser extent the Home
Manager CI system.</p>
<p>If you are uncertain how these rules affect the change you would like to
make then feel free to start a discussion in the
<a href="https://webchat.oftc.net/?channels=home-manager">#home-manager</a> IRC
channel, ideally before you start developing.</p>
<p><a id="sec-guidelines-back-compat"></a></p>
<h2 id="maintain-backward-compatibility"><a class="header" href="#maintain-backward-compatibility">Maintain backward compatibility</a></h2>
<p>Your contribution should not cause another users existing configuration
to break unless there is a very good reason and the change should be
announced to the user through an
<a href="https://nixos.org/manual/nixos/stable/index.html#sec-assertions">assertion</a>
or similar.</p>
<p>Remember that Home Manager is used in many different environments and
you should consider how your change may effect others. For example,</p>
<ul>
<li>
<p>Does your change work for people that do not use NixOS? Consider
other GNU/Linux distributions and macOS.</p>
</li>
<li>
<p>Does your change work for people whose configuration is built on one
system and deployed on another system?</p>
</li>
</ul>
<p><a id="sec-guidelines-forward-compat"></a></p>
<h2 id="keep-forward-compatibility-in-mind"><a class="header" href="#keep-forward-compatibility-in-mind">Keep forward compatibility in mind</a></h2>
<p>The master branch of Home Manager tracks the unstable channel of
Nixpkgs, which may update package versions at any time. It is therefore
important to consider how a package update may affect your code and try
to reduce the risk of breakage.</p>
<p>The most effective way to reduce this risk is to follow the advice in
<a href="#sec-guidelines-valuable-options">Add only valuable options</a>.</p>
<p><a id="sec-guidelines-valuable-options"></a></p>
<h2 id="add-only-valuable-options"><a class="header" href="#add-only-valuable-options">Add only valuable options</a></h2>
<p>When creating a new module it is tempting to include every option
supported by the software. This is <em>strongly</em> discouraged. Providing
many options increases maintenance burden and risk of breakage
considerably. This is why only the most <a href="https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md#valuable-options">important software
options</a>
should be modeled explicitly. Less important options should be
expressible through an <code>extraConfig</code> escape hatch.</p>
<p>A good rule of thumb for the first implementation of a module is to only
add explicit options for those settings that absolutely must be set for
the software to function correctly. It follows that a module for
software that provides sensible default values for all settings would
require no explicit options at all.</p>
<p>If the software uses a structured configuration format like a JSON,
YAML, INI, TOML, or even a plain list of key/value pairs then consider
using a <code>settings</code> option as described in <a href="https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md">Nix RFC
42</a>.</p>
<p>These guidelines describe the minimum option design requirements. Before
submitting a module, compare it against the upstream documentation or
source code and verify that the generated files, services, environment
variables, and command line arguments all match the upstream behavior
you intend to expose.</p>
<p>If a module installs a package, try to make the package option nullable,
for example</p>
<pre><code class="language-nix">package = lib.mkPackageOption pkgs "xdg-terminal-exec" { nullable = true; };
</code></pre>
<p>This lets users keep installation outside Home Manager, for example via
<code>apt</code> or because the program is built into macOS, while still using the
module for configuration. Keeping the package non-nullable is fine when
the enabled behavior structurally requires the executable or when
package-less support would make the module significantly more complex.</p>
<p>Avoid generating files for empty settings, null packages, or optional
features that are not configured.</p>
<p>If upstream does not use XDG paths by default but supports changing the
configuration location with an environment variable, for example
<code>FOO_HOME</code>, expose a <code>configDir</code> option and use it to respect
<code>home.preferXdgDirectories</code>.</p>
<p><a id="sec-guidelines-add-tests"></a></p>
<h2 id="add-relevant-tests"><a class="header" href="#add-relevant-tests">Add relevant tests</a></h2>
<p>If at all possible, make sure to add new tests and expand existing tests
so that your change will keep working in the future. See
<a href="tests.html#sec-tests">Tests</a> for more information about the Home Manager test
suite.</p>
<p>All contributed code <em>must</em> pass the test suite.</p>
<p><a id="sec-guidelines-module-maintainer"></a></p>
<h2 id="add-relevant-documentation"><a class="header" href="#add-relevant-documentation">Add relevant documentation</a></h2>
<p>Many code changes require changing the documentation as well. The
documentation is written in
<a href="https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-markup">Nixpkgs-flavoured Markdown</a>.
All text is hosted in Home Managers Git repository.</p>
<p>The HTML version of the manual containing both the module option
descriptions and the documentation of Home Manager can be generated and
opened by typing the following in a shell within a clone of the Home
Manager Git repository:</p>
<pre><code class="language-shell">$ nix-build -A docs.html
$ xdg-open ./result/share/doc/home-manager/index.html
</code></pre>
<p>When you have made changes to a module, it is a good idea to check that
the man page version of the module options looks good:</p>
<pre><code class="language-shell">$ nix-build -A docs.manPages
$ man ./result/share/man/man5/home-configuration.nix.5
</code></pre>
<p><a id="sec-module-auto-importing"></a></p>
<h2 id="module-auto-importing"><a class="header" href="#module-auto-importing">Module Auto-importing</a></h2>
<p>Home Manager automatically imports all modules from the <code>modules/programs/</code> and
<code>modules/services/</code> directories. This auto-importing behavior follows these
rules:</p>
<ul>
<li><strong>Nix files</strong>: All <code>.nix</code> files in these directories are automatically
imported</li>
<li><strong>Directories</strong>: All subdirectories are automatically imported (typically
containing a <code>default.nix</code> file)</li>
<li><strong>Exclusions</strong>: Files and directories starting with an underscore (<code>_</code>) are
excluded from auto-importing</li>
</ul>
<p>This allows for flexible module organization:</p>
<pre><code>modules/programs/
├── git.nix # Single-file module (imported)
├── firefox/ # Multi-file module (imported)
│ ├── default.nix
│ └── addons.nix
├── _experimental.nix # Excluded (starts with _)
└── _wip/ # Excluded directory (starts with _)
└── newfeature.nix
</code></pre>
<p>When adding a new module, simply place it in the appropriate directory
(<code>programs/</code> for user programs, <code>services/</code> for user services) and it will be
automatically discovered and included in the Home Manager module system.</p>
<p><a id="_add_yourself_as_a_module_maintainer"></a></p>
<h2 id="add-yourself-as-a-module-maintainer"><a class="header" href="#add-yourself-as-a-module-maintainer">Add yourself as a module maintainer</a></h2>
<p>Every new module <em>must</em> include a named maintainer using the
<code>meta.maintainers</code> attribute. If you are a user of a module that
currently lacks a maintainer then please consider adopting it.</p>
<p>If you are present in the nixpkgs maintainer list then you can use that
entry. If you are not then you can add yourself to
<code>modules/lib/maintainers.nix</code> in the Home Manager project.</p>
<p>As a maintainer you are expected to respond to issues and
pull-requests associated with your module.</p>
<p>Maintainers are encouraged to join the IRC or Matrix channel and
participate when they have opportunity.</p>
<p><a id="sec-guidelines-code-style"></a></p>
<h2 id="format-your-code"><a class="header" href="#format-your-code">Format your code</a></h2>
<p>Make sure your code is formatted as described in <a href="#sec-code-style">Code
Style</a>. To maintain consistency throughout the project
you are encouraged to browse through existing code and adopt its style
also in new code.</p>
<p><a id="sec-guidelines-commit-message-style"></a></p>
<h2 id="format-your-commit-messages"><a class="header" href="#format-your-commit-messages">Format your commit messages</a></h2>
<p>Similar to <a href="#sec-guidelines-code-style">Format your code</a> we encourage a
consistent commit message format as described in
<a href="#sec-commit-style">Commits</a>.</p>
<p><a id="sec-guidelines-news-style"></a></p>
<h2 id="format-your-news-entries"><a class="header" href="#format-your-news-entries">Format your news entries</a></h2>
<p>If your contribution includes a change that should be communicated to
users of Home Manager then you can add a news entry. The entry must be
formatted as described in <a href="news.html#sec-news">News</a>.</p>
<p>When new modules are added a news entry should be included.</p>
<p>News entries and release notes serve different purposes. Release notes
should be updated separately when a change affects users migrating
between stable releases, such as state version default changes, required
migration steps, or broad behavior changes. See
<a href="release-notes.html#sec-contributing-release-notes">Release Notes</a> and <a href="news.html#sec-news">News</a>
for more details.</p>
<p><a id="sec-guidelines-conditional-modules"></a></p>
<h2 id="use-conditional-modules-and-news"><a class="header" href="#use-conditional-modules-and-news">Use conditional modules and news</a></h2>
<p>Home Manager includes a number of modules that are only usable on some
of the supported platforms. The most common example of platform specific
modules are those that define systemd user services, which only works on
Linux systems.</p>
<p>If you add a module that is platform specific then make sure the module
guards platform-specific configuration with an appropriate condition, for
example <code>pkgs.stdenv.hostPlatform.isLinux</code> or
<code>pkgs.stdenv.hostPlatform.isDarwin</code>. Modules in <code>modules/programs/</code> and
<code>modules/services/</code> are auto-imported, so the platform condition should live
in the module behavior and in any platform-specific tests rather than in a
separate module discovery call.</p>
<p>Similarly, if you are adding a news entry then it should be shown only
to users that may find it relevant, see <a href="news.html#sec-news">News</a> for a
description of conditional news.</p>
<p><a id="sec-guidelines-licensing"></a></p>
<h2 id="mind-the-license"><a class="header" href="#mind-the-license">Mind the license</a></h2>
<p>The Home Manager project is covered by the MIT license and we can only
accept contributions that fall under this license, or are licensed in a
compatible way. When you contribute self written code and documentation
it is assumed that you are doing so under the MIT license.</p>
<p>A potential gotcha with respect to licensing are option descriptions.
Often it is convenient to copy from the upstream software documentation.
When this is done it is important to verify that the license of the
upstream documentation allows redistribution under the terms of the MIT
license.</p>
<p><a id="sec-commit-style"></a></p>
<h2 id="commits"><a class="header" href="#commits">Commits</a></h2>
<p>The commits in your pull request should be reasonably self-contained,
that is, each commit should make sense in isolation. In particular, you
will be asked to amend any commit that introduces syntax errors or
similar problems even if they are fixed in a later commit.</p>
<p>Keep commits atomic and separated by concern. For example, a new
maintainer entry should be a separate first commit, and a shared module
should be committed separately from integrations in existing modules.
Pull requests should not include merge commits or fixup commits.</p>
<p>The commit messages should follow the <a href="https://chris.beams.io/posts/git-commit/#seven-rules">seven
rules</a>, except for
"Capitalize the subject line". We also ask you to include the affected
code component or module in the first line. That is, a commit message
should follow the template</p>
<pre><code>{component}: {description}
{long description}
</code></pre>
<p>where <code>{component}</code> refers to the code component (or module) your change
affects, <code>{description}</code> is a very brief description of your change, and
<code>{long description}</code> is an optional clarifying description. As a rare
exception, if there is no clear component, or your change affects many
components, then the <code>{component}</code> part is optional. See
<a href="#ex-commit-message">example_title</a> for a commit message that fulfills
these requirements.</p>
<p><a id="ex-commit-message"></a></p>
<h2 id="example-commit"><a class="header" href="#example-commit">Example commit</a></h2>
<p>The commit
<a href="https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef">69f8e47e9e74c8d3d060ca22e18246b7f7d988ef</a>
contains the commit message</p>
<pre><code>
starship: allow running in Emacs if vterm is used
The vterm buffer is backed by libvterm and can handle Starship prompts
without issues.
</code></pre>
<p>which ticks all the boxes necessary to be accepted in Home Manager.</p>
<p>Finally, when adding a new module, say <code>programs/foo.nix</code>, we use the
fixed commit format <code>foo: add module</code>. You can, of course, still include
a long description if you wish.</p>
<p><a id="sec-code-style"></a></p>
<h2 id="code-style"><a class="header" href="#code-style">Code Style</a></h2>
<p>The code in Home Manager is formatted by the <a href="https://treefmt.com">treefmt</a> tool
and the formatting is checked in the pull request tests. Run <code>nix fmt</code> or
<code>treefmt</code> (with required formatters which can be found in <code>treefmt.toml</code> in your
<code>$PATH</code>) inside the project repository before submitting your pull request.</p>
<p>Keep lines at a reasonable width, ideally 80 characters or less. This
also applies to string literals.</p>
<p>We prefer <code>lowerCamelCase</code> for variable and attribute names with the
accepted exception of variables directly referencing packages in Nixpkgs
which use a hyphenated style. For example, the Home Manager option
<code>services.gpg-agent.enableSshSupport</code> references the <code>gpg-agent</code> package
in Nixpkgs.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../contributing/getting-started.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/release-notes.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../contributing/getting-started.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/release-notes.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+312
View File
@@ -0,0 +1,312 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>News - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-news"></a></p>
<h1 id="news"><a class="header" href="#news">News</a></h1>
<p>Home Manager includes a system for presenting news to the user. When
making a change you, therefore, have the option to also include an
associated news entry. In general, a news entry should only be added for
truly noteworthy news. For example, a bug fix or new option does
generally not need a news entry.</p>
<p>Release notes and news entries serve different purposes. A news entry is
shown during Home Manager activation and is useful for day-to-day
communication about noteworthy changes, such as a new module, a new
feature, or a specific deprecation. Release notes are read from the
website documentation and should summarize what users need to know before
or during a stable-release upgrade. See
<a href="release-notes.html#sec-contributing-release-notes">Release Notes</a> for guidance on changes
that affect stable-release upgrades.</p>
<p>If you do have a change worthy of a news entry then please add one in
<a href="https://github.com/nix-community/home-manager/blob/master/modules/misc/news"><code>news</code></a>
but you should follow some basic guidelines:</p>
<ul>
<li>
<p>Use the included news entry generator to create a news entry file:</p>
<pre><code class="language-shell">$ nix run .#create-news-entry
</code></pre>
<p>Alternatively, you can directly use the script:</p>
<pre><code class="language-shell">$ nix-shell -A dev --run modules/misc/news/create-news-entry.sh
</code></pre>
<p>This will create a new file inside the <code>modules/misc/news</code> directory
with some placeholder information that you can edit.</p>
</li>
<li>
<p>The entry condition should be as specific as possible for changes
affecting existing functionality. For example, if you are changing
or deprecating a specific option then you could restrict the news to
those users who actually use this option. Prefer a targeted
condition over skipping useful news only to avoid notifying
unaffected users.</p>
</li>
<li>
<p>Wrap the news message so that it will fit in the typical terminal,
that is, at most 80 characters wide. Ideally a bit less.</p>
</li>
<li>
<p>Unlike commit messages, news will be read without any connection to
the Home Manager source code. It is therefore important to make the
message understandable in isolation and to those who do not have
knowledge of the Home Manager internals. To this end it should be
written in more descriptive, prose like way.</p>
</li>
<li>
<p>If you refer to an option then write its full attribute path. That
is, instead of writing</p>
<pre><code>The option 'foo' has been deprecated, please use 'bar' instead.
</code></pre>
<p>it should read</p>
<pre><code>The option 'services.myservice.foo' has been deprecated, please
use 'services.myservice.bar' instead.
</code></pre>
</li>
<li>
<p>A new module, say <code>foo.nix</code>, should always include a news entry that
has a message along the lines of</p>
<pre><code>A new module is available: 'services.foo'.
</code></pre>
<p>Since this news announces newly available functionality, its
condition should not require <code>config.services.foo.enable</code>; otherwise
users who may want the new module will not see the news.</p>
<p>If the module is platform specific, e.g., a service module using
systemd, then a condition like</p>
<pre><code class="language-nix">condition = hostPlatform.isLinux;
</code></pre>
<p>should be added to avoid showing the news on unsupported platforms.
Use the <code>create-news-entry</code> generator described above to scaffold
this entry as part of your contribution.</p>
</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../contributing/release-notes.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/tests.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../contributing/release-notes.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/tests.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+259
View File
@@ -0,0 +1,259 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Release Notes - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-contributing-release-notes"></a></p>
<h1 id="release-notes"><a class="header" href="#release-notes">Release Notes</a></h1>
<p>Home Manager release notes are published as part of the website documentation in
<code>docs/release-notes/rl-*.md</code>. They are intended for users migrating from one
stable release to another.</p>
<p>A change should be mentioned in the release notes when it affects migration
between stable releases. This includes changes that require user action or
awareness during an upgrade, such as:</p>
<ul>
<li>breaking changes;</li>
<li>default changes guarded by <code>home.stateVersion</code>;</li>
<li>required migration steps;</li>
<li>broad behavior changes across platform or integration boundaries;</li>
<li>compatibility changes that can affect existing configurations.</li>
</ul>
<p>Do not use the presence or absence of a news entry to decide whether a change
belongs in the release notes. A change can require a news entry, a release note,
both, or neither.</p>
<p>When preparing a release, review the commits since the previous stable release
and update the upcoming release note file with the migration impact. Prefer
concise user-facing descriptions that name the affected option paths and explain
required action.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../contributing/guidelines.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/news.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../contributing/guidelines.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../contributing/news.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+440
View File
@@ -0,0 +1,440 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Tests - Home Manager Manual</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-e96d0476.css">
<link rel="stylesheet" href="../css/chrome-d279d366.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-542a1820.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-a22c24be.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Home Manager Manual</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/nix-community/home-manager" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<p><a id="sec-tests"></a></p>
<h1 id="tests"><a class="header" href="#tests">Tests</a></h1>
<p>Home Manager includes a basic test suite and it is highly recommended to
include at least one test when adding a module. Tests are typically in
the form of "golden tests" where, for example, a generated
configuration file is compared to a known correct file.</p>
<p>It is relatively easy to create tests by modeling the existing tests,
found in the <code>tests</code> project directory.</p>
<p><a id="sec-tests-basic"></a></p>
<h2 id="writing-basic-tests"><a class="header" href="#writing-basic-tests">Writing Basic Tests</a></h2>
<p>Home Manager tests use the <strong>NMT</strong> framework, which provides
a set of assertion functions to verify that modules generate the expected files
and configurations. Tests are written as Nix expressions that define both the
Home Manager configuration and the test assertions.</p>
<p><a id="sec-tests-structure"></a></p>
<h3 id="test-structure"><a class="header" href="#test-structure">Test Structure</a></h3>
<p>A basic test file structure looks like:</p>
<pre><code class="language-nix">{
# Home Manager configuration
programs.myprogram = {
enable = true;
settings = {
option = "value";
};
};
# NMT test script with assertions
nmt.script = ''
assertFileExists "home-files/.config/myprogram/config.toml"
assertFileContent "home-files/.config/myprogram/config.toml" ${./expected-config.toml}
'';
}
</code></pre>
<p><a id="sec-tests-organization"></a></p>
<h3 id="test-organization"><a class="header" href="#test-organization">Test Organization</a></h3>
<p>Tests are organized in the <code>tests</code> directory structure:</p>
<ul>
<li><code>tests/modules/programs/myprogram/default.nix</code> - Lists all test cases for the module</li>
<li><code>tests/modules/programs/myprogram/basic-configuration.nix</code> - A basic test case</li>
<li><code>tests/modules/programs/myprogram/expected-config.toml</code> - Expected output file</li>
</ul>
<p>The <code>default.nix</code> file should list all test cases:</p>
<pre><code class="language-nix">{
myprogram-basic-configuration = ./basic-configuration.nix;
myprogram-empty-settings = ./empty-settings.nix;
}
</code></pre>
<p>Prefer keeping related assertions in as few test files as practical.
Exercising several cases in one evaluation keeps the test suite cheaper
to evaluate and reduces maintenance burden. Split cases into separate
files when they need incompatible module configuration, platform
conditions, expected assertion failures, or otherwise cannot share one
evaluation.</p>
<p><a id="sec-tests-assertions"></a></p>
<h3 id="common-nmt-assertions"><a class="header" href="#common-nmt-assertions">Common NMT Assertions</a></h3>
<p>NMT provides several assertion functions:</p>
<ul>
<li><code>assertFileExists "path"</code> - Verify a file was created</li>
<li><code>assertPathNotExists "path"</code> - Verify a file was NOT created</li>
<li><code>assertFileContent "path" expected-file</code> - Compare file contents</li>
<li><code>assertFileRegex "path" "regex"</code> - Check file matches regex</li>
</ul>
<p>For a full reference to the functions available in test scripts, you can look at NMTs
<a href="https://git.sr.ht/~rycee/nmt/tree/master/item/bash-lib">bash-lib</a>.</p>
<p><a id="sec-tests-examples"></a></p>
<h3 id="practical-examples"><a class="header" href="#practical-examples">Practical Examples</a></h3>
<p>Here are some real-world examples of common test patterns:</p>
<p><strong>Testing that a configuration file is generated:</strong></p>
<pre><code class="language-nix">{
programs.alacritty = {
enable = true;
settings.font.size = 12;
};
nmt.script = ''
assertFileExists "home-files/.config/alacritty/alacritty.yml"
assertFileContains "home-files/.config/alacritty/alacritty.yml" "size: 12"
'';
}
</code></pre>
<p><strong>Testing that no files are created when disabled:</strong></p>
<pre><code class="language-nix">{
programs.alacritty.enable = false;
nmt.script = ''
assertPathNotExists "home-files/.config/alacritty"
'';
}
</code></pre>
<p><strong>Testing exact file content against expected output:</strong></p>
<pre><code class="language-nix">{
programs.fastfetch = {
enable = true;
settings.display.color = "blue";
};
nmt.script =
let
configFile = "home-files/.config/fastfetch/config.jsonc";
in
''
assertFileExists "${configFile}"
assertFileContent "${configFile}" ${./expected-config.jsonc}
'';
}
</code></pre>
<p><strong>Testing multiple conditions in one test:</strong></p>
<pre><code class="language-nix">{
programs.myprogram = {
enable = true;
configFile = "custom.conf";
extraConfig = "debug = true";
};
nmt.script = ''
assertFileExists "home-files/.config/myprogram/custom.conf"
assertFileRegex "home-files/.config/myprogram/custom.conf" "debug = true"
assertFileRegex "home-files/.config/myprogram/custom.conf" "^# Generated by Home Manager"
'';
}
</code></pre>
<p><a id="sec-tests-platform-specific"></a></p>
<h3 id="platform-specific-tests"><a class="header" href="#platform-specific-tests">Platform-Specific Tests</a></h3>
<p>When a module is platform-specific (Linux-only or Darwin-only), the tests <code>default.nix</code>
file should use <code>lib.optionalAttrs</code> to conditionally expose tests based on the platform.
This prevents evaluation errors on unsupported platforms during the test suite runs.</p>
<p><strong>Linux-only module tests:</strong></p>
<pre><code class="language-nix">{ lib, pkgs, ... }:
lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
rofi-valid-config = ./valid-config.nix;
rofi-custom-theme = ./custom-theme.nix;
}
</code></pre>
<p><strong>Darwin-only module tests:</strong></p>
<pre><code class="language-nix">{ lib, pkgs, ... }:
lib.optionalAttrs pkgs.stdenv.hostPlatform.isDarwin {
sketchybar-basic = ./basic-configuration.nix;
sketchybar-lua-config = ./lua-config.nix;
}
</code></pre>
<p>For cross-platform modules that have packages which need to be stubbed on Darwin,
add the package names to <code>tests/darwinScrublist.nix</code> to prevent build failures
during cross-platform test runs.</p>
<p>On Linux, packages are automatically scrubbed by the test infrastructure,
so tests should normally use the modules default package. Use
<code>test.stubs</code> or <code>config.lib.test.mkStubPackage</code> only when the automatic
scrubbing does not model the behavior that the test needs, such as a
package with additional files or a non-default executable layout.</p>
<p><a id="sec-tests-command"></a></p>
<h2 id="using-the-tests-command"><a class="header" href="#using-the-tests-command">Using the tests command</a></h2>
<p>Home Manager provides a convenient <code>tests</code> command for discovering and running tests:</p>
<pre><code class="language-shell"># List all available tests
$ nix run .#tests -- -l
# List tests matching a pattern
$ nix run .#tests -- -l alacritty
# Run all tests matching a pattern
$ nix run .#tests -- alacritty
# Run a specific test
$ nix run .#tests -- test-alacritty-empty-settings
# List integration tests
$ nix run .#tests -- -t -l
# Run all integration tests
$ nix run .#tests -- -t integration-test-
# Interactive test selection (requires fzf)
$ nix run .#tests -- -i
# Pass additional nix build flags
$ nix run .#tests -- alacritty -- --verbose
</code></pre>
<p>Integration tests are only exposed on Linux. On other platforms, integration
test discovery may report no matching tests.</p>
<p><a id="sec-tests-manual"></a></p>
<h2 id="manual-test-commands"><a class="header" href="#manual-test-commands">Manual test commands</a></h2>
<p>For advanced usage or CI environments, you can also run tests manually using nix build commands.</p>
<p>The full Home Manager test suite can be run by executing</p>
<pre><code class="language-shell">$ nix-build --pure --option allow-import-from-derivation false tests -A build.all
</code></pre>
<p>in the project root. List all test cases through</p>
<pre><code class="language-shell">$ nix run .#tests -- -l
</code></pre>
<p>and run an individual test, for example <code>alacritty-empty-settings</code>,
through</p>
<pre><code class="language-shell">$ nix-build --pure tests --option allow-import-from-derivation false -A build.alacritty-empty-settings
</code></pre>
<p>However, those invocations will impurely source the systems Nixpkgs,
and may cause failures. To run against the Nixpkgs from the <code>flake.lock</code> file,
use instead e.g.</p>
<pre><code class="language-shell">$ nix build .#test-all
</code></pre>
<p>or</p>
<pre><code class="language-shell">$ nix build .#test-alacritty-empty-settings
</code></pre>
<p>Some tests may be marked with <code>enableLegacyIfd</code>, those may be run by run with e.g.</p>
<pre><code class="language-shell">$ nix-build --pure tests --arg enableLegacyIfd true -A build.mytest
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../contributing/news.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../internals.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../contributing/news.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../internals.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-09f2665d.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-609e4cb8.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
+770
View File
@@ -0,0 +1,770 @@
/* CSS for UI elements (a.k.a. chrome) */
html {
scrollbar-color: var(--scrollbar) transparent;
}
#mdbook-searchresults a,
.content a:link,
a:visited,
a > .hljs {
color: var(--links);
}
/*
mdbook-body-container is necessary because mobile browsers don't seem to like
overflow-x on the body tag when there is a <meta name="viewport"> tag.
*/
#mdbook-body-container {
/*
This is used when the sidebar pushes the body content off the side of
the screen on small screens. Without it, dragging on mobile Safari
will want to reposition the viewport in a weird way.
*/
overflow-x: clip;
}
/* Menu Bar */
#mdbook-menu-bar,
#mdbook-menu-bar-hover-placeholder {
z-index: 101;
margin: auto calc(0px - var(--page-padding));
}
#mdbook-menu-bar {
position: relative;
display: flex;
flex-wrap: wrap;
background-color: var(--bg);
border-block-end-color: var(--bg);
border-block-end-width: 1px;
border-block-end-style: solid;
}
#mdbook-menu-bar.sticky,
#mdbook-menu-bar-hover-placeholder:hover + #mdbook-menu-bar,
#mdbook-menu-bar:hover,
html.sidebar-visible #mdbook-menu-bar {
position: -webkit-sticky;
position: sticky;
top: 0 !important;
}
#mdbook-menu-bar-hover-placeholder {
position: sticky;
position: -webkit-sticky;
top: 0;
height: var(--menu-bar-height);
}
#mdbook-menu-bar.bordered {
border-block-end-color: var(--table-border-color);
}
#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
position: relative;
padding: 0 8px;
z-index: 10;
line-height: var(--menu-bar-height);
cursor: pointer;
transition: color 0.5s;
}
@media only screen and (max-width: 420px) {
#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
padding: 0 5px;
}
}
.icon-button {
border: none;
background: none;
padding: 0;
color: inherit;
}
.icon-button .fa-svg {
margin: 0;
}
.right-buttons {
margin: 0 15px;
}
.right-buttons a {
text-decoration: none;
}
.left-buttons {
display: flex;
margin: 0 5px;
}
html:not(.js) .left-buttons button {
display: none;
}
.menu-title {
display: inline-block;
font-weight: 200;
font-size: 2.4rem;
line-height: var(--menu-bar-height);
text-align: center;
margin: 0;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-title {
cursor: pointer;
}
.menu-bar,
.menu-bar:visited,
.nav-chapters,
.nav-chapters:visited,
.mobile-nav-chapters,
.mobile-nav-chapters:visited,
.menu-bar .icon-button,
.menu-bar a .fa-svg {
color: var(--icons);
}
.menu-bar .fa-svg:hover,
.menu-bar .icon-button:hover,
.nav-chapters:hover,
.mobile-nav-chapters .fa-svg:hover {
color: var(--icons-hover);
}
/* Nav Icons */
.nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
position: fixed;
top: 0;
bottom: 0;
margin: 0;
max-width: 150px;
min-width: 90px;
display: flex;
justify-content: center;
align-content: center;
flex-direction: column;
transition: color 0.5s, background-color 0.5s;
}
.nav-chapters:hover {
text-decoration: none;
background-color: var(--theme-hover);
transition: background-color 0.15s, color 0.15s;
}
.nav-chapters.previous {
/* Ensure that the previous arrow does not overlap the resize indicator. */
margin-inline-start: var(--sidebar-resize-indicator-width);
}
.nav-wrapper {
margin-block-start: 50px;
display: none;
}
.mobile-nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
width: 90px;
border-radius: 5px;
background-color: var(--sidebar-bg);
}
/* Only Firefox supports flow-relative values */
.previous { float: left; }
[dir=rtl] .previous { float: right; }
/* Only Firefox supports flow-relative values */
.next {
float: right;
right: var(--page-padding);
}
[dir=rtl] .next {
float: left;
right: unset;
left: var(--page-padding);
}
@media only screen and (max-width: 1080px) {
.nav-wide-wrapper { display: none; }
.nav-wrapper { display: block; }
}
/* sidebar-visible */
@media only screen and (max-width: 1380px) {
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; }
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; }
}
/* Inline code */
:not(pre) > .hljs {
display: inline;
padding: 0.1em 0.3em;
border-radius: 3px;
}
:not(pre):not(a) > .hljs {
color: var(--inline-code-color);
overflow-x: initial;
}
a:hover > .hljs {
text-decoration: underline;
}
pre {
position: relative;
}
pre > .buttons {
position: absolute;
z-index: 100;
right: 0px;
top: 2px;
margin: 0px;
padding: 2px 0px;
color: var(--sidebar-fg);
cursor: pointer;
visibility: hidden;
opacity: 0;
transition: visibility 0.1s linear, opacity 0.1s linear;
}
pre:hover > .buttons {
visibility: visible;
opacity: 1
}
pre > .buttons :hover {
color: var(--sidebar-active);
border-color: var(--icons-hover);
background-color: var(--theme-hover);
}
pre > .buttons button {
cursor: inherit;
margin: 0px 5px;
padding: 2px 3px 0px 4px;
font-size: 23px;
border-style: solid;
border-width: 1px;
border-radius: 4px;
border-color: var(--icons);
background-color: var(--theme-popup-bg);
transition: 100ms;
transition-property: color,border-color,background-color;
color: var(--icons);
}
pre > .buttons button.clip-button {
padding: 2px 4px 0px 6px;
}
pre > .buttons button.clip-button::before {
/* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license
*/
content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \
xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\
<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \
0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \
7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \
2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\
<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\
</svg>');
filter: var(--copy-button-filter);
}
pre > .buttons button.clip-button:hover::before {
filter: var(--copy-button-filter-hover);
}
@media (pointer: coarse) {
pre > .buttons button {
/* On mobile, make it easier to tap buttons. */
padding: 0.3rem 1rem;
}
.sidebar-resize-indicator {
/* Hide resize indicator on devices with limited accuracy */
display: none;
}
}
pre > code {
display: block;
padding: 1rem;
}
/* FIXME: ACE editors overlap their buttons because ACE does absolute
positioning within the code block which breaks padding. The only solution I
can think of is to move the padding to the outer pre tag (or insert a div
wrapper), but that would require fixing a whole bunch of CSS rules.
*/
.hljs.ace_editor {
padding: 0rem 0rem;
}
pre > .result {
margin-block-start: 10px;
}
/* Search */
#mdbook-searchresults a {
text-decoration: none;
}
mark {
border-radius: 2px;
padding-block-start: 0;
padding-block-end: 1px;
padding-inline-start: 3px;
padding-inline-end: 3px;
margin-block-start: 0;
margin-block-end: -1px;
margin-inline-start: -3px;
margin-inline-end: -3px;
background-color: var(--search-mark-bg);
transition: background-color 300ms linear;
cursor: pointer;
}
mark.fade-out {
background-color: rgba(0,0,0,0) !important;
cursor: auto;
}
.searchbar-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
#mdbook-searchbar-outer.searching #mdbook-searchbar {
padding-right: 30px;
}
#mdbook-searchbar-outer .spinner-wrapper {
display: none;
}
#mdbook-searchbar-outer.searching .spinner-wrapper {
display: block;
}
.search-wrapper {
position: relative;
}
.spinner-wrapper {
--spinner-margin: 2px;
position: absolute;
margin-block-start: calc(var(--searchbar-margin-block-start) + var(--spinner-margin));
right: var(--spinner-margin);
top: 0;
bottom: var(--spinner-margin);
padding: 6px;
background-color: var(--bg);
}
#fa-spin {
animation: rotating 2s linear infinite;
display: inline-block;
}
@keyframes rotating {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
#mdbook-searchbar {
width: 100%;
margin-block-start: var(--searchbar-margin-block-start);
margin-block-end: 0;
margin-inline-start: auto;
margin-inline-end: auto;
padding: 10px 16px;
transition: box-shadow 300ms ease-in-out;
border: 1px solid var(--searchbar-border-color);
border-radius: 3px;
background-color: var(--searchbar-bg);
color: var(--searchbar-fg);
}
#mdbook-searchbar:focus,
#mdbook-searchbar.active {
box-shadow: 0 0 3px var(--searchbar-shadow-color);
}
.searchresults-header {
font-weight: bold;
font-size: 1em;
padding-block-start: 18px;
padding-block-end: 0;
padding-inline-start: 5px;
padding-inline-end: 0;
color: var(--searchresults-header-fg);
}
.searchresults-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
border-block-end: 1px dashed var(--searchresults-border-color);
}
ul#mdbook-searchresults {
list-style: none;
padding-inline-start: 20px;
}
ul#mdbook-searchresults li {
margin: 10px 0px;
padding: 2px;
border-radius: 2px;
}
ul#mdbook-searchresults li.focus {
background-color: var(--searchresults-li-bg);
}
ul#mdbook-searchresults span.teaser {
display: block;
clear: both;
margin-block-start: 5px;
margin-block-end: 0;
margin-inline-start: 20px;
margin-inline-end: 0;
font-size: 0.8em;
}
ul#mdbook-searchresults span.teaser em {
font-weight: bold;
font-style: normal;
}
/* Sidebar */
.sidebar {
position: fixed;
left: 0;
top: 0;
bottom: 0;
width: var(--sidebar-width);
font-size: 0.875em;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
overscroll-behavior-y: contain;
background-color: var(--sidebar-bg);
color: var(--sidebar-fg);
}
.sidebar-iframe-inner {
--padding: 10px;
background-color: var(--sidebar-bg);
padding: var(--padding);
margin: 0;
font-size: 1.4rem;
color: var(--sidebar-fg);
min-height: calc(100vh - var(--padding) * 2);
}
.sidebar-iframe-outer {
border: none;
height: 100%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
[dir=rtl] .sidebar { left: unset; right: 0; }
.sidebar-resizing {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
html:not(.sidebar-resizing) .sidebar {
transition: transform 0.3s; /* Animation: slide away */
}
.sidebar code {
line-height: 2em;
}
.sidebar .sidebar-scrollbox {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 10px 10px;
}
.sidebar .sidebar-resize-handle {
position: absolute;
cursor: col-resize;
width: 0;
right: calc(var(--sidebar-resize-indicator-width) * -1);
top: 0;
bottom: 0;
display: flex;
align-items: center;
}
.sidebar-resize-handle .sidebar-resize-indicator {
width: 100%;
height: 16px;
color: var(--icons);
margin-inline-start: var(--sidebar-resize-indicator-space);
display: flex;
align-items: center;
justify-content: flex-start;
}
.sidebar-resize-handle .sidebar-resize-indicator::before {
content: "";
width: 2px;
height: 12px;
border-left: dotted 2px currentColor;
}
.sidebar-resize-handle .sidebar-resize-indicator::after {
content: "";
width: 2px;
height: 16px;
border-left: dotted 2px currentColor;
}
[dir=rtl] .sidebar .sidebar-resize-handle {
left: calc(var(--sidebar-resize-indicator-width) * -1);
right: unset;
}
.js .sidebar .sidebar-resize-handle {
cursor: col-resize;
width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space));
}
html:not(.js) .sidebar-resize-handle {
display: none;
}
/* sidebar-hidden */
#mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
.sidebar::-webkit-scrollbar {
background: var(--sidebar-bg);
}
.sidebar::-webkit-scrollbar-thumb {
background: var(--scrollbar);
}
/* sidebar-visible */
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
}
@media only screen and (min-width: 620px) {
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
}
}
.chapter {
list-style: none outside none;
padding-inline-start: 0;
line-height: 2.2em;
}
.chapter li {
color: var(--sidebar-non-existant);
}
/* This is a span wrapping the chapter link and the fold chevron. */
.chapter-link-wrapper {
/* Used to position the chevron to the right, allowing the text to wrap before it. */
display: flex;
}
.chapter li a {
/* Remove underlines. */
text-decoration: none;
color: var(--sidebar-fg);
}
.chapter li a:hover {
color: var(--sidebar-active);
}
.chapter li a.active {
color: var(--sidebar-active);
}
/* This is the toggle chevron. */
.chapter-fold-toggle {
cursor: pointer;
/* Positions the chevron to the side. */
margin-inline-start: auto;
padding: 0 10px;
user-select: none;
opacity: 0.68;
}
.chapter-fold-toggle div {
transition: transform 0.5s;
}
/* collapse the section */
.chapter li:not(.expanded) > ol {
display: none;
}
.chapter li.chapter-item {
line-height: 1.5em;
margin-block-start: 0.6em;
}
.chapter li.header-item {
/* Make sure there is plenty of spacing between sections so they don't blend in
with each other. */
margin-block-end: 0.5em;
/* Avoid too much spacing between lines when section heading word wraps so that
it can be distinguished between successive headings. */
line-height: 1.5em;
}
/* When expanded, rotate the chevron to point down. */
.chapter li.expanded > span > .chapter-fold-toggle div {
transform: rotate(90deg);
}
.chapter a.current-header {
color: var(--sidebar-active);
}
.on-this-page {
margin-left: 22px;
border-inline-start: 4px solid var(--sidebar-header-border-color);
padding-left: 8px;
}
.on-this-page > ol {
padding-left: 0;
}
/* Horizontal line in chapter list. */
.spacer {
width: 100%;
height: 3px;
margin: 5px 0px;
}
.chapter .spacer {
background-color: var(--sidebar-spacer);
}
/* On touch devices, add more vertical spacing to make it easier to tap links. */
@media (-moz-touch-enabled: 1), (pointer: coarse) {
.chapter li a { padding: 5px 0; }
.spacer { margin: 10px 0; }
}
.section {
list-style: none outside none;
padding-inline-start: 20px;
line-height: 1.9em;
}
/* Theme Menu Popup */
.theme-popup {
position: absolute;
left: 10px;
top: var(--menu-bar-height);
z-index: 1000;
border-radius: 4px;
font-size: 0.7em;
color: var(--fg);
background: var(--theme-popup-bg);
border: 1px solid var(--theme-popup-border);
margin: 0;
padding: 0;
list-style: none;
display: none;
/* Don't let the children's background extend past the rounded corners. */
overflow: hidden;
}
[dir=rtl] .theme-popup { left: unset; right: 10px; }
.theme-popup .default {
color: var(--icons);
}
.theme-popup .theme {
width: 100%;
border: 0;
margin: 0;
padding: 2px 20px;
line-height: 25px;
white-space: nowrap;
text-align: start;
cursor: pointer;
color: inherit;
background: inherit;
font-size: inherit;
}
.theme-popup .theme:hover {
background-color: var(--theme-hover);
}
.theme-selected::before {
display: inline-block;
content: "✓";
margin-inline-start: -14px;
width: 14px;
}
/* The container for the help popup that covers the whole window. */
#mdbook-help-container {
/* Position and size for the whole window. */
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* This uses flex layout (which is set in book.js), and centers the popup
in the window.*/
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
/* Dim out the book while the popup is visible. */
background: var(--overlay-bg);
}
/* The popup help box. */
#mdbook-help-popup {
box-shadow: 0 4px 24px rgba(0,0,0,0.15);
min-width: 300px;
max-width: 500px;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
background-color: var(--bg);
color: var(--fg);
border-width: 1px;
border-color: var(--theme-popup-border);
border-style: solid;
border-radius: 8px;
padding: 10px;
}
.mdbook-help-title {
text-align: center;
/* mdbook's margin for h2 is way too large. */
margin: 10px;
}
+464
View File
@@ -0,0 +1,464 @@
/* Base styles and content styles */
:root {
/* Browser default font-size is 16px, this way 1 rem = 10px */
font-size: 62.5%;
color-scheme: var(--color-scheme);
}
html {
font-family: "Open Sans", sans-serif;
color: var(--fg);
background-color: var(--bg);
text-size-adjust: none;
-webkit-text-size-adjust: none;
}
body {
margin: 0;
font-size: 1.6rem;
overflow-x: hidden;
}
code {
font-family: var(--mono-font) !important;
font-size: var(--code-font-size);
direction: ltr !important;
}
/* make long words/inline code not x overflow */
main {
overflow-wrap: break-word;
}
/* make wide tables scroll if they overflow */
.table-wrapper {
overflow-x: auto;
}
/* Don't change font size in headers. */
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
font-size: unset;
}
.left { float: left; }
.right { float: right; }
.boring { opacity: 0.6; }
.hide-boring .boring { display: none; }
.hidden { display: none !important; }
h2, h3 { margin-block-start: 2.5em; }
h4, h5 { margin-block-start: 2em; }
.header + .header h3,
.header + .header h4,
.header + .header h5 {
margin-block-start: 1em;
}
h1:target::before,
h2:target::before,
h3:target::before,
h4:target::before,
h5:target::before,
h6:target::before,
dt:target::before {
display: inline-block;
content: "»";
margin-inline-start: -30px;
width: 30px;
}
/* This is broken on Safari as of version 14, but is fixed
in Safari Technology Preview 117 which I think will be Safari 14.2.
https://bugs.webkit.org/show_bug.cgi?id=218076
*/
:target {
/* Safari does not support logical properties */
scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
}
.page {
outline: 0;
padding: 0 var(--page-padding);
margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #mdbook-menu-bar-hover-placeholder */
}
.page-wrapper {
box-sizing: border-box;
background-color: var(--bg);
}
html:not(.js) .page-wrapper,
.js:not(.sidebar-resizing) .page-wrapper {
transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
[dir=rtl]:not(.js) .page-wrapper,
[dir=rtl].js:not(.sidebar-resizing) .page-wrapper {
transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
.content {
overflow-y: auto;
padding: 0 5px 50px 5px;
}
.content main {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
.content p { line-height: 1.45em; }
.content ol { line-height: 1.45em; }
.content ul { line-height: 1.45em; }
.content a { text-decoration: none; }
.content a:hover { text-decoration: underline; }
.content img, .content video { max-width: 100%; }
/* When an image is inside an anchor, ensure the focus ring covers the entire
image instead of the anchor's line box. */
.content a:has(img) { display: inline-block; }
.content .header:link,
.content .header:visited {
color: var(--fg);
}
.content .header:link,
.content .header:visited:hover {
text-decoration: none;
}
table {
margin: 0 auto;
border-collapse: collapse;
}
table td {
padding: 3px 20px;
border: 1px var(--table-border-color) solid;
}
table thead {
background: var(--table-header-bg);
}
table thead td {
font-weight: 700;
border: none;
}
table thead th {
padding: 3px 20px;
}
table thead tr {
border: 1px var(--table-header-bg) solid;
}
/* Alternate background colors for rows */
table tbody tr:nth-child(2n) {
background: var(--table-alternate-bg);
}
blockquote {
margin: 20px 0;
padding: 0 20px;
color: var(--fg);
background-color: var(--quote-bg);
border-block-start: .1em solid var(--quote-border);
border-block-end: .1em solid var(--quote-border);
}
/* TODO: Remove .warning in a future version of mdbook, it is replaced by
blockquote tags. */
.warning {
margin: 20px;
padding: 0 20px;
border-inline-start: 2px solid var(--warning-border);
}
.warning:before {
position: absolute;
width: 3rem;
height: 3rem;
margin-inline-start: calc(-1.5rem - 21px);
content: "ⓘ";
text-align: center;
background-color: var(--bg);
color: var(--warning-border);
font-weight: bold;
font-size: 2rem;
}
blockquote .warning:before {
background-color: var(--quote-bg);
}
kbd {
background-color: var(--table-border-color);
border-radius: 4px;
border: solid 1px var(--theme-popup-border);
box-shadow: inset 0 -1px 0 var(--theme-hover);
display: inline-block;
font-size: var(--code-font-size);
font-family: var(--mono-font);
line-height: 10px;
padding: 4px 5px;
vertical-align: middle;
}
sup {
/* Set the line-height for superscript and footnote references so that there
isn't an awkward space appearing above lines that contain the footnote.
See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583
for an explanation.
*/
line-height: 0;
}
.footnote-definition {
font-size: 0.9em;
}
/* The default spacing for a list is a little too large. */
.footnote-definition ul,
.footnote-definition ol {
padding-left: 20px;
}
.footnote-definition > li {
/* Required to position the ::before target */
position: relative;
}
.footnote-definition > li:target {
scroll-margin-top: 50vh;
}
.footnote-reference:target {
scroll-margin-top: 50vh;
}
/* Draws a border around the footnote (including the marker) when it is selected.
TODO: If there are multiple linkbacks, highlight which one you just came
from so you know which one to click.
*/
.footnote-definition > li:target::before {
border: 2px solid var(--footnote-highlight);
border-radius: 6px;
position: absolute;
top: -8px;
right: -8px;
bottom: -8px;
left: -32px;
pointer-events: none;
content: "";
}
/* Pulses the footnote reference so you can quickly see where you left off reading.
This could use some improvement.
*/
@media not (prefers-reduced-motion) {
.footnote-reference:target {
animation: fn-highlight 0.8s;
border-radius: 2px;
}
@keyframes fn-highlight {
from {
background-color: var(--footnote-highlight);
}
}
}
.tooltiptext {
position: absolute;
visibility: hidden;
color: #fff;
background-color: #333;
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
left: -8px; /* Half of the width of the icon */
top: -35px;
font-size: 0.8em;
text-align: center;
border-radius: 6px;
padding: 5px 8px;
margin: 5px;
z-index: 1000;
}
.tooltipped .tooltiptext {
visibility: visible;
}
.chapter li.part-title {
color: var(--sidebar-fg);
margin: 5px 0px;
font-weight: bold;
}
.result-no-output {
font-style: italic;
}
.fa-svg svg {
width: 1em;
height: 1em;
fill: currentColor;
margin-bottom: -0.1em;
}
dt {
font-weight: bold;
margin-top: 0.5em;
margin-bottom: 0.1em;
}
/* This uses a CSS counter to add numbers to definitions, but only if there is
more than one definition. */
dl, dt {
counter-reset: dd-counter;
}
/* When there is more than one definition, increment the counter. The first
selector selects the first definition, and the second one selects definitions
2 and beyond.*/
dd:has(+ dd), dd + dd {
counter-increment: dd-counter;
/* Use flex display to help with positioning the numbers when there is a p
tag inside the definition. */
display: flex;
align-items: flex-start;
}
/* Shows the counter for definitions. The first selector selects the first
definition, and the second one selections definitions 2 and beyond.*/
dd:has(+ dd)::before, dd + dd::before {
content: counter(dd-counter) ". ";
font-weight: 600;
display: inline-block;
margin-right: 0.5em;
}
dd > p {
/* For loose definitions that have a p tag inside, don't add a bunch of
space before the definition. */
margin-top: 0;
}
/* Remove some excess space from the bottom. */
.blockquote-tag p:last-child {
margin-bottom: 2px;
}
.blockquote-tag {
/* Add some padding to make the vertical bar a little taller than the text.*/
padding: 2px 0px 2px 20px;
/* Add a solid color bar on the left side. */
border-inline-start-style: solid;
border-inline-start-width: 4px;
/* Disable the background color from normal blockquotes . */
background-color: inherit;
/* Disable border blocks from blockquotes. */
border-block-start: none;
border-block-end: none;
}
.blockquote-tag-title svg {
fill: currentColor;
/* Add space between the icon and the title. */
margin-right: 8px;
}
.blockquote-tag-note {
border-inline-start-color: var(--blockquote-note-color);
}
.blockquote-tag-tip {
border-inline-start-color: var(--blockquote-tip-color);
}
.blockquote-tag-important {
border-inline-start-color: var(--blockquote-important-color);
}
.blockquote-tag-warning {
border-inline-start-color: var(--blockquote-warning-color);
}
.blockquote-tag-caution {
border-inline-start-color: var(--blockquote-caution-color);
}
.blockquote-tag-note > .blockquote-tag-title {
color: var(--blockquote-note-color);
}
.blockquote-tag-tip > .blockquote-tag-title {
color: var(--blockquote-tip-color);
}
.blockquote-tag-important > .blockquote-tag-title {
color: var(--blockquote-important-color);
}
.blockquote-tag-warning > .blockquote-tag-title {
color: var(--blockquote-warning-color);
}
.blockquote-tag-caution > .blockquote-tag-title {
color: var(--blockquote-caution-color);
}
.blockquote-tag-title {
/* Slightly increase the weight for more emphasis. */
font-weight: 600;
/* Vertically center the icon with the text. */
display: flex;
align-items: center;
/* Remove default large margins for a more compact display. */
margin: 2px 0 8px 0;
}
.blockquote-tag-title .fa-svg {
fill: currentColor;
/* Add some space between the icon and the text. */
margin-right: 8px;
}
/* All this code is to handle the "zoomable" images feature. */
/* This one makes the checkbox invisible while keeping it selectable with the keyboard (with the
"tab" key). */
.content .checkbox-img {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* When the input is focused, we make it appear to the user by adding an outline to the img
instead */
.content .checkbox-img:focus + img {
outline: auto;
}
/* The "zoomed-in" image is not displayed until the checkbox is "ticked". */
.content .checkbox-img:not(:checked) ~ .img-wrapper {
display: none;
}
.content .checkbox-label {
display: block;
max-width: 100%;
}
.content .checkbox-label img {
cursor: zoom-in;
}
.content .checkbox-img:checked ~ .img-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.4);
z-index: 1001;
display: flex;
align-items: center;
justify-content: center;
cursor: zoom-out;
}
.content .checkbox-img:checked ~ .img-wrapper > img {
--img-padding: 5px;
padding: var(--img-padding);
background: #999;
cursor: zoom-out;
max-width: calc(100% - (var(--img-padding) * 2));
max-height: calc(100% - (var(--img-padding) * 2));
}
+50
View File
@@ -0,0 +1,50 @@
#mdbook-sidebar,
#mdbook-menu-bar,
.nav-chapters,
.mobile-nav-chapters {
display: none;
}
#mdbook-page-wrapper.page-wrapper {
transform: none !important;
margin-inline-start: 0px;
overflow-y: initial;
}
#mdbook-content {
max-width: none;
margin: 0;
padding: 0;
}
.page {
overflow-y: initial;
}
code {
direction: ltr !important;
}
pre > .buttons {
z-index: 2;
}
a, a:visited, a:active, a:hover {
color: #4183c4;
text-decoration: none;
}
h1, h2, h3, h4, h5, h6 {
page-break-inside: avoid;
page-break-after: avoid;
}
pre, code {
page-break-inside: avoid;
white-space: pre-wrap;
}
.fa {
display: none !important;
}
+383
View File
@@ -0,0 +1,383 @@
/* Globals */
:root {
--sidebar-target-width: 300px;
--sidebar-width: min(var(--sidebar-target-width), 80vw);
--sidebar-resize-indicator-width: 8px;
--sidebar-resize-indicator-space: 2px;
--page-padding: 15px;
--content-max-width: 750px;
--menu-bar-height: 50px;
--mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
--code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
--searchbar-margin-block-start: 5px;
}
/* Themes */
.ayu {
--bg: hsl(210, 25%, 8%);
--fg: #c5c5c5;
--sidebar-bg: #14191f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #5c6773;
--sidebar-active: #ffb454;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #0096cf;
--inline-code-color: #ffb454;
--theme-popup-bg: #14191f;
--theme-popup-border: #5c6773;
--theme-hover: #191f26;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(210, 25%, 13%);
--table-header-bg: hsl(210, 25%, 28%);
--table-alternate-bg: hsl(210, 25%, 11%);
--searchbar-border-color: #848484;
--searchbar-bg: #424242;
--searchbar-fg: #fff;
--searchbar-shadow-color: #d4c89f;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #252932;
--search-mark-bg: #e3b171;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%);
--footnote-highlight: #2668a6;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #74b9ff;
--blockquote-tip-color: #09ca09;
--blockquote-important-color: #d3abff;
--blockquote-warning-color: #f0b72f;
--blockquote-caution-color: #f21424;
--sidebar-header-border-color: #c18639;
}
.coal {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #08ae08;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #d91b29;
--sidebar-header-border-color: #3473ad;
}
.light, html:not(.js) {
--bg: hsl(0, 0%, 100%);
--fg: hsl(0, 0%, 0%);
--sidebar-bg: #fafafa;
--sidebar-fg: hsl(0, 0%, 0%);
--sidebar-non-existant: #aaaaaa;
--sidebar-active: #1f1fff;
--sidebar-spacer: #f4f4f4;
--scrollbar: #8F8F8F;
--icons: #747474;
--icons-hover: #000000;
--links: #20609f;
--inline-code-color: #301900;
--theme-popup-bg: #fafafa;
--theme-popup-border: #cccccc;
--theme-hover: #e6e6e6;
--quote-bg: hsl(197, 37%, 96%);
--quote-border: hsl(197, 37%, 91%);
--warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #e4f2fe;
--search-mark-bg: #a2cff5;
--color-scheme: light;
/* Same as `--icons` */
--copy-button-filter: invert(45.49%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%);
--footnote-highlight: #7e7eff;
--overlay-bg: rgba(200, 200, 205, 0.4);
--blockquote-note-color: #0969da;
--blockquote-tip-color: #008000;
--blockquote-important-color: #8250df;
--blockquote-warning-color: #9a6700;
--blockquote-caution-color: #b52731;
--sidebar-header-border-color: #6e6edb;
}
.navy {
--bg: hsl(226, 23%, 11%);
--fg: #bcbdd0;
--sidebar-bg: #282d3f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505274;
--sidebar-active: #2b79a2;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #161923;
--theme-popup-border: #737480;
--theme-hover: #282e40;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(226, 23%, 16%);
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--searchbar-border-color: #aaa;
--searchbar-bg: #aeaec6;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #5f5f71;
--searchresults-border-color: #5c5c68;
--searchresults-li-bg: #242430;
--search-mark-bg: #a2cff5;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #09ca09;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #f21424;
--sidebar-header-border-color: #2f6ab5;
}
.rust {
--bg: hsl(60, 9%, 87%);
--fg: #262625;
--sidebar-bg: #3b2e2a;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505254;
--sidebar-active: #e69f67;
--sidebar-spacer: #45373a;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #262625;
--links: #2b79a2;
--inline-code-color: #6e6b5e;
--theme-popup-bg: #e1e1db;
--theme-popup-border: #b38f6b;
--theme-hover: #99908a;
--quote-bg: hsl(60, 5%, 75%);
--quote-border: hsl(60, 5%, 70%);
--warning-border: #ff8e00;
--table-border-color: hsl(60, 9%, 82%);
--table-header-bg: #b3a497;
--table-alternate-bg: hsl(60, 9%, 84%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #dec2a2;
--search-mark-bg: #e69f67;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%);
--footnote-highlight: #d3a17a;
--overlay-bg: rgba(150, 150, 150, 0.25);
--blockquote-note-color: #023b95;
--blockquote-tip-color: #007700;
--blockquote-important-color: #8250df;
--blockquote-warning-color: #603700;
--blockquote-caution-color: #aa1721;
--sidebar-header-border-color: #8c391f;
}
@media (prefers-color-scheme: dark) {
html:not(.js) {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #08ae08;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #d91b29;
--sidebar-header-border-color: #3473ad;
}
}
-50
View File
@@ -1,50 +0,0 @@
{
pkgs ? import <nixpkgs> { },
}:
let
path = builtins.path {
path = ./.;
name = "home-manager-source";
};
nixpkgs = (
import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
n = lock.nodes.nixpkgs.locked;
in
fetchTarball {
url = "https://github.com/${n.owner}/${n.repo}/archive/${n.rev}.tar.gz";
sha256 = n.narHash;
}
) { }
);
in
rec {
docs =
let
releaseInfo = pkgs.lib.importJSON ./release.json;
in
with import ./docs {
inherit pkgs;
inherit (releaseInfo) release isReleaseBranch;
};
{
inherit manPages jsonModuleMaintainers;
inherit (manual) html htmlOpenTool;
inherit (options) json;
};
home-manager = pkgs.callPackage ./home-manager { inherit path; };
install = pkgs.callPackage ./home-manager/install.nix { inherit home-manager; };
nixos = import ./nixos;
lib = import ./lib { inherit (pkgs) lib; };
dev = nixpkgs.callPackage ./home-manager/devShell.nix { };
inherit path;
}
-314
View File
@@ -1,314 +0,0 @@
{
pkgs,
# Note, this should be "the standard library" + HM extensions.
lib ? import ../modules/lib/stdlib-extended.nix pkgs.lib,
release,
isReleaseBranch,
}:
let
# Recursively replace each derivation in the given attribute set
# with the same derivation but with the `outPath` attribute set to
# the string `"\${pkgs.attribute.path}"`. This allows the
# documentation to refer to derivations through their values without
# establishing an actual dependency on the derivation output.
#
# This is not perfect, but it seems to cover a vast majority of use
# cases.
#
# Caveat: even if the package is reached by a different means, the
# path above will be shown and not e.g.
# `${config.services.foo.package}`.
scrubDerivations =
prefixPath: attrs:
let
scrubDerivation =
name: value:
let
pkgAttrName = prefixPath + "." + name;
in
if lib.isAttrs value then
scrubDerivations pkgAttrName value
// lib.optionalAttrs (lib.isDerivation value) {
outPath = "\${${pkgAttrName}}";
}
else
value;
in
lib.mapAttrs scrubDerivation attrs;
# Make sure the used package is scrubbed to avoid actually
# instantiating derivations.
scrubbedPkgsModule = {
imports = [
{
_module.args = {
pkgs = lib.mkForce (scrubDerivations "pkgs" pkgs);
pkgs_i686 = lib.mkForce { };
};
}
];
};
dontCheckDefinitions = {
_module.check = false;
};
gitHubDeclaration =
user: repo: subpath:
let
urlRef = if isReleaseBranch then "release-${release}" else "master";
in
{
url = "https://github.com/${user}/${repo}/blob/${urlRef}/${subpath}";
name = "<${repo}/${subpath}>";
};
hmPath = toString ./..;
# Keep submodule option docs visible when wrapped in `either` (and therefore
# in `nullOr (either ...)`), which upstream currently omits.
docsLib = lib.extend (
_self: super:
let
mergeEitherSubOptions =
prefix: leftType: rightType:
let
getSubOptionsOrEmpty =
optionType:
let
subOptions = optionType.getSubOptions prefix;
in
if builtins.isAttrs subOptions then subOptions else { };
mkOptionDecl = options: {
_file = "<docs/default.nix>";
pos = null;
inherit options;
};
optionSets = lib.filter (options: options != { }) [
(getSubOptionsOrEmpty leftType)
(getSubOptionsOrEmpty rightType)
];
mergedOptions = lib.foldl' (
acc: options:
if acc == { } then
options
else
(super.mergeOptionDecls prefix [
(mkOptionDecl acc)
(mkOptionDecl options)
]).options
) { } optionSets;
in
mergedOptions;
in
{
types = super.types // {
either =
leftType: rightType:
(super.types.either leftType rightType)
// {
getSubOptions = prefix: mergeEitherSubOptions prefix leftType rightType;
};
};
}
);
buildOptionsDocs =
args@{
modules,
includeModuleSystemOptions ? true,
...
}:
let
# to discourage references from option descriptions and defaults.
poisonModule =
let
poisonAttr = n: {
name = n;
value = abort ''
error: the option documentation has a dependency on the configuration.
You may, for example, have added an option attribute like
default = ''${config.some.value};
Since the default value is included in the Home Manager manual, this
would make the manual depend on the user's configuration.
To avoid this problem in this particular case, consider changing to
default = ''${config.some.value};
defaultText = lib.literalExpression "\\''${config.some.value}";'';
};
in
{ options, ... }:
{
config = lib.listToAttrs (map poisonAttr (lib.filter (n: n != "_module") (lib.attrNames options)));
};
inherit
(
(docsLib.evalModules {
modules = modules ++ [ poisonModule ];
class = "homeManager";
})
)
options
;
in
pkgs.buildPackages.nixosOptionsDoc (
{
options = if includeModuleSystemOptions then options else removeAttrs options [ "_module" ];
transformOptions =
opt:
opt
// {
# Clean up declaration sites to not refer to the Home Manager
# source tree.
declarations = map (
decl:
if lib.hasPrefix hmPath (toString decl) then
gitHubDeclaration "nix-community" "home-manager" (
lib.removePrefix "/" (lib.removePrefix hmPath (toString decl))
)
else if decl == "lib/modules.nix" then
# TODO: handle this in a better way (may require upstream
# changes to nixpkgs)
gitHubDeclaration "NixOS" "nixpkgs" decl
else
decl
) opt.declarations;
};
}
// removeAttrs args [
"modules"
"includeModuleSystemOptions"
]
);
hmOptionsDocs = buildOptionsDocs {
modules =
import ../modules/modules.nix {
lib = docsLib;
inherit pkgs;
check = false;
}
++ [ scrubbedPkgsModule ];
variablelistId = "home-manager-options";
};
nixosOptionsDocs = buildOptionsDocs {
modules = [
../nixos
scrubbedPkgsModule
dontCheckDefinitions
];
includeModuleSystemOptions = false;
variablelistId = "nixos-options";
optionIdPrefix = "nixos-opt-";
};
nixDarwinOptionsDocs = buildOptionsDocs {
modules = [
../nix-darwin
scrubbedPkgsModule
dontCheckDefinitions
];
includeModuleSystemOptions = false;
variablelistId = "nix-darwin-options";
optionIdPrefix = "nix-darwin-opt-";
};
release-config = builtins.fromJSON (builtins.readFile ../release.json);
revision = "release-${release-config.release}";
# Generate the `man home-configuration.nix` package
home-configuration-manual =
pkgs.runCommand "home-configuration-reference-manpage"
{
nativeBuildInputs = [
pkgs.buildPackages.installShellFiles
pkgs.nixos-render-docs
];
allowedReferences = [ "out" ];
}
''
# Generate manpages.
mkdir -p $out/share/man/man5
mkdir -p $out/share/man/man1
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
--revision ${revision} \
--header ${./home-configuration-nix-header.5} \
--footer ${./home-configuration-nix-footer.5} \
${hmOptionsDocs.optionsJSON}/share/doc/nixos/options.json \
$out/share/man/man5/home-configuration.nix.5
cp ${./home-manager.1} $out/share/man/man1/home-manager.1
'';
# Generate the HTML manual pages
home-manager-manual = pkgs.callPackage ./home-manager-manual.nix {
home-manager-options = {
home-manager = {
json = hmOptionsDocs.optionsJSON;
};
nixos = {
json = nixosOptionsDocs.optionsJSON;
};
nix-darwin = {
json = nixDarwinOptionsDocs.optionsJSON;
};
};
inherit revision;
};
html = home-manager-manual;
htmlOpenTool = pkgs.callPackage ./html-open-tool.nix { } { inherit html; };
in
{
options = {
# TODO: Use `hmOptionsDocs.optionsJSON` directly once upstream
# `nixosOptionsDoc` is more customizable.
json =
pkgs.runCommand "options.json"
{
meta.description = "List of Home Manager options in JSON format";
}
''
mkdir -p $out/{share/doc,nix-support}
cp -a ${hmOptionsDocs.optionsJSON}/share/doc/nixos $out/share/doc/home-manager
substitute \
${hmOptionsDocs.optionsJSON}/nix-support/hydra-build-products \
$out/nix-support/hydra-build-products \
--replace-fail \
'${hmOptionsDocs.optionsJSON}/share/doc/nixos' \
"$out/share/doc/home-manager"
'';
};
manPages = home-configuration-manual;
manual = { inherit html htmlOpenTool; };
# Unstable, mainly for CI.
jsonModuleMaintainers = pkgs.writeText "hm-module-maintainers.json" (
let
result = lib.evalModules {
modules =
import ../modules/modules.nix {
inherit lib pkgs;
check = false;
}
++ [ scrubbedPkgsModule ];
class = "homeManager";
};
in
builtins.toJSON result.config.meta.maintainers
);
# Unstable, for tests.
_internal = { inherit docsLib; };
}
-45
View File
@@ -1,45 +0,0 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1779877693,
"narHash": "sha256-NOF9NAREhxr50bbBfVcVOq+ArCMSoe8dP79Pk2uyARk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4100e830e085863741bc69b156ec4ccd53ab5be0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"scss-reset": "scss-reset"
}
},
"scss-reset": {
"flake": false,
"locked": {
"lastModified": 1683906868,
"narHash": "sha256-cif5Sx8Ca5vxdw/mNAgpulLH15TwmzyJFNM7JURpoaE=",
"owner": "andreymatin",
"repo": "scss-reset",
"rev": "5a7bd491ac82441e6283fb0d5d54644b913b30c7",
"type": "github"
},
"original": {
"owner": "andreymatin",
"ref": "1.4.2",
"repo": "scss-reset",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
-88
View File
@@ -1,88 +0,0 @@
{
description = "Support developing Home Manager documentation";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
scss-reset = {
url = "github:andreymatin/scss-reset/1.4.2";
flake = false;
};
};
outputs =
{
nixpkgs,
scss-reset,
...
}:
let
supportedSystems = [
"aarch64-darwin"
"aarch64-linux"
"i686-linux"
"x86_64-darwin"
"x86_64-linux"
];
# Note, this should be "the standard library" + HM extensions.
lib = import ../modules/lib/stdlib-extended.nix nixpkgs.lib;
forAllSystems = lib.genAttrs supportedSystems;
flakePkgs = pkgs: {
p-build = pkgs.writeShellScriptBin "p-build" ''
set -euo pipefail
export PATH=${
lib.makeBinPath [
pkgs.coreutils
pkgs.rsass
]
}
tmpfile=$(mktemp -d)
trap "rm -r $tmpfile" EXIT
ln -s "${scss-reset}/build" "$tmpfile/scss-reset"
rsass --load-path="$tmpfile" --style compressed \
./static/style.scss > ./static/style.css
echo "Generated ./static/style.css"
'';
};
releaseInfo = lib.importJSON ../release.json;
in
{
devShells = forAllSystems (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
fpkgs = flakePkgs pkgs;
in
{
default = pkgs.mkShell {
name = "hm-docs";
packages = [ fpkgs.p-build ];
};
}
);
# Expose the docs outputs
packages = forAllSystems (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
docs = import ./default.nix {
inherit pkgs lib;
inherit (releaseInfo) isReleaseBranch release;
};
in
{
inherit (docs) manPages jsonModuleMaintainers;
inherit (docs.manual) html htmlOpenTool;
inherit (docs.options) json;
}
);
};
}
-3
View File
@@ -1,3 +0,0 @@
.SH "AUTHORS"
.PP
Home Manager contributors
-17
View File
@@ -1,17 +0,0 @@
.TH "HOME-CONFIGURATION\&.NIX" "5" "01/01/1980" "Home Manager"
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" enable line breaks after slashes
.cflags 4 /
.SH "NAME"
\fIhome\-configuration\&.nix\fP \- Home Manager configuration specification
.SH "DESCRIPTION"
.sp
The file ~/\&.config/home\-manager/home\&.nix contains the declarative specification of your Home Manager configuration\&. The command \fBhome\-manager\fR takes this file and realises the user environment configuration specified therein\&.
.SH "OPTIONS"
.PP
You can use the following options in
home\-configuration\&.nix:
.PP
-91
View File
@@ -1,91 +0,0 @@
{
stdenv,
lib,
callPackage,
mdbook,
python3,
revision,
home-manager-options,
}:
let
outputPath = "share/doc/home-manager";
mdbookOptions = callPackage ./mdbook/options.nix {
manpageUrls = ./manual/manpage-urls.json;
inherit revision;
optionDocs = {
home-manager = {
title = "Home Manager Configuration Options";
path = "home-manager";
prefix = "opt-";
json = "${home-manager-options.home-manager.json}";
};
nixos = {
title = "NixOS Configuration Options";
path = "nixos";
prefix = "nixos-opt-";
json = "${home-manager-options.nixos.json}";
};
nix-darwin = {
title = "nix-darwin Configuration Options";
path = "nix-darwin";
prefix = "nix-darwin-opt-";
json = "${home-manager-options.nix-darwin.json}";
};
};
};
in
stdenv.mkDerivation {
name = "home-manager-manual";
nativeBuildInputs = [
mdbook
python3
];
src = ./.;
buildPhase = ''
runHook preBuild
mkdir -p source
python3 ${./mdbook/convert-markup.py} "$src/manual" source
python3 ${./mdbook/convert-markup.py} \
--base-depth 1 \
"$src/release-notes" \
source/release-notes
cp -r ${mdbookOptions}/options source/options
python3 ${./mdbook/substitute-summary.py} \
source/SUMMARY.md \
${mdbookOptions}/summary/home-manager.md \
${mdbookOptions}/summary/nixos.md \
${mdbookOptions}/summary/nix-darwin.md
mdbook build source --dest-dir book
mkdir -p out
cp -r book/* out/
python3 ${./mdbook/legacy-redirects.py} source out
runHook postBuild
'';
installPhase = ''
dest="$out/${outputPath}"
mkdir -p "$(dirname "$dest")"
mv out "$dest"
mkdir -p $out/nix-support/
echo "doc manual $dest index.html" >> $out/nix-support/hydra-build-products
'';
passthru = {
inherit home-manager-options mdbookOptions;
};
meta = {
maintainers = [ lib.maintainers.considerate ];
};
}
-424
View File
@@ -1,424 +0,0 @@
.Dd January 1, 1980
.Dt home-manager 1
.Os Home Manager
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" enable line breaks after slashes
.cflags 4 /
.Sh NAME
.Nm home-manager
.Nd reconfigure a user environment
.
.
.
.Sh SYNOPSIS
.Nm home-manager
.Bro
.Cm build
.Cm | init Op Fl -switch Ar dir
.Cm | instantiate
.Cm | edit
.Cm | expire-generations Ar timestamp
.Cm | generations
.Cm | help
.Cm | news
.Cm | option Oo Fl -recursive Oc Ar option.name
.Cm | packages
.Cm | remove-generations Ar ID \&...
.Cm | switch
.Op Fl -rollback
.Op Bro Fl c | Fl -specialisation Brc Ar NAME
.Cm | uninstall
.Brc
.Op Fl A Ar attrPath
.Op Fl I Ar path
.Op Fl -flake Ar flake-uri
.Op Fl b Ar ext
.Op Bro Fl f | Fl -file Brc Ar path
.Op Bro Fl h | Fl -help Brc
.Op Fl -version
.Op Bro Fl n | Fl -dry-run Brc
.Op Fl -option Ar name Ar value
.Op Fl -cores Ar number
.Op Bro Fl j | Fl -max-jobs Brc Ar number
.Op Fl -option
.Op Fl -impure
.Op Fl -keep-failed
.Op Fl -keep-going
.Op Bro Fl L | Fl -print-build-logs Brc
.Op Fl -log-format
.Op Fl -show-trace
.Op Fl -(no-)substitute
.Op Fl -no-out-link
.Op Fl -refresh
.Op Bro Fl v | Fl -verbose Brc
.
.Sh DESCRIPTION
.Pp
This command updates the user environment so that it corresponds to the configuration specified in
$XDG_CONFIG_HOME/home-manager/home.nix
or
$XDG_CONFIG_HOME/home-manager/flake.nix.
.Pp
All operations using this tool expects a sub-command that indicates the operation to perform. It must be one of
.Pp
.Bl -tag -width Ds
.It Cm build
.RS 4
Build configuration into a result directory.
.RE
.It Cm init Op Fl -switch Op Ar dir
.RS 14
Generates an initial home.nix file for the current user. If Nix flakes are
enabled, then this command also generates a flake.nix file.
.sp
If a path
.Ar dir
is given then the configuration will be generated in that directory. Otherwise, the configuration will be generated in
~/.config/home-manager. The output directory will be created if it does not exist.
.sp
If the
.Fl -switch
option is given, then the generated configuration is activated.
.sp
Note, this command will not overwrite any existing files. It is therefore safe to initialize a configuration, edit it, and then re-run the
.Cm init
command with
.Fl -switch
enabled to activate the configuration.
.RE
.Pp
.It Cm instantiate
.RS 15
Instantiate the configuration and print the resulting derivation\&.
.RE
.Pp
.It Cm edit
.RS 16
Open the home configuration using the editor indicated by \fBVISUAL\fR or \fBEDITOR\fR\&.
.RE
.Pp
.It Cm expire-generations Ar timestamp
.RS 4
Remove generations older than
.Ar timestamp
where
.Ar timestamp
is interpreted as in the
.Fl d
argument of the
\fBdate\fR(1)
tool. For example
-30 days or 2018-01-01.
.RE
.PP
.It Cm generations
.RS 4
List all home environment generations\&.
.RE
.Pp
.It Cm help
.RS 4
Print tool help.
.RE
.Pp
.It Cm news
.RS 4
Show news entries in a pager.
.RE
.PP
.It Cm option Oo Fl -recursive Oc Ar option.name
.RS 4
Inspect the given option name in the home configuration, like
\fBnixos-option\fR(8)\&.
.sp
If the
.Fl -recursive
option is given, print all the values at or below the option name recursively\&.
.RE
.Pp
.It Cm packages
.RS 4
List all packages installed in home-manager-path.
.RE
.Pp
.It Cm remove-generations Ar ID \&...
.RS 4
Remove indicated generations. Use the
.Cm generations
sub-command to find suitable generation numbers.
.RE
.Pp
.It Cm switch Oo Fl -rollback Oc Oo Bro Fl c | Fl -specialisation Brc Ar NAME Oc
.RS 4
Build and activate the configuration\&.
.sp
If the
.Fl -rollback
option is given, then the build is not done, instead roll back to and
activate the configuration prior to the current configuration\&.
.sp
If the
.Fl -specialisation
option is given, then the named specialisation is activated\&.
.RE
.Pp
.It Cm uninstall
.RS 4
Remove Home Manager from the user environment\&. This will
.sp
.RE
.RS 4
.Bl -bullet
.It
remove all managed files from the home directory,
.RE
.sp
.RS 4
.It
remove packages installed through Home Manager from the user profile, and
.RE
.sp
.RS 4
.It
remove all Home Manager generations and make them available for immediate garbage collection\&.
.RE
.El
.sp
.RE
.El
.
.Sh OPTIONS
.Pp
The tool accepts the options
.Pp
.Bl -tag -width Ds
.It Cm Fl A Ar attrPath
.RS 4
Optional attribute that selects a configuration expression in the configuration file. That is, if
home.nix contains
.sp
.if n \{\
.RS 4
.\}
.nf
{
joe\-at\-work = {pkgs, \&.\&.\&.}: { home\&.packages = [ pkgs\&.fortune ]; };
joe\-at\-home = {pkgs, \&.\&.\&.}: { home\&.packages = [ pkgs\&.cowsay ]; };
}
.fi
.if n \{\
.RE
.\}
.sp
then the command
\fBhome\-manager switch \-A joe\-at\-work\fR
will activate the profile containing the fortune program\&.
.RE
.PP
.It Cm Fl I Ar path
.RS 4
Add a path to the Nix expression search path. For example, to build a Home Manager profile using a specific Nixpkgs run
.Cm home-manager Fl I Ar nixpkgs=/absolute/path/to/nixpkgs build.
By default
.Ar <nixpkgs>
is used.
.RE
.Pp
.It Cm Fl -flake Ar flake-uri[#name]
.RS 4
Build Home Manager configuration from the flake, which must contain the output homeConfigurations.name. If no name is specified it will first try username@hostname and then username.
.RE
.Pp
.It Cm Fl b Ar extension
.RS 4
Enable automatic resolution of collisions between unmanaged and managed files\&. The name of the original file will be suffixed by the given extension\&. For example,
.sp
.if n \{\
.RS 4
.\}
.nf
$ \fBhome\-manager \-b bck switch\fR
.fi
.if n \{\
.RE
.\}
.sp
will cause a colliding file
~/\&.config/foo\&.conf
to be moved to
~/\&.config/foo\&.conf\&.bck\&.
.RE
.Pp
.It Cm Fl f Ar path, Fl -file Ar path
.RS 4
Indicates the path to the Home Manager configuration file. If not given,
$XDG_CONFIG_HOME/home-manager/home.nix
is used.
.RE
.Pp
.It Cm Fl h, Fl -help
.RS 4
Prints usage information for the
\fBhome\-manager\fR
tool.
.RE
.Pp
.It Cm Fl -version
.RS 4
Prints the version number of the
\fBhome\-manager\fR
tool.
.RE
.Pp
.It Cm Fl n, Fl -dry-run
.RS 4
Perform a dry-run of the given operation, only prints what actions would be taken.
.RE
.Pp
.It Cm Fl -option Ar name Ar value
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -cores Ar number
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl j Ar number, Fl -max-jobs Ar number
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.\" TODO
.Pp
.It Cm Fl -debug
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -impure
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -keep-failed
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -keep-going
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl L, Fl -print-build-logs
.RS 4
Passed on to
\fBnix build\fR()
when building from a flake\&.
.RE
.Pp
.It Cm Fl -log-format Ar format
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -show-trace
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -(no-)substitute
.RS 4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.It Cm Fl -no-out-link
.RS 4
Passed on to
\fBnix-build\fR(1)
when running
\fBhome\-manager build\fR\&.
.RE
.Pp
.It Cm Fl -refresh
.RS 4
Passed on to
\fBnix-build\fR(1)
.RE
.Pp
.It Cm Fl v, Fl -verbose
.RS 4
Activates verbose output\&.
.RE
.El
.Sh FILES
.Pp
$XDG_DATA_HOME/home\-manager/news\-read\-ids
.RS 4
Identifiers of news items that have been shown\&. Can be deleted to reset the read news indicator\&.
.RE
.Sh BUGS
.Pp
Please report any bugs on the
\m[blue]\fBproject issue tracker\fR\m[]\&.
.Sh SEE ALSO
.Pp
\fBhome-configuration.nix\fR(5)
.Sh AUTHOR
.Pp
\fBHome Manager contributors\fR
.RS 4
Author.
.RE
.Sh COPYRIGHT
.br
Copyright \(co 2017\(en2026 Home Manager contributors
.br
-53
View File
@@ -1,53 +0,0 @@
{
writeShellScriptBin,
makeDesktopItem,
symlinkJoin,
}:
{
html,
pathName ? "home-manager",
projectName ? pathName,
name ? "${pathName}-help",
}:
let
helpScript = writeShellScriptBin name ''
set -euo pipefail
if [[ ! -v BROWSER || -z $BROWSER ]]; then
for candidate in xdg-open open w3m; do
BROWSER="$(type -P $candidate || true)"
if [[ -x $BROWSER ]]; then
break;
fi
done
fi
if [[ ! -v BROWSER || -z $BROWSER ]]; then
echo "$0: unable to start a web browser; please set \$BROWSER"
exit 1
fi
manualPath="${html}/share/doc/${pathName}/index.html"
if [[ ! -e $manualPath ]]; then
manualPath="${html}/share/doc/${pathName}/index.xhtml"
fi
exec "$BROWSER" "$manualPath"
'';
desktopItem = makeDesktopItem {
name = "${pathName}-manual";
desktopName = "${projectName} Manual";
genericName = "View ${projectName} documentation in a web browser";
icon = "nix-snowflake";
exec = "${helpScript}/bin/${name}";
categories = [ "System" ];
};
in
symlinkJoin {
inherit name;
paths = [
helpScript
desktopItem
];
}
-14
View File
@@ -1,14 +0,0 @@
# Third-Party Tools and Extensions {#ch-3rd-party}
Here is a collection of tools and extensions that relate to Home
Manager. Note, these are maintained outside the regular Home Manager
flow so quality and support may vary wildly. If you encounter problems
then please raise them in the corresponding project, not as issues in
the Home Manager tracker.
If you have made something interesting related to Home Manager then you
are encouraged to create a PR that expands this chapter.
```{=include=} sections
3rd-party/collections.md
```
-11
View File
@@ -1,11 +0,0 @@
# Module Collections {#sec-3rd-party-module-collections}
- [xhmm --- extra Home Manager
modules](https://github.com/schuelermine/xhmm)
A collection of modules maintained by Anselm Schüler.
- [Stylix --- System-wide colorscheming and
typography](https://github.com/danth/stylix/)
Configure your applications to get coherent color scheme and font.
-64
View File
@@ -1,64 +0,0 @@
# Summary
- [Preface](preface.md)
- [Introduction to Home Manager](introduction.md)
- [Installing Home Manager](installation.md)
- [Standalone installation](installation/standalone.md)
- [NixOS module](installation/nixos.md)
- [nix-darwin module](installation/nix-darwin.md)
- [Using Home Manager](usage.md)
- [Configuration Example](usage/configuration.md)
- [Rollbacks](usage/rollbacks.md)
- [Keeping your ~ safe from harm](usage/dotfiles.md)
- [Graphical services](usage/graphical.md)
- [GPU on non-NixOS systems](usage/gpu-non-nixos.md)
- [Modular Services](usage/modular-services.md)
- [Updating](usage/updating.md)
- [Upgrading to a new Home Manager release](usage/upgrading.md)
- [Nix Flakes](nix-flakes.md)
- [Prerequisites](nix-flakes/prerequisites.md)
- [Standalone setup](nix-flakes/standalone.md)
- [NixOS module](nix-flakes/nixos.md)
- [nix-darwin module](nix-flakes/nix-darwin.md)
- [flake-parts module](nix-flakes/flake-parts.md)
- [Writing Home Manager Modules](writing-modules.md)
- [Option Types](writing-modules/types.md)
- [Contributing](contributing.md)
- [Getting started](contributing/getting-started.md)
- [Guidelines](contributing/guidelines.md)
- [Release Notes](contributing/release-notes.md)
- [News](contributing/news.md)
- [Tests](contributing/tests.md)
- [Home Manager Internals](internals.md)
- [Activation](internals/activation.md)
- [Third-Party Tools and Extensions](3rd-party.md)
- [Module Collections](3rd-party/collections.md)
- [Frequently Asked Questions (FAQ)](faq.md)
- [Why is there a collision error when switching generation?](faq/collision.md)
- [Why are the session variables not set?](faq/session-variables.md)
- [How to set up a configuration for multiple users/machines?](faq/multiple-users-machines.md)
- [Why do I get an error message about `ca.desrt.dconf` or `dconf.service`?](faq/ca-desrt-dconf.md)
- [How do I install packages from Nixpkgs unstable?](faq/unstable.md)
- [How do I change the package used by a module?](faq/change-package-module.md)
- [Options](options.md)
@HOME_MANAGER_OPTIONS@
@NIXOS_OPTIONS@
@NIX_DARWIN_OPTIONS@
- [Release Notes](release-notes/release-notes.md)
- [Release 26.11](release-notes/rl-2611.md)
- [Release 26.05](release-notes/rl-2605.md)
- [Release 25.11](release-notes/rl-2511.md)
- [Release 25.05](release-notes/rl-2505.md)
- [Release 24.11](release-notes/rl-2411.md)
- [Release 24.05](release-notes/rl-2405.md)
- [Release 23.11](release-notes/rl-2311.md)
- [Release 23.05](release-notes/rl-2305.md)
- [Release 22.11](release-notes/rl-2211.md)
- [Release 22.05](release-notes/rl-2205.md)
- [Release 21.11](release-notes/rl-2111.md)
- [Release 21.05](release-notes/rl-2105.md)
- [Release 20.09](release-notes/rl-2009.md)
- [Release 20.03](release-notes/rl-2003.md)
- [Release 19.09](release-notes/rl-1909.md)
- [Release 19.03](release-notes/rl-1903.md)
- [Release 18.09](release-notes/rl-1809.md)
-28
View File
@@ -1,28 +0,0 @@
# Contributing {#ch-contributing}
Contributions to Home Manager are very welcome. To make the process as
smooth as possible for both you and the Home Manager maintainers we
provide some guidelines that we ask you to follow. See [Getting
started](contributing/getting-started.md#sec-contrib-getting-started) for information on how to set up
a suitable development environment and [Guidelines](contributing/guidelines.md#sec-guidelines) for
the actual guidelines.
This text is mainly directed at those who would like to make code
contributions to Home Manager. If you just want to report a bug then
first look among the already [open
issues](https://github.com/nix-community/home-manager/issues), if you
find one matching yours then feel free to comment on it to add any
additional information you may have. If no matching issue exists then go
to the [new
issue](https://github.com/nix-community/home-manager/issues/new) page
and write a description of your problem. Include as much information as
you can, ideally also include relevant excerpts from your Home Manager
configuration.
```{=include=} sections
contributing/getting-started.md
contributing/guidelines.md
contributing/release-notes.md
contributing/news.md
contributing/tests.md
```
@@ -1,43 +0,0 @@
# Getting started {#sec-contrib-getting-started}
If you have not previously forked Home Manager then you need to do that
first. Have a look at GitHub's [Fork a
repo](https://help.github.com/articles/fork-a-repo/) for instructions on
how to do this.
Once you have a fork of Home Manager you should create a branch starting
at the most recent `master` branch. Give your branch a reasonably
descriptive name. Commit your changes to this branch and when you are
happy with the result and it fulfills [Guidelines](guidelines.md#sec-guidelines) then
push the branch to GitHub and [create a pull
request](https://help.github.com/articles/creating-a-pull-request/).
Assuming your clone is at `$HOME/devel/home-manager` then you can make
the `home-manager` command use it by either
1. overriding the default path by using the `-I` command line option:
``` shell
$ home-manager -I home-manager=$HOME/devel/home-manager
```
or, if using [flakes](../nix-flakes/standalone.md#sec-flakes-standalone):
``` shell
$ home-manager --override-input home-manager ~/devel/home-manager
```
or
2. changing the default path by ensuring your configuration includes
``` nix
programs.home-manager.enable = true;
programs.home-manager.path = "$HOME/devel/home-manager";
```
and running `home-manager switch` to activate the change.
Afterwards, `home-manager build` and `home-manager switch` will use
your cloned repository.
The first option is good if you only temporarily want to use your clone.
-292
View File
@@ -1,292 +0,0 @@
# Guidelines {#sec-guidelines}
If your contribution satisfy the following rules then there is a good
chance it will be merged without too much trouble. The rules are
enforced by the Home Manager maintainers and to a lesser extent the Home
Manager CI system.
If you are uncertain how these rules affect the change you would like to
make then feel free to start a discussion in the
[#home-manager](https://webchat.oftc.net/?channels=home-manager) IRC
channel, ideally before you start developing.
## Maintain backward compatibility {#sec-guidelines-back-compat}
Your contribution should not cause another user's existing configuration
to break unless there is a very good reason and the change should be
announced to the user through an
[assertion](https://nixos.org/manual/nixos/stable/index.html#sec-assertions)
or similar.
Remember that Home Manager is used in many different environments and
you should consider how your change may effect others. For example,
- Does your change work for people that do not use NixOS? Consider
other GNU/Linux distributions and macOS.
- Does your change work for people whose configuration is built on one
system and deployed on another system?
## Keep forward compatibility in mind {#sec-guidelines-forward-compat}
The master branch of Home Manager tracks the unstable channel of
Nixpkgs, which may update package versions at any time. It is therefore
important to consider how a package update may affect your code and try
to reduce the risk of breakage.
The most effective way to reduce this risk is to follow the advice in
[Add only valuable options](#sec-guidelines-valuable-options).
## Add only valuable options {#sec-guidelines-valuable-options}
When creating a new module it is tempting to include every option
supported by the software. This is *strongly* discouraged. Providing
many options increases maintenance burden and risk of breakage
considerably. This is why only the most [important software
options](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md#valuable-options)
should be modeled explicitly. Less important options should be
expressible through an `extraConfig` escape hatch.
A good rule of thumb for the first implementation of a module is to only
add explicit options for those settings that absolutely must be set for
the software to function correctly. It follows that a module for
software that provides sensible default values for all settings would
require no explicit options at all.
If the software uses a structured configuration format like a JSON,
YAML, INI, TOML, or even a plain list of key/value pairs then consider
using a `settings` option as described in [Nix RFC
42](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md).
These guidelines describe the minimum option design requirements. Before
submitting a module, compare it against the upstream documentation or
source code and verify that the generated files, services, environment
variables, and command line arguments all match the upstream behavior
you intend to expose.
If a module installs a package, try to make the package option nullable,
for example
``` nix
package = lib.mkPackageOption pkgs "xdg-terminal-exec" { nullable = true; };
```
This lets users keep installation outside Home Manager, for example via
`apt` or because the program is built into macOS, while still using the
module for configuration. Keeping the package non-nullable is fine when
the enabled behavior structurally requires the executable or when
package-less support would make the module significantly more complex.
Avoid generating files for empty settings, null packages, or optional
features that are not configured.
If upstream does not use XDG paths by default but supports changing the
configuration location with an environment variable, for example
`FOO_HOME`, expose a `configDir` option and use it to respect
`home.preferXdgDirectories`.
## Add relevant tests {#sec-guidelines-add-tests}
If at all possible, make sure to add new tests and expand existing tests
so that your change will keep working in the future. See
[Tests](tests.md#sec-tests) for more information about the Home Manager test
suite.
All contributed code *must* pass the test suite.
## Add relevant documentation {#sec-guidelines-module-maintainer}
Many code changes require changing the documentation as well. The
documentation is written in
[Nixpkgs-flavoured Markdown](https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-markup).
All text is hosted in Home Manager's Git repository.
The HTML version of the manual containing both the module option
descriptions and the documentation of Home Manager can be generated and
opened by typing the following in a shell within a clone of the Home
Manager Git repository:
``` shell
$ nix-build -A docs.html
$ xdg-open ./result/share/doc/home-manager/index.html
```
When you have made changes to a module, it is a good idea to check that
the man page version of the module options looks good:
``` shell
$ nix-build -A docs.manPages
$ man ./result/share/man/man5/home-configuration.nix.5
```
## Module Auto-importing {#sec-module-auto-importing}
Home Manager automatically imports all modules from the `modules/programs/` and
`modules/services/` directories. This auto-importing behavior follows these
rules:
- **Nix files**: All `.nix` files in these directories are automatically
imported
- **Directories**: All subdirectories are automatically imported (typically
containing a `default.nix` file)
- **Exclusions**: Files and directories starting with an underscore (`_`) are
excluded from auto-importing
This allows for flexible module organization:
```
modules/programs/
├── git.nix # Single-file module (imported)
├── firefox/ # Multi-file module (imported)
│ ├── default.nix
│ └── addons.nix
├── _experimental.nix # Excluded (starts with _)
└── _wip/ # Excluded directory (starts with _)
└── newfeature.nix
```
When adding a new module, simply place it in the appropriate directory
(`programs/` for user programs, `services/` for user services) and it will be
automatically discovered and included in the Home Manager module system.
## Add yourself as a module maintainer {#_add_yourself_as_a_module_maintainer}
Every new module *must* include a named maintainer using the
`meta.maintainers` attribute. If you are a user of a module that
currently lacks a maintainer then please consider adopting it.
If you are present in the nixpkgs maintainer list then you can use that
entry. If you are not then you can add yourself to
`modules/lib/maintainers.nix` in the Home Manager project.
As a maintainer you are expected to respond to issues and
pull-requests associated with your module.
Maintainers are encouraged to join the IRC or Matrix channel and
participate when they have opportunity.
## Format your code {#sec-guidelines-code-style}
Make sure your code is formatted as described in [Code
Style](#sec-code-style). To maintain consistency throughout the project
you are encouraged to browse through existing code and adopt its style
also in new code.
## Format your commit messages {#sec-guidelines-commit-message-style}
Similar to [Format your code](#sec-guidelines-code-style) we encourage a
consistent commit message format as described in
[Commits](#sec-commit-style).
## Format your news entries {#sec-guidelines-news-style}
If your contribution includes a change that should be communicated to
users of Home Manager then you can add a news entry. The entry must be
formatted as described in [News](news.md#sec-news).
When new modules are added a news entry should be included.
News entries and release notes serve different purposes. Release notes
should be updated separately when a change affects users migrating
between stable releases, such as state version default changes, required
migration steps, or broad behavior changes. See
[Release Notes](release-notes.md#sec-contributing-release-notes) and [News](news.md#sec-news)
for more details.
## Use conditional modules and news {#sec-guidelines-conditional-modules}
Home Manager includes a number of modules that are only usable on some
of the supported platforms. The most common example of platform specific
modules are those that define systemd user services, which only works on
Linux systems.
If you add a module that is platform specific then make sure the module
guards platform-specific configuration with an appropriate condition, for
example `pkgs.stdenv.hostPlatform.isLinux` or
`pkgs.stdenv.hostPlatform.isDarwin`. Modules in `modules/programs/` and
`modules/services/` are auto-imported, so the platform condition should live
in the module behavior and in any platform-specific tests rather than in a
separate module discovery call.
Similarly, if you are adding a news entry then it should be shown only
to users that may find it relevant, see [News](news.md#sec-news) for a
description of conditional news.
## Mind the license {#sec-guidelines-licensing}
The Home Manager project is covered by the MIT license and we can only
accept contributions that fall under this license, or are licensed in a
compatible way. When you contribute self written code and documentation
it is assumed that you are doing so under the MIT license.
A potential gotcha with respect to licensing are option descriptions.
Often it is convenient to copy from the upstream software documentation.
When this is done it is important to verify that the license of the
upstream documentation allows redistribution under the terms of the MIT
license.
## Commits {#sec-commit-style}
The commits in your pull request should be reasonably self-contained,
that is, each commit should make sense in isolation. In particular, you
will be asked to amend any commit that introduces syntax errors or
similar problems even if they are fixed in a later commit.
Keep commits atomic and separated by concern. For example, a new
maintainer entry should be a separate first commit, and a shared module
should be committed separately from integrations in existing modules.
Pull requests should not include merge commits or fixup commits.
The commit messages should follow the [seven
rules](https://chris.beams.io/posts/git-commit/#seven-rules), except for
\"Capitalize the subject line\". We also ask you to include the affected
code component or module in the first line. That is, a commit message
should follow the template
{component}: {description}
{long description}
where `{component}` refers to the code component (or module) your change
affects, `{description}` is a very brief description of your change, and
`{long description}` is an optional clarifying description. As a rare
exception, if there is no clear component, or your change affects many
components, then the `{component}` part is optional. See
[example_title](#ex-commit-message) for a commit message that fulfills
these requirements.
## Example commit {#ex-commit-message}
The commit
[69f8e47e9e74c8d3d060ca22e18246b7f7d988ef](https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef)
contains the commit message
```
starship: allow running in Emacs if vterm is used
The vterm buffer is backed by libvterm and can handle Starship prompts
without issues.
```
which ticks all the boxes necessary to be accepted in Home Manager.
Finally, when adding a new module, say `programs/foo.nix`, we use the
fixed commit format `foo: add module`. You can, of course, still include
a long description if you wish.
## Code Style {#sec-code-style}
The code in Home Manager is formatted by the [treefmt](https://treefmt.com) tool
and the formatting is checked in the pull request tests. Run `nix fmt` or
`treefmt` (with required formatters which can be found in `treefmt.toml` in your
`$PATH`) inside the project repository before submitting your pull request.
Keep lines at a reasonable width, ideally 80 characters or less. This
also applies to string literals.
We prefer `lowerCamelCase` for variable and attribute names with the
accepted exception of variables directly referencing packages in Nixpkgs
which use a hyphenated style. For example, the Home Manager option
`services.gpg-agent.enableSshSupport` references the `gpg-agent` package
in Nixpkgs.
-81
View File
@@ -1,81 +0,0 @@
# News {#sec-news}
Home Manager includes a system for presenting news to the user. When
making a change you, therefore, have the option to also include an
associated news entry. In general, a news entry should only be added for
truly noteworthy news. For example, a bug fix or new option does
generally not need a news entry.
Release notes and news entries serve different purposes. A news entry is
shown during Home Manager activation and is useful for day-to-day
communication about noteworthy changes, such as a new module, a new
feature, or a specific deprecation. Release notes are read from the
website documentation and should summarize what users need to know before
or during a stable-release upgrade. See
[Release Notes](release-notes.md#sec-contributing-release-notes) for guidance on changes
that affect stable-release upgrades.
If you do have a change worthy of a news entry then please add one in
[`news`](https://github.com/nix-community/home-manager/blob/master/modules/misc/news)
but you should follow some basic guidelines:
- Use the included news entry generator to create a news entry file:
``` shell
$ nix run .#create-news-entry
```
Alternatively, you can directly use the script:
``` shell
$ nix-shell -A dev --run modules/misc/news/create-news-entry.sh
```
This will create a new file inside the `modules/misc/news` directory
with some placeholder information that you can edit.
- The entry condition should be as specific as possible for changes
affecting existing functionality. For example, if you are changing
or deprecating a specific option then you could restrict the news to
those users who actually use this option. Prefer a targeted
condition over skipping useful news only to avoid notifying
unaffected users.
- Wrap the news message so that it will fit in the typical terminal,
that is, at most 80 characters wide. Ideally a bit less.
- Unlike commit messages, news will be read without any connection to
the Home Manager source code. It is therefore important to make the
message understandable in isolation and to those who do not have
knowledge of the Home Manager internals. To this end it should be
written in more descriptive, prose like way.
- If you refer to an option then write its full attribute path. That
is, instead of writing
The option 'foo' has been deprecated, please use 'bar' instead.
it should read
The option 'services.myservice.foo' has been deprecated, please
use 'services.myservice.bar' instead.
- A new module, say `foo.nix`, should always include a news entry that
has a message along the lines of
A new module is available: 'services.foo'.
Since this news announces newly available functionality, its
condition should not require `config.services.foo.enable`; otherwise
users who may want the new module will not see the news.
If the module is platform specific, e.g., a service module using
systemd, then a condition like
``` nix
condition = hostPlatform.isLinux;
```
should be added to avoid showing the news on unsupported platforms.
Use the `create-news-entry` generator described above to scaffold
this entry as part of your contribution.
-24
View File
@@ -1,24 +0,0 @@
# Release Notes {#sec-contributing-release-notes}
Home Manager release notes are published as part of the website documentation in
`docs/release-notes/rl-*.md`. They are intended for users migrating from one
stable release to another.
A change should be mentioned in the release notes when it affects migration
between stable releases. This includes changes that require user action or
awareness during an upgrade, such as:
- breaking changes;
- default changes guarded by `home.stateVersion`;
- required migration steps;
- broad behavior changes across platform or integration boundaries;
- compatibility changes that can affect existing configurations.
Do not use the presence or absence of a news entry to decide whether a change
belongs in the release notes. A change can require a news entry, a release note,
both, or neither.
When preparing a release, review the commits since the previous stable release
and update the upcoming release note file with the migration impact. Prefer
concise user-facing descriptions that name the affected option paths and explain
required action.
-252
View File
@@ -1,252 +0,0 @@
# Tests {#sec-tests}
Home Manager includes a basic test suite and it is highly recommended to
include at least one test when adding a module. Tests are typically in
the form of \"golden tests\" where, for example, a generated
configuration file is compared to a known correct file.
It is relatively easy to create tests by modeling the existing tests,
found in the `tests` project directory.
## Writing Basic Tests {#sec-tests-basic}
Home Manager tests use the **NMT** framework, which provides
a set of assertion functions to verify that modules generate the expected files
and configurations. Tests are written as Nix expressions that define both the
Home Manager configuration and the test assertions.
### Test Structure {#sec-tests-structure}
A basic test file structure looks like:
```nix
{
# Home Manager configuration
programs.myprogram = {
enable = true;
settings = {
option = "value";
};
};
# NMT test script with assertions
nmt.script = ''
assertFileExists "home-files/.config/myprogram/config.toml"
assertFileContent "home-files/.config/myprogram/config.toml" ${./expected-config.toml}
'';
}
```
### Test Organization {#sec-tests-organization}
Tests are organized in the `tests` directory structure:
- `tests/modules/programs/myprogram/default.nix` - Lists all test cases for the module
- `tests/modules/programs/myprogram/basic-configuration.nix` - A basic test case
- `tests/modules/programs/myprogram/expected-config.toml` - Expected output file
The `default.nix` file should list all test cases:
```nix
{
myprogram-basic-configuration = ./basic-configuration.nix;
myprogram-empty-settings = ./empty-settings.nix;
}
```
Prefer keeping related assertions in as few test files as practical.
Exercising several cases in one evaluation keeps the test suite cheaper
to evaluate and reduces maintenance burden. Split cases into separate
files when they need incompatible module configuration, platform
conditions, expected assertion failures, or otherwise cannot share one
evaluation.
### Common NMT Assertions {#sec-tests-assertions}
NMT provides several assertion functions:
- `assertFileExists "path"` - Verify a file was created
- `assertPathNotExists "path"` - Verify a file was NOT created
- `assertFileContent "path" expected-file` - Compare file contents
- `assertFileRegex "path" "regex"` - Check file matches regex
For a full reference to the functions available in test scripts, you can look at NMT's
[bash-lib](https://git.sr.ht/~rycee/nmt/tree/master/item/bash-lib).
### Practical Examples {#sec-tests-examples}
Here are some real-world examples of common test patterns:
**Testing that a configuration file is generated:**
```nix
{
programs.alacritty = {
enable = true;
settings.font.size = 12;
};
nmt.script = ''
assertFileExists "home-files/.config/alacritty/alacritty.yml"
assertFileContains "home-files/.config/alacritty/alacritty.yml" "size: 12"
'';
}
```
**Testing that no files are created when disabled:**
```nix
{
programs.alacritty.enable = false;
nmt.script = ''
assertPathNotExists "home-files/.config/alacritty"
'';
}
```
**Testing exact file content against expected output:**
```nix
{
programs.fastfetch = {
enable = true;
settings.display.color = "blue";
};
nmt.script =
let
configFile = "home-files/.config/fastfetch/config.jsonc";
in
''
assertFileExists "${configFile}"
assertFileContent "${configFile}" ${./expected-config.jsonc}
'';
}
```
**Testing multiple conditions in one test:**
```nix
{
programs.myprogram = {
enable = true;
configFile = "custom.conf";
extraConfig = "debug = true";
};
nmt.script = ''
assertFileExists "home-files/.config/myprogram/custom.conf"
assertFileRegex "home-files/.config/myprogram/custom.conf" "debug = true"
assertFileRegex "home-files/.config/myprogram/custom.conf" "^# Generated by Home Manager"
'';
}
```
### Platform-Specific Tests {#sec-tests-platform-specific}
When a module is platform-specific (Linux-only or Darwin-only), the test's `default.nix`
file should use `lib.optionalAttrs` to conditionally expose tests based on the platform.
This prevents evaluation errors on unsupported platforms during the test suite runs.
**Linux-only module tests:**
```nix
{ lib, pkgs, ... }:
lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
rofi-valid-config = ./valid-config.nix;
rofi-custom-theme = ./custom-theme.nix;
}
```
**Darwin-only module tests:**
```nix
{ lib, pkgs, ... }:
lib.optionalAttrs pkgs.stdenv.hostPlatform.isDarwin {
sketchybar-basic = ./basic-configuration.nix;
sketchybar-lua-config = ./lua-config.nix;
}
```
For cross-platform modules that have packages which need to be stubbed on Darwin,
add the package names to `tests/darwinScrublist.nix` to prevent build failures
during cross-platform test runs.
On Linux, packages are automatically scrubbed by the test infrastructure,
so tests should normally use the module's default package. Use
`test.stubs` or `config.lib.test.mkStubPackage` only when the automatic
scrubbing does not model the behavior that the test needs, such as a
package with additional files or a non-default executable layout.
## Using the tests command {#sec-tests-command}
Home Manager provides a convenient `tests` command for discovering and running tests:
``` shell
# List all available tests
$ nix run .#tests -- -l
# List tests matching a pattern
$ nix run .#tests -- -l alacritty
# Run all tests matching a pattern
$ nix run .#tests -- alacritty
# Run a specific test
$ nix run .#tests -- test-alacritty-empty-settings
# List integration tests
$ nix run .#tests -- -t -l
# Run all integration tests
$ nix run .#tests -- -t integration-test-
# Interactive test selection (requires fzf)
$ nix run .#tests -- -i
# Pass additional nix build flags
$ nix run .#tests -- alacritty -- --verbose
```
Integration tests are only exposed on Linux. On other platforms, integration
test discovery may report no matching tests.
## Manual test commands {#sec-tests-manual}
For advanced usage or CI environments, you can also run tests manually using nix build commands.
The full Home Manager test suite can be run by executing
``` shell
$ nix-build --pure --option allow-import-from-derivation false tests -A build.all
```
in the project root. List all test cases through
``` shell
$ nix run .#tests -- -l
```
and run an individual test, for example `alacritty-empty-settings`,
through
``` shell
$ nix-build --pure tests --option allow-import-from-derivation false -A build.alacritty-empty-settings
```
However, those invocations will impurely source the system's Nixpkgs,
and may cause failures. To run against the Nixpkgs from the `flake.lock` file,
use instead e.g.
``` shell
$ nix build .#test-all
```
or
``` shell
$ nix build .#test-alacritty-empty-settings
```
Some tests may be marked with `enableLegacyIfd`, those may be run by run with e.g.
``` shell
$ nix-build --pure tests --arg enableLegacyIfd true -A build.mytest
```
-10
View File
@@ -1,10 +0,0 @@
# Frequently Asked Questions (FAQ) {#ch-faq}
```{=include=} sections
faq/collision.md
faq/session-variables.md
faq/multiple-users-machines.md
faq/ca-desrt-dconf.md
faq/unstable.md
faq/change-package-module.md
```
-19
View File
@@ -1,19 +0,0 @@
# Why do I get an error message about `ca.desrt.dconf` or `dconf.service`? {#_why_do_i_get_an_error_message_about_literal_ca_desrt_dconf_literal_or_literal_dconf_service_literal}
You are most likely trying to configure something that uses dconf but
the DBus session is not aware of the dconf service. The full error you
might get is
error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
or
error: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit dconf.service not found.
The solution on NixOS is to add
``` nix
programs.dconf.enable = true;
```
to your system configuration.
-117
View File
@@ -1,117 +0,0 @@
# How do I change the package used by a module? {#_how_do_i_change_the_package_used_by_a_module}
By default Home Manager will install the package provided by your chosen
`nixpkgs` channel but occasionally you might end up needing to change
this package. This can typically be done in two ways.
1. If the module provides a `package` option, such as
`programs.beets.package`, then this is the recommended way to
perform the change. For example,
``` nix
programs.beets.package = pkgs.beets.override { pluginOverrides = { beatport.enable = false; }; };
```
See [Nix pill 17](https://nixos.org/guides/nix-pills/nixpkgs-overriding-packages.html)
for more information on package overrides. Alternatively, if you want
to use the `beets` package from Nixpkgs unstable, then a configuration like
``` nix
{ pkgs, config, ... }:
let
pkgsUnstable = import <nixpkgs-unstable> {};
in
{
programs.beets.package = pkgsUnstable.beets;
# …
}
```
should work OK. With flakes, pass the unstable package set as
described in
[How do I install packages from Nixpkgs unstable?](unstable.md#_how_do_i_install_packages_from_nixpkgs_unstable)
and then use the extra module argument:
``` nix
{ pkgsUnstable, ... }:
{
programs.beets.package = pkgsUnstable.beets;
# …
}
```
2. If no `package` option is available then you can typically change
the relevant package using an
[overlay](https://nixos.org/nixpkgs/manual/#chap-overlays).
For example, if you want to use the `programs.skim` module but use
the `skim` package from Nixpkgs unstable, then a configuration like
``` nix
{ pkgs, config, ... }:
let
pkgsUnstable = import <nixpkgs-unstable> {};
in
{
programs.skim.enable = true;
nixpkgs.overlays = [
(_final: _prev: {
skim = pkgsUnstable.skim;
})
];
# …
}
```
should work OK.
The same Home Manager overlay works in a flake-based standalone
configuration if `pkgsUnstable` is passed to the Home Manager
module:
``` nix
{ pkgsUnstable, ... }:
{
programs.skim.enable = true;
nixpkgs.overlays = [
(_final: _prev: {
skim = pkgsUnstable.skim;
})
];
# …
}
```
This also works when Home Manager is used as a NixOS or nix-darwin
module without `home-manager.useGlobalPkgs = true`. If
`home-manager.useGlobalPkgs = true` is enabled, Home Manager uses
the system package set and the `nixpkgs.*` options inside Home
Manager are disabled. In that case, put the overlay in the system
configuration instead, for example:
``` nix
{ pkgsUnstable, ... }:
{
nixpkgs.overlays = [
(_final: _prev: {
skim = pkgsUnstable.skim;
})
];
}
```
In a flake-based NixOS or nix-darwin configuration, pass
`pkgsUnstable` to `nixosSystem` or `darwinSystem` with
`specialArgs`.
-47
View File
@@ -1,47 +0,0 @@
# Why is there a collision error when switching generation? {#_why_is_there_a_collision_error_when_switching_generation}
Home Manager currently installs packages into the user environment,
precisely as if the packages were installed through `nix-env --install`.
This means that you will get a collision error if your Home Manager
configuration attempts to install a package that you already have
installed manually, that is, packages that shows up when you run
`nix-env --query`.
For example, imagine you have the `hello` package installed in your
environment
``` shell
$ nix-env --query
hello-2.10
```
and your Home Manager configuration contains
``` nix
home.packages = [ pkgs.hello ];
```
Then attempting to switch to this configuration will result in an error
similar to
``` shell
$ home-manager switch
these derivations will be built:
/nix/store/xg69wsnd1rp8xgs9qfsjal017nf0ldhm-home-manager-path.drv
[…]
Activating installPackages
replacing old home-manager-path
installing home-manager-path
building path(s) /nix/store/b5c0asjz9f06l52l9812w6k39ifr49jj-user-environment
Wide character in die at /nix/store/64jc9gd2rkbgdb4yjx3nrgc91bpjj5ky-buildenv.pl line 79.
collision between /nix/store/fmwa4axzghz11cnln5absh31nbhs9lq1-home-manager-path/bin/hello and /nix/store/c2wyl8b9p4afivpcz8jplc9kis8rj36d-hello-2.10/bin/hello; use nix-env --set-flag priority NUMBER PKGNAME to change the priority of one of the conflicting packages
builder for /nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv failed with exit code 2
error: build of /nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv failed
```
The solution is typically to uninstall the package from the environment
using `nix-env --uninstall` and reattempt the Home Manager generation
switch.
You could also opt to uninstall *all* of the packages from your profile
with `nix-env --uninstall '*'`.
@@ -1,39 +0,0 @@
# How to set up a configuration for multiple users/machines? {#_how_to_set_up_a_configuration_for_multiple_users_machines}
A typical way to prepare a repository of configurations for multiple
logins and machines is to prepare one \"top-level\" file for each unique
combination.
For example, if you have two machines, called \"kronos\" and \"rhea\" on
which you want to configure your user \"jane\" then you could create the
files
- `kronos-jane.nix`,
- `rhea-jane.nix`, and
- `common.nix`
in your repository. On the kronos and rhea machines you can then make
`~jane/.config/home-manager/home.nix` be a symbolic link to the
corresponding file in your configuration repository.
The `kronos-jane.nix` and `rhea-jane.nix` files follow the format
``` nix
{ ... }:
{
imports = [ ./common.nix ];
# Various options that are specific for this machine/user.
}
```
while the `common.nix` file contains configuration shared across the two
logins. Of course, instead of just a single `common.nix` file you can
have multiple ones, even one per program or service.
You can get some inspiration from the [Post your home-manager home.nix
file!](https://www.reddit.com/r/NixOS/comments/9bb9h9/post_your_homemanager_homenix_file/)
Reddit thread.
-27
View File
@@ -1,27 +0,0 @@
# Why are the session variables not set? {#_why_are_the_session_variables_not_set}
Home Manager is only able to set session variables automatically if it
manages your Bash, Z shell, or fish shell configuration. To enable such
management you use [programs.bash.enable](#opt-programs.bash.enable),
[programs.zsh.enable](#opt-programs.zsh.enable), or [programs.fish.enable](#opt-programs.fish.enable).
If you don't want to let Home Manager manage your shell then you will
have to manually source the
`~/.nix-profile/etc/profile.d/hm-session-vars.sh` file in an appropriate
way. In Bash and Z shell this can be done by adding
``` bash
. "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
```
to your `.profile` and `.zshrc` files, respectively. The
`hm-session-vars.sh` file should work in most Bourne-like shells. For
fish shell, it is possible to source it using [the foreign-env
plugin](https://github.com/oh-my-fish/plugin-foreign-env) or using the builtin
[babelfish](https://github.com/bouk/babelfish)-translated variables:
``` bash
fenv source "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" > /dev/null
# or
source "$HOME/.nix-profile/etc/profile.d/hm-session-vars.fish"
```
-111
View File
@@ -1,111 +0,0 @@
# How do I install packages from Nixpkgs unstable? {#_how_do_i_install_packages_from_nixpkgs_unstable}
If you are using a stable version of Nixpkgs but would like to install
some particular packages from Nixpkgs unstable -- or some other channel
-- then you can import the unstable Nixpkgs and refer to its packages
within your configuration.
With channels, something like
``` nix
{ pkgs, config, ... }:
let
pkgsUnstable = import <nixpkgs-unstable> {};
in
{
home.packages = [
pkgsUnstable.foo
];
# …
}
```
should work provided you have a Nix channel called `nixpkgs-unstable`.
You can add the `nixpkgs-unstable` channel by running
``` shell
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs-unstable
$ nix-channel --update
```
With flakes, add another Nixpkgs input and pass its packages to your
Home Manager modules. For example, a standalone Home Manager flake can
define the following. Replace 25.11 with the release branch your
configuration follows.
``` nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
home-manager.url = "github:nix-community/home-manager/release-25.11";
};
outputs =
{ nixpkgs, nixpkgs-unstable, home-manager, ... }:
let
# Replace this with the system of your Home Manager configuration.
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
pkgsUnstable = nixpkgs-unstable.legacyPackages.${system};
in
{
homeConfigurations.jdoe = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = { inherit pkgsUnstable; };
modules = [ ./home.nix ];
};
};
}
```
and then use the extra argument in `home.nix`:
``` nix
{ pkgsUnstable, ... }:
{
home.packages = [
pkgsUnstable.foo
];
}
```
When Home Manager is used as a NixOS or nix-darwin module, pass the
extra package set with `home-manager.extraSpecialArgs` in the system
configuration:
``` nix
outputs =
{ nixpkgs, nixpkgs-unstable, home-manager, ... }:
let
# Replace this with the system of your NixOS or nix-darwin configuration.
system = "x86_64-linux";
in
{
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
home-manager.nixosModules.home-manager
({ config, ... }: {
home-manager.extraSpecialArgs = {
pkgsUnstable = import nixpkgs-unstable {
inherit system;
config = config.nixpkgs.config;
overlays = config.nixpkgs.overlays;
};
# If you use a stock Nixpkgs configuration, you can use:
# pkgsUnstable = nixpkgs-unstable.legacyPackages.${system};
};
})
];
};
};
```
The nix-darwin setup is the same pattern with
`darwin.lib.darwinSystem` and
`home-manager.darwinModules.home-manager`.
-35
View File
@@ -1,35 +0,0 @@
# Installing Home Manager {#ch-installation}
Home Manager can be used in three primary ways:
1. Using the standalone `home-manager` tool. For platforms other than
NixOS and Darwin, this is the only available choice. It is also
recommended for people on NixOS or Darwin that want to manage their
home directory independently of the system as a whole. See
[Standalone installation](installation/standalone.md#sec-install-standalone) for instructions
on how to perform this installation.
2. As a module within a NixOS system configuration. This allows the
user profiles to be built together with the system when running
`nixos-rebuild`. See [NixOS module](installation/nixos.md#sec-install-nixos-module) for a
description of this setup.
3. As a module within a
[nix-darwin](https://github.com/nix-darwin/nix-darwin/) system
configuration. This allows the user profiles to be built together
with the system when running `darwin-rebuild`. See [nix-darwin
module](installation/nix-darwin.md#sec-install-nix-darwin-module) for a description of this
setup.
:::{.note}
In this chapter we describe how to install Home Manager in the standard
way using channels. If you prefer to use [Nix
Flakes](https://wiki.nixos.org/wiki/Flakes) then please see the instructions
in [nix flakes](nix-flakes.md#ch-nix-flakes).
:::
```{=include=} sections
installation/standalone.md
installation/nixos.md
installation/nix-darwin.md
```
-128
View File
@@ -1,128 +0,0 @@
# nix-darwin module {#sec-install-nix-darwin-module}
Home Manager provides a module that allows you to prepare user
environments directly from the
[nix-darwin](https://github.com/nix-darwin/nix-darwin/) configuration file,
which often is more convenient than using the `home-manager` tool.
To make the nix-darwin module available for use you must `import` it
into your system configuration. This is most conveniently done by adding
a Home Manager channel. For example, if you are following Nixpkgs master
or an unstable channel, you can run
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
$ nix-channel --update
```
and if you follow a Nixpkgs version 26.05 channel, you can run
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
$ nix-channel --update
```
It is then possible to add
``` nix
imports = [ <home-manager/nix-darwin> ];
```
to your nix-darwin `configuration.nix` file, which will introduce a
`home-manager.users` option whose type is an attribute set that maps
user names to Home Manager configurations.
For example, a nix-darwin configuration may include the lines
``` nix
users.users.eve = {
name = "eve";
home = "/Users/eve";
};
home-manager.users.eve = { pkgs, ... }: {
home.packages = [ pkgs.atool pkgs.httpie ];
programs.bash.enable = true;
# The state version is required and should stay at the version you
# originally installed.
home.stateVersion = "26.05";
};
```
and after a `darwin-rebuild switch` the user eve's environment should
include a basic Bash configuration and the packages atool and httpie.
Home Manager activation runs as part of nix-darwin activation for each
configured user.
If you do not plan on having Home Manager manage your shell
configuration then you must add either
``` bash
. "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
```
or
``` bash
. "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh"
```
to your shell configuration, depending on whether
[home-manager.useUserPackages](#nix-darwin-opt-home-manager.useUserPackages) is enabled. This
file can be sourced directly by POSIX.2-like shells such as
[Bash](https://www.gnu.org/software/bash/) or [Z
shell](http://zsh.sourceforge.net/). [Fish](https://fishshell.com) users
can use utilities such as
[foreign-env](https://github.com/oh-my-fish/plugin-foreign-env) or
[babelfish](https://github.com/bouk/babelfish).
:::{.note}
By default user packages will not be ignored in favor of
`environment.systemPackages`, but they will be installed to
`/etc/profiles/per-user/$USERNAME` if
``` nix
home-manager.useUserPackages = true;
```
is added to the nix-darwin configuration. This option may become the
default value in the future.
:::
:::{.note}
By default, Home Manager uses a private `pkgs` instance that is
configured via the `home-manager.users.<name>.nixpkgs` options. To
instead use the global `pkgs` that is configured via the system level
`nixpkgs` options, set
``` nix
home-manager.useGlobalPkgs = true;
```
This saves an extra Nixpkgs evaluation, adds consistency, and removes
the dependency on `NIX_PATH`, which is otherwise used for importing
Nixpkgs.
:::
:::{.note}
Home Manager passes extra module arguments to each
`home-manager.users.<name>` module:
``` nix
{ lib, pkgs, osConfig, darwinConfig, osClass, modulesPath, ... }:
```
Here `osConfig` contains the system's nix-darwin configuration and
`darwinConfig` is a Darwin-specific alias for the same value. The `lib`
argument is Home Manager's extended library. You can pass additional module
arguments with `home-manager.extraSpecialArgs`.
:::
:::{.note}
Use `home-manager.sharedModules` to add Home Manager modules to every user
declared under `home-manager.users`.
:::
Once installed you can see [Using Home Manager](../usage.md#ch-usage) for a more detailed
description of Home Manager and how to use it.
-175
View File
@@ -1,175 +0,0 @@
# NixOS module {#sec-install-nixos-module}
Home Manager provides a NixOS module that allows you to prepare user
environments directly from the system configuration file, which often is
more convenient than using the `home-manager` tool. It also opens up
additional possibilities, for example, to automatically configure user
environments in NixOS declarative containers or on systems deployed
through NixOps.
To make the NixOS module available for use you must `import` it into
your system configuration. This is most conveniently done by adding a
Home Manager channel to the root user. For example, if you are following
Nixpkgs master or an unstable channel, you can run
``` shell
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
$ sudo nix-channel --update
```
and if you follow a Nixpkgs version 26.05 channel, you can run
``` shell
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
$ sudo nix-channel --update
```
It is then possible to add
``` nix
imports = [ <home-manager/nixos> ];
```
to your system `configuration.nix` file, which will introduce a new
NixOS option called `home-manager.users` whose type is an attribute set
that maps user names to Home Manager configurations.
Alternatively, home-manager installation can be done declaratively through configuration.nix using the following syntax:
```nix
{ config, pkgs, lib, ... }:
let
home-manager = builtins.fetchTarball https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz;
in
{
imports =
[
(import "${home-manager}/nixos")
];
users.users.eve.isNormalUser = true;
home-manager.users.eve = { pkgs, ... }: {
home.packages = [ pkgs.atool pkgs.httpie ];
programs.bash.enable = true;
# The state version is required and should stay at the version you
# originally installed.
home.stateVersion = "26.05";
};
}
```
For example, a NixOS configuration may include the lines
``` nix
users.users.eve.isNormalUser = true;
home-manager.users.eve = { pkgs, ... }: {
home.packages = [ pkgs.atool pkgs.httpie ];
programs.bash.enable = true;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "26.05"; # Please read the comment before changing.
};
```
and after a `sudo nixos-rebuild switch` the user eve's environment
should include a basic Bash configuration and the packages atool and
httpie.
:::{.note}
If `nixos-rebuild switch` does not result in the environment you expect,
then the service to inspect depends on the activation mode.
By default, Home Manager activates each configured user during boot and
system rebuilds through a NixOS system service:
``` shell
$ systemctl status "home-manager-$USER.service"
```
If `home-manager.startAsUserService = true` is set, Home Manager instead
activates through the user's systemd service:
``` shell
$ systemctl --user status home-manager.service
```
:::
If you do not plan on having Home Manager manage your shell
configuration then you must add either
``` bash
. "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
```
or
``` bash
. "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh"
```
to your shell configuration, depending on whether
[home-manager.useUserPackages](#nixos-opt-home-manager.useUserPackages) is enabled. This file can
be sourced directly by POSIX.2-like shells such as
[Bash](https://www.gnu.org/software/bash/) or [Z
shell](http://zsh.sourceforge.net/). [Fish](https://fishshell.com) users
can use utilities such as
[foreign-env](https://github.com/oh-my-fish/plugin-foreign-env) or
[babelfish](https://github.com/bouk/babelfish).
:::{.note}
By default packages will be installed to `$HOME/.nix-profile` but they
can be installed to `/etc/profiles` if
``` nix
home-manager.useUserPackages = true;
```
is added to the system configuration. This is necessary if, for example,
you wish to use `nixos-rebuild build-vm`. This option may become the
default value in the future.
:::
:::{.note}
By default, Home Manager uses a private `pkgs` instance that is
configured via the `home-manager.users.<name>.nixpkgs` options. To
instead use the global `pkgs` that is configured via the system level
`nixpkgs` options, set
``` nix
home-manager.useGlobalPkgs = true;
```
This saves an extra Nixpkgs evaluation, adds consistency, and removes
the dependency on `NIX_PATH`, which is otherwise used for importing
Nixpkgs.
:::
:::{.note}
Home Manager passes extra module arguments to each
`home-manager.users.<name>` module:
``` nix
{ lib, pkgs, osConfig, nixosConfig, osClass, modulesPath, ... }:
```
Here `osConfig` contains the system's NixOS configuration and `nixosConfig`
is a NixOS-specific alias for the same value. The `lib` argument is Home
Manager's extended library. You can pass additional module arguments with
`home-manager.extraSpecialArgs`.
:::
:::{.note}
Use `home-manager.sharedModules` to add Home Manager modules to every user
declared under `home-manager.users`.
:::
Once installed you can see [Using Home Manager](../usage.md#ch-usage) for a more detailed
description of Home Manager and how to use it.
-75
View File
@@ -1,75 +0,0 @@
# Standalone installation {#sec-install-standalone}
1. Make sure you have a working Nix installation. Specifically, make
sure that your user is able to build and install Nix packages. For
example, you should be able to successfully run a command like
`nix-instantiate '<nixpkgs>' -A hello` without having to switch to
the root user. For a multi-user install of Nix this means that your
user must be covered by the
[`allowed-users`](https://nixos.org/nix/manual/#conf-allowed-users)
Nix option. On NixOS you can control this option using the
[`nix.settings.allowed-users`](https://nixos.org/manual/nixos/stable/options.html#opt-nix.settings.allowed-users)
system option.
2. Add the appropriate Home Manager channel. If you are following
Nixpkgs master or an unstable channel you can run
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
$ nix-channel --update
```
and if you follow a Nixpkgs version 26.05 channel you can run
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
$ nix-channel --update
```
3. Run the Home Manager installation command and create the first Home
Manager generation:
``` shell
$ nix-shell '<home-manager>' -A install
```
Once finished, Home Manager should be active and available in your
user environment.
4. If you do not plan on having Home Manager manage your shell
configuration then you must source the
``` bash
$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
```
file in your shell configuration. Alternatively source
``` bash
/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh
```
when managing home configuration together with system configuration.
This file can be sourced directly by POSIX.2-like shells such as
[Bash](https://www.gnu.org/software/bash/) or [Z
shell](http://zsh.sourceforge.net/). [Fish](https://fishshell.com)
users can use utilities such as
[foreign-env](https://github.com/oh-my-fish/plugin-foreign-env) or
[babelfish](https://github.com/bouk/babelfish).
For example, if you use Bash then add
``` bash
. "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
```
to your `~/.profile` file.
If instead of using channels you want to run Home Manager from a Git
checkout of the repository then you can use the
[home-manager.path](#opt-programs.home-manager.path) option to specify the absolute
path to the repository.
Once installed you can see [Using Home Manager](../usage.md#ch-usage) for a more detailed
description of Home Manager and how to use it.
-11
View File
@@ -1,11 +0,0 @@
# Home Manager Internals {#ch-internals}
This chapter collects some documentation about the internal workings
of Home Manager. The information here is mostly aimed to developers of
Home Manager and those who do non-trivial integration with Home
Manager.
```{=include=} sections
internals/activation.md
```
-40
View File
@@ -1,40 +0,0 @@
# Activation {#sec-internals-activation}
Activating a Home Manager configuration ensures that the built
configuration is introduced into the user's environment. The
activation is performed by a suitably named script
{command}`activate`. This script is generated as part of the
configuration build and is placed in the root of the build output.
The activation script is implemented in the Bash language and consists
of initialization code followed by a number of _activation script
blocks_. These blocks are specified using the
[home.activation](#opt-home.activation) option. The blocks may have
dependencies among themselves and the generated activation script will
contain the blocks serialized such that the dependencies are
satisfied. A dependency cycle causes a failure when the configuration
is built.
Historically, the activation script has been responsible for creating
a new generation of the `home-manager` Nix profile. The more modern
way, however, is to let the _activation driver_ that is, the
software calling the activation script manage the profile. Indeed,
in some cases we may not have a `home-manager` profile at all! This is
the case when Home Manager is used as a NixOS or nix-darwin module, in
these cases the system profile will contain references to the
corresponding Home Manager configurations.
Note, to maintain backwards compatibility, the old activation script
behavior is still the default. To choose the new mode of operation you
have to call the activation script with the command line option
`--driver-version 1`. The old behavior is available using
`--driver-version 0`, or simply omit it entirely.
Unfortunately, driver software need to support both modes of operation
for the time being since a user may wish to activate an old generation
that contains an activation script that does not support
`--driver-version`. To determine whether support is available, check
the {file}`gen-version` file in the configuration build output root.
If the file is missing then the activation script does not support
`--driver-version`. If the file exists and contains the integer 1 or
higher, then `--driver-version 1` is supported.
-32
View File
@@ -1,32 +0,0 @@
# Introduction to Home Manager {#ch-introduction}
Home Manager is a [Nix](https://nix.dev/)-powered tool for reproducible management of the contents of users' home directories.
This includes programs, configuration files, environment variables and, well… arbitrary files.
The following example snippet of Nix code:
```nix
programs.git = {
enable = true;
userEmail = "joe@example.org";
userName = "joe";
};
```
would make available to a user the `git` executable and man pages and a configuration file `~/.config/git/config`:
```ini
[user]
email = "joe@example.org"
name = "joe"
```
Since Home Manager is implemented in Nix, it provides several benefits:
- Contents are reproducible — a home will be the exact same every time it is built, unless of course, an intentional change is made.
This also means you can have the exact same home on different hosts.
- Significantly faster and more powerful than various backup strategies.
- Unlike "dotfiles" repositories, Home Manager supports specifying programs, as well as their configurations.
- Supported by <http://cache.nixos.org/>, so that you don't have to build from source.
- If you do want to build some programs from source, there is hardly a tool more useful than Nix for that, and the build instructions can be neatly integrated in your Home Manager usage.
- Infinitely composable, so that values in different configuration files and build instructions can share a source of truth.
- Connects you with the [most extensive](https://repology.org/repositories/statistics/total) and [most up-to-date](https://repology.org/repositories/statistics/newest) software package repository on earth, [Nixpkgs](https://github.com/NixOS/nixpkgs).
-35
View File
@@ -1,35 +0,0 @@
# Home Manager Manual {#home-manager-manual}
## Version 26.11 (unstable)
```{=include=} preface
preface.md
```
```{=include=} parts
introduction.md
installation.md
usage.md
nix-flakes.md
writing-modules.md
contributing.md
internals.md
3rd-party.md
faq.md
```
```{=include=} appendix html:into-file=//options.xhtml
options.md
```
```{=include=} appendix html:into-file=//nixos-options.xhtml
nixos-options.md
```
```{=include=} appendix html:into-file=//nix-darwin-options.xhtml
nix-darwin-options.md
```
```{=include=} appendix html:into-file=//release-notes.xhtml
release-notes/release-notes.md
```
-7
View File
@@ -1,7 +0,0 @@
# nix-darwin Configuration Options {#ch-nix-darwin-options}
```{=include=} options
id-prefix: nix-darwin-opt-
list-id: nix-darwin-options
source: @OPTIONS_JSON@
```
-56
View File
@@ -1,56 +0,0 @@
# Nix Flakes {#ch-nix-flakes}
Home Manager is compatible with [Nix
Flakes](https://wiki.nixos.org/wiki/Flakes). But please be aware that this
support is still experimental and may change in backwards
incompatible ways.
Just like in the standard installation you can use the Home Manager
flake in three ways:
1. Using the standalone `home-manager` tool. For platforms other than
NixOS and Darwin, this is the only available choice. It is also
recommended for people on NixOS or Darwin that want to manage their
home directory independently of the system as a whole. See
[Standalone setup](nix-flakes/standalone.md#sec-flakes-standalone) for instructions on how
to perform this installation.
2. As a module within a NixOS system configuration. This allows the
user profiles to be built together with the system when running
`nixos-rebuild`. See [NixOS module](nix-flakes/nixos.md#sec-flakes-nixos-module) for a
description of this setup.
3. As a module within a [nix-darwin](https://github.com/nix-darwin/nix-darwin/)
system configuration. This allows the user profiles to be built
together with the system when running `darwin-rebuild`. See
[nix-darwin module](nix-flakes/nix-darwin.md#sec-flakes-nix-darwin-module) for a
description of this setup.
Advanced users may want Home Manager's `nixpkgs` input to follow the
same Nixpkgs input as the rest of their flake. This avoids a second
Nixpkgs input and makes Home Manager use the same pinned Nixpkgs source
revision as the rest of the configuration:
``` nix
home-manager.inputs.nixpkgs.follows = "nixpkgs";
```
This removes the compatibility assumption between Home Manager and the
Nixpkgs revision in Home Manager's own lock file, so use it carefully,
especially when tracking unstable branches.
This does not by itself make Home Manager use the same `pkgs` value as
your NixOS or nix-darwin system. In NixOS and nix-darwin module setups,
`home-manager.useGlobalPkgs = true` controls that behavior by making
Home Manager modules receive the system `pkgs` value. When
`home-manager.useGlobalPkgs` is enabled, configure Nixpkgs overlays and
configuration at the system level instead of through Home Manager
`nixpkgs.*` options.
```{=include=} sections
nix-flakes/prerequisites.md
nix-flakes/standalone.md
nix-flakes/nixos.md
nix-flakes/nix-darwin.md
nix-flakes/flake-parts.md
```
-63
View File
@@ -1,63 +0,0 @@
# flake-parts module {#sec-flakes-flake-parts-module}
When using [flake-parts](https://flake.parts) you may wish to import Home
Manager's flake module, `flakeModules.home-manager`.
```nix
{
description = "flake-parts configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
home-manager.url = "github:nix-community/home-manager";
flake-parts.url = "github:hercules-ci/flake-parts";
};
outputs = inputs@{
flake-parts,
home-manager,
nixpkgs,
...
}:
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [
# Import home-manager's flake module
inputs.home-manager.flakeModules.home-manager
];
flake = {
# Reusable Home Manager module.
homeModules.bash= { pkgs, ... }: {
programs.bash = {
enable = true;
shellAliases = {
ll = "ls -l";
};
};
home.packages = [ pkgs.hello ];
};
# Concrete Home Manager configuration.
homeConfigurations.alice = home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs { system = "x86_64-linux"; };
modules = [
inputs.self.homeModules.bash
{
home.username = "alice";
home.homeDirectory = "/home/alice";
home.stateVersion = "25.11";
}
];
};
};
# See flake.parts for more features, such as `perSystem`
};
}
```
The flake module defines the `flake.homeModules` and `flake.homeConfigurations`
options, allowing them to be properly merged if they are defined in multiple
modules.
If you are only defining `homeModules` and/or `homeConfigurations` once in a
single module, flake-parts should work fine without importing
`flakeModules.home-manager`.
-59
View File
@@ -1,59 +0,0 @@
# nix-darwin module {#sec-flakes-nix-darwin-module}
The flake-based setup of the Home Manager nix-darwin module is similar
to that of NixOS. The `flake.nix` would be:
``` nix
{
description = "Darwin configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
darwin.url = "github:nix-darwin/nix-darwin";
darwin.inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager";
};
outputs = inputs@{ nixpkgs, home-manager, darwin, ... }: {
darwinConfigurations = {
hostname = darwin.lib.darwinSystem {
system = "x86_64-darwin";
modules = [
./configuration.nix
home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.jdoe = ./home.nix;
}
];
};
};
};
}
```
Use `home-manager.extraSpecialArgs` to pass arguments from your flake to
`home.nix` and any imported Home Manager modules. For example, the
configuration above makes the complete `inputs` attrset available to modules,
so they can declare arguments such as `{ inputs, ... }:`.
The lower-level mechanism behind this is `_module.args`. Set
`_module.args.<name>` from inside a module only when you need to provide a
module argument from within the module graph itself. For values that originate
outside the module graph, such as flake inputs, prefer
`home-manager.extraSpecialArgs`.
Use `home-manager.sharedModules` for Home Manager modules or settings that
should be imported by every user declared in `home-manager.users`.
The Home Manager configuration is also rebuilt with the nix-darwin
generations. The rebuild command here may be
`darwin-rebuild switch --flake ~/.config/darwin`.
You can use the above `flake.nix` as a template in `~/.config/darwin` by
``` shell
$ nix flake new ~/.config/darwin -t github:nix-community/home-manager#nix-darwin
```
-61
View File
@@ -1,61 +0,0 @@
# NixOS module {#sec-flakes-nixos-module}
To use Home Manager as a NixOS module, a bare-minimum `flake.nix` would
be as follows:
``` nix
{
description = "NixOS configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
home-manager.url = "github:nix-community/home-manager";
};
outputs = inputs@{ nixpkgs, home-manager, ... }: {
nixosConfigurations = {
hostname = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.jdoe = ./home.nix;
}
];
};
};
};
}
```
Use `home-manager.extraSpecialArgs` to pass arguments from your flake to
`home.nix` and any imported Home Manager modules. For example, the
configuration above makes the complete `inputs` attrset available to modules,
so they can declare arguments such as `{ inputs, ... }:`.
The lower-level mechanism behind this is `_module.args`. Set
`_module.args.<name>` from inside a module only when you need to provide a
module argument from within the module graph itself. For values that originate
outside the module graph, such as flake inputs, prefer
`home-manager.extraSpecialArgs`.
Use `home-manager.sharedModules` for Home Manager modules or settings that
should be imported by every user declared in `home-manager.users`.
The Home Manager configuration is then part of the NixOS configuration
and is automatically rebuilt with the system when using the appropriate
command for the system, such as
``` shell
$ nixos-rebuild switch --flake /etc/nixos
```
You can use the above `flake.nix` as a template in `/etc/nixos` by
``` shell
$ nix flake new /etc/nixos -t github:nix-community/home-manager#nixos
```
-37
View File
@@ -1,37 +0,0 @@
# Prerequisites {#sec-flakes-prerequisites}
- Install Nix 2.4 or later, or have it in `nix-shell`.
- Enable experimental features `nix-command` and `flakes`.
- When using NixOS, add the following to your `configuration.nix`
and rebuild your system.
``` nix
nix.settings.experimental-features = "nix-command flakes";
```
- If you are not using NixOS, add the following to `nix.conf`
(located at `~/.config/nix/` or `/etc/nix/nix.conf`).
``` bash
experimental-features = nix-command flakes
```
You may need to restart the Nix daemon with, for example,
`sudo systemctl restart nix-daemon.service`.
- Alternatively, you can enable flakes on a per-command basis with
the following additional flags to `nix` and `home-manager`:
``` shell
$ nix --extra-experimental-features "nix-command flakes" <sub-commands>
$ home-manager --extra-experimental-features "nix-command flakes" <sub-commands>
```
- Prepare your Home Manager configuration (`home.nix`).
Unlike the channel-based setup, `home.nix` will be evaluated when
the flake is built, so it must be present before bootstrap of Home
Manager from the flake. See [Configuration Example](../usage/configuration.md#sec-usage-configuration) for
introduction about writing a Home Manager configuration.
-90
View File
@@ -1,90 +0,0 @@
# Standalone setup {#sec-flakes-standalone}
To prepare an initial Home Manager configuration for your logged in
user, you can run the Home Manager `init` command directly from its
flake.
For example, if you are using the unstable version of Nixpkgs or NixOS,
then to generate and activate a basic configuration run the command
``` shell
$ nix run home-manager/master -- init --switch
```
For Nixpkgs or NixOS version 26.05 run
``` shell
$ nix run home-manager/release-26.05 -- init --switch
```
This will generate a `flake.nix` and a `home.nix` file in
`~/.config/home-manager`, creating the directory if it does not exist.
If you need to pass additional values from your flake to `home.nix` or any
imported Home Manager modules, use `extraSpecialArgs` in the call to
`home-manager.lib.homeManagerConfiguration`:
``` nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
home-manager.url = "github:nix-community/home-manager";
};
outputs = inputs@{ nixpkgs, home-manager, ... }: {
homeConfigurations.jdoe = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = { inherit inputs; };
modules = [ ./home.nix ];
};
};
}
```
Any attribute in `extraSpecialArgs` becomes a module argument, so `home.nix`
or imported modules can declare arguments such as `{ inputs, ... }:`.
The lower-level mechanism behind this is `_module.args`. Set
`_module.args.<name>` from inside a module only when you need to provide a
module argument from within the module graph itself. For values that originate
outside the module graph, such as flake inputs, prefer `extraSpecialArgs`.
If you omit the `--switch` option then the activation will not happen.
This is useful if you want to inspect and edit the configuration before
activating it.
``` shell
$ nix run home-manager/$branch -- init
$ # Edit files in ~/.config/home-manager
$ nix run home-manager/$branch -- init --switch
```
Where `$branch` is one of `master` or `release-26.05`.
After the initial activation has completed successfully then building
and activating your flake-based configuration is as simple as
``` shell
$ home-manager switch
```
It is possible to override the default configuration directory, if you
want. For example,
``` shell
$ nix run home-manager/$branch -- init --switch ~/hmconf
$ # And after the initial activation.
$ home-manager switch --flake ~/hmconf
```
::: {.note}
The flake inputs are not automatically updated by Home Manager. Update
the lock file with `nix flake update` before switching if you want to
use newer input revisions.
If you only want to update specific flake inputs, name them explicitly,
for example `nix flake update nixpkgs home-manager`.
These commands assume that your current directory is the flake. If not,
pass the flake path or URI with `--flake <flake-uri>`.
:::
-7
View File
@@ -1,7 +0,0 @@
# NixOS Configuration Options {#ch-nixos-options}
```{=include=} options
id-prefix: nixos-opt-
list-id: nixos-options
source: @OPTIONS_JSON@
```
-7
View File
@@ -1,7 +0,0 @@
# Home Manager Configuration Options {#ch-options}
```{=include=} options
id-prefix: opt-
list-id: home-manager-options
source: @OPTIONS_JSON@
```
-20
View File
@@ -1,20 +0,0 @@
# Preface {#preface}
This manual will eventually describe how to install, use, and extend Home
Manager.
If you encounter problems then please reach out on the IRC channel
[#home-manager](https://webchat.oftc.net/?channels=home-manager)
hosted by [OFTC](https://oftc.net/).
There is also a [Matrix room](https://matrix.to/#/%23hm:rycee.net),
which is bridged to the IRC channel.
If your problem is caused by a bug in Home Manager then it should
be reported on the
[Home Manager issue tracker](https://github.com/nix-community/home-manager/issues).
:::{.note}
Commands prefixed with `$ sudo` have to be run as root, either
requiring to login as root user or temporarily switching to it using
`sudo` for example.
:::
-66
View File
@@ -1,66 +0,0 @@
# Using Home Manager {#ch-usage}
Your use of Home Manager is centered around the configuration file,
which is typically found at `~/.config/home-manager/home.nix` in the
standard installation or `~/.config/home-manager/flake.nix` in a Nix
flake based installation.
::: {.note}
The default configuration used to be placed in `~/.config/nixpkgs`¸ so
you may see references to that elsewhere. The old directory still works
but Home Manager will print a warning message when used.
:::
This configuration file can be *built* and *activated*.
Building a configuration produces a directory in the Nix store that
contains all files and programs that should be available in your home
directory and Nix user profile, respectively. The build step also checks
that the configuration is valid and it will fail with an error if you,
for example, assign a value to an option that does not exist or assign a
value of the wrong type. Some modules also have custom assertions that
perform more detailed, module specific, checks.
Concretely, if your configuration contains
``` nix
programs.emacs.enable = "yes";
```
then building it, for example using `home-manager build`, will result in
an error message saying something like
```console
$ home-manager build
error: A definition for option `programs.emacs.enable' is not of type `boolean'. Definition values:
- In `/home/jdoe/.config/home-manager/home.nix': "yes"
(use '--show-trace' to show detailed location information)
```
The message indicates that you must provide a Boolean value for this
option, that is, either `true` or `false`. The documentation of each
option will state the expected type, for
[programs.emacs.enable](#opt-programs.emacs.enable) you will see "Type: boolean". You
there also find information about the default value and a description of
the option. You can find the complete option documentation in
[Home Manager Configuration Options](options.md#ch-options) or directly in the terminal by running
``` shell
man home-configuration.nix
```
Once a configuration is successfully built, it can be activated. The
activation performs the steps necessary to make the files, programs, and
services available in your user environment. The `home-manager switch`
command performs a combined build and activation.
```{=include=} sections
usage/configuration.md
usage/rollbacks.md
usage/dotfiles.md
usage/graphical.md
usage/gpu-non-nixos.md
usage/modular-services.md
usage/updating.md
usage/upgrading.md
```
-112
View File
@@ -1,112 +0,0 @@
# Configuration Example {#sec-usage-configuration}
A fresh install of Home Manager will generate a minimal
`~/.config/home-manager/home.nix` file containing something like
``` nix
{ config, pkgs, ... }:
{
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "jdoe";
home.homeDirectory = "/home/jdoe";
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "26.05";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}
```
You can use this as a base for your further configurations.
::: {.note}
If you are not very familiar with the Nix language and NixOS modules
then it is encouraged to start with small and simple changes. As you
learn you can gradually grow the configuration with confidence.
:::
As an example, let us expand the initial configuration file to also
install the htop and fortune packages, install Emacs with a few extra
packages available, and enable the user gpg-agent service.
To satisfy the above setup we should elaborate the `home.nix` file as
follows:
``` nix
{ config, pkgs, ... }:
{
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "jdoe";
home.homeDirectory = "/home/jdoe";
# Packages that should be installed to the user profile.
home.packages = [
pkgs.htop
pkgs.fortune
];
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "26.05";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
programs.emacs = {
enable = true;
extraPackages = epkgs: [
epkgs.nix-mode
epkgs.magit
];
};
services.gpg-agent = {
enable = true;
defaultCacheTtl = 1800;
enableSshSupport = true;
};
}
```
- Nixpkgs packages can be installed to the user profile using
[home.packages](#opt-home.packages).
- The option names of a program module typically start with
`programs.<package name>`.
- Similarly, for a service module, the names start with
`services.<package name>`. Note in some cases a package has both
programs *and* service options -- Emacs is such an example.
To activate this configuration you can run
``` shell
home-manager switch
```
or if you are not feeling so lucky,
``` shell
home-manager build
```
which will create a `result` link to a directory containing an
activation script and the generated home directory files.
-169
View File
@@ -1,169 +0,0 @@
# Keeping your \~ safe from harm {#sec-usage-dotfiles}
To configure programs and services Home Manager must write various
things to your home directory. To prevent overwriting any existing files
when switching to a new generation, Home Manager will attempt to detect
collisions between existing files and generated files. If any such
collision is detected the activation will terminate before changing
anything on your computer.
For example, suppose you have a wonderful, painstakingly created
`~/.config/git/config` and add
``` nix
{
# …
programs.git = {
enable = true;
userName = "Jane Doe";
userEmail = "jane.doe@example.org";
};
# …
}
```
to your configuration. Attempting to switch to the generation will then
result in
``` shell
$ home-manager switch
Activating checkLinkTargets
Existing file '/home/jdoe/.config/git/config' is in the way
Please move the above files and try again
```
This error is about a file that Home Manager wants to manage as a
symbolic link in your home directory. It is separate from package
profile collisions, which usually mention `installPackages` or a
`collision between .../bin/...` path. For package collisions, see
[Why is there a collision error when switching generation?](../faq/collision.md#_why_is_there_a_collision_error_when_switching_generation).
## Resolving file collisions {#sec-usage-dotfiles-collisions}
The safest resolution is to inspect the existing path, move any
settings you want Home Manager to manage into your configuration, and
remove or move the unmanaged file before switching again.
For a standalone Home Manager installation, you can ask Home Manager to
move unmanaged non-symlink paths out of the way during activation:
``` shell
home-manager switch -b backup
```
With the command above, a colliding `~/.config/git/config` is moved to
`~/.config/git/config.backup` before Home Manager links the managed
file. If the backup path already exists then activation still aborts, so
choose an extension whose backup path does not already exist.
Standalone activation can also run a custom command for each collision:
``` shell
home-manager switch -B trash-put
```
The command receives the colliding path as an argument and must move or
remove that path. If both `-B` and `-b` are set, the custom command takes
precedence; the command may still use the
`HOME_MANAGER_BACKUP_EXT` environment variable set by `-b`.
When Home Manager is used as a NixOS or nix-darwin module, configure the
corresponding module options instead of passing standalone command line
flags:
``` nix
{
home-manager.backupFileExtension = "backup";
}
```
or
``` nix
{
home-manager.backupCommand = "${pkgs.trash-cli}/bin/trash-put";
}
```
If both {option}`home-manager.backupCommand` and
{option}`home-manager.backupFileExtension` are set, the command takes
precedence. The extension is still exported to the command as
`HOME_MANAGER_BACKUP_EXT`, so the command can use it when implementing
its own backup naming. With
{option}`home-manager.backupFileExtension`, Home Manager refuses to
replace an existing backup path unless
{option}`home-manager.overwriteBackup` is enabled:
``` nix
{
home-manager.backupFileExtension = "backup";
home-manager.overwriteBackup = true;
}
```
::: {.warning}
{option}`home-manager.overwriteBackup` allows activation to clobber
existing backup files. Only enable it when those backup paths are
disposable.
:::
For individual files, many file options also support `force = true`:
``` nix
{
home.file.".config/example" = {
source = ./example;
force = true;
};
}
```
This skips the collision check for the affected target and lets Home
Manager replace the existing file or link. Use it sparingly; it can
silently delete local changes.
Backup commands and backup extensions are intended for unmanaged
non-symlink paths. If the colliding target is an unmanaged symbolic
link, move it manually or use `force = true` after checking that the
link target is safe to replace.
## Advanced file behavior {#sec-usage-dotfiles-advanced}
The notes below apply to {option}`home.file` and to options based on the
same file type, such as {option}`xdg.configFile`.
When a file source is a directory, {option}`home.file.<name>.recursive`
changes how the directory is linked. With the default `recursive =
false`, the target is one symbolic link to the source directory. With
`recursive = true`, Home Manager creates a matching directory tree and
links each leaf file into it.
Recursive directory linking has special overlap behavior. A direct
duplicate target, such as two managed files both targeting `foo`, is an
error. If a recursively linked directory provides `foo/bar` and another
managed file also targets `foo/bar`, Home Manager keeps the recursive
file by default and ignores the overlapping regular file.
The {option}`home.file.<name>.onChange` hook runs after the new files
are linked. For recursive file entries, the hook is always run, so it
should be written to be safe even when no leaf file actually changed.
Normally a path assigned to {option}`home.file.<name>.source` is copied
or linked through the Nix store. To make Home Manager create a link to a
live path outside the store, use
`config.lib.file.mkOutOfStoreSymlink`:
``` nix
{ config, ... }:
{
home.file.".config/example".source =
config.lib.file.mkOutOfStoreSymlink ./example;
}
```
This is useful when the target should follow changes to a mutable file
or directory outside the store.
-203
View File
@@ -1,203 +0,0 @@
# GPU on non-NixOS systems {#sec-usage-gpu-non-nixos}
To access the GPU, programs need access to OpenGL and Vulkan libraries. While
this works transparently on NixOS, it does not on other Linux systems. There are
two options:
1. Recommended: modify the host system slightly so that the graphics libraries
can be found where programs from Nixpkgs can find them.
2. Wrap programs from Nixpkgs in an environment which tells them where to find
graphics libraries.
The first option is very clean because the needed modifications to the host OS
are small. However, it does require root/sudo access to the system, which may
not be available. The second approach avoids that. However, it injects libraries
from Nixpkgs into the environment of wrapped programs, which can make it
impossible to launch programs of the host OS from wrapped programs.
## When sudo is available: fixing the host OS {#sec-usage-gpu-sudo}
The {option}`targets.genericLinux.gpu` module is automatically enabled whenever
the option {option}`targets.genericLinux.enable` is set (unless
[NixGL](#sec-usage-gpu-nosudo) is used instead), which is recommended for
non-NixOS Linux distributions in any case. The module can also be explicitly
enabled by setting {option}`targets.genericLinux.gpu.enable`.
This module builds a directory containing GPU libraries. When activating the
home configuration by `home-manager switch`, the host system is examined: for
compatibility with NixOS, these libraries need to be placed in
`/run/opengl-driver`. If this directory does not exist, or contains a different
set of libraries, the activation script will print a warning such as
```text
Activating checkExistingGpuDrivers
GPU drivers require an update, run
sudo /nix/store/HASH-non-nixos-gpu/bin/non-nixos-gpu-setup
```
Because the `/run` directory is volatile and disappears on reboot, libraries
cannot be simply copied or linked there. The `non-nixos-gpu-setup` script
installs a
[`tmpfiles.d`](https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html)
config which ensures that the drivers are linked to `/run/opengl-driver` on
boot. Home Manager will always check and warn you when this setup needs to be
refreshed.
If you ever wish to uninstall these drivers, all you need to do is
```sh
sudo rm /run/opengl-driver
sudo rm /etc/tmpfiles.d/non-nixos-gpu.conf
```
### GPU offloading {#sec-usage-gpu-offloading}
You can use the {option}`targets.genericLinux.nixGL.prime.installScript` option.
It installs the `prime-offload` script which is configured through options under
{option}`targets.genericLinux.nixGL.prime`. This functionality is independent
from the rest of NixGL and can be used when
{option}`targets.genericLinux.nixGL.packages` is left `null`, which it should be
when using drivers from `/run/opengl-driver`.
### Nvidia drivers {#sec-usage-gpu-nvidia}
If you need to include the proprietary Nvidia drivers, the process is a bit more
involved. You need to:
1. Determine the exact version used by the host system. Example: `550.163.01`
1. Fetch that version of the drivers from Nvidia and calculate their hash.
Example:
```sh
nix store prefetch-file \
https://download.nvidia.com/XFree86/Linux-x86_64/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run
```
Attention: the version and architecture are present twice. If you are on an
ARM system, replace `x86_64` with `aarch64`.
1. Put this information into your home configuration. Example:
```nix
targets.genericLinux.gpu.nvidia = {
enable = true;
version = "550.163.01";
sha256 = "sha256-74FJ9bNFlUYBRen7+C08ku5Gc1uFYGeqlIh7l1yrmi4=";
};
```
::: {.warning}
The Nvidia driver version **must** match the host system. This means that you
must pay attention when upgrading the system and update the home configuration
as well.
:::
## No root access: wrapping programs {#sec-usage-gpu-nosudo}
The wrapping approach is facilitated by
[NixGL](https://github.com/nix-community/nixGL), which can be integrated into
Home Manager.
::: {.warning}
This approach can cause issues when a wrapped program from Nixpkgs executes a
program from the host. For example, Firefox from Nixpkgs must be wrapped by
NixGL in order for graphical acceleration to work. If you then download a PDF
file and open it in a PDF viewer that is not installed from Nixpkgs but is
provided by the host distribution, there may be issues. Because Firefox's
environment injects libraries from NixGL, they are inherited by the PDF viewer,
and unless they are the same or compatible version as the libraries on the host,
the viewer will not work. This problem manifests more often with Vulkan because
it needs a larger set of injected libraries than OpenGL.
The problem typically manifests with errors similar to
```text
/nix/store/HASH-gcc-12.3.0-lib/lib/libstdc++.so.6: version `GLIBCXX_3.4.31' not found
```
:::
To enable the integration, import NixGL into your home configuration, either as
a channel, or as a flake input passed via `extraSpecialArgs`. Then, set the
`targets.genericLinux.nixGL.packages` option to the package set provided by
NixGL.
Once integration is enabled, it can be used in two ways: as Nix functions for
wrapping programs installed via Home Manager, and as shell commands for running
programs installed by other means (such as `nix shell`). In either case, there
are several wrappers available. They can be broadly categorized
- by vendor: as Mesa (for Free drivers of all vendors) and Nvidia (for
Nvidia-specific proprietary drivers).
- by GPU selection: as primary and secondary (offloading).
For example, the `mesa` wrapper provides support for running programs on the
primary GPU for Intel, AMD and Nouveau drivers, while the `mesaPrime` wrapper
does the same for the secondary GPU.
**Note:** when using Nvidia wrappers together with flakes, your home
configuration will not be pure and needs to be built using `home-manager switch
--impure`. Otherwise, the build will fail, complaining about missing attribute
`currentTime`.
Wrapper functions are available under `config.lib.nixGL.wrappers`. However, it
can be more convenient to use the `config.lib.nixGL.wrap` alias, which can be
configured to use any of the wrappers. It is intended to provide a customization
point when the same home configuration is used across several machines with
different hardware. There is also the `config.lib.nixGL.wrapOffload` alias for
two-GPU systems.
Another convenience is that all wrapper functions are always available. However,
when `targets.genericLinux.nixGL.packages` option is unset, they are no-ops.
This allows them to be used even when the home configuration is used on NixOS
machines. The exception is the `prime-offload` script which ignores
`targets.genericLinux.nixGL.packages` and is installed into the environment
whenever `targets.genericLinux.nixGL.prime.installScript` is set. This script,
which can be used to start a program on a secondary GPU, does not depend on
NixGL and is useful on NixOS systems as well.
Below is an abbreviated example for an Optimus laptop that makes use of both
Mesa and Nvidia wrappers, where the latter is used in dGPU offloading mode. It
demonstrates how to wrap `mpv` to run on the integrated Intel GPU, wrap FreeCAD
to run on the Nvidia dGPU, and how to install the wrapper scripts. It also wraps
Xonotic to run on the dGPU, but uses the wrapper function directly for
demonstration purposes.
```nix
{ config, lib, pkgs, nixgl, ... }:
{
targets.genericLinux.nixGL = {
packages = nixgl.packages;
defaultWrapper = "mesa";
offloadWrapper = "nvidiaPrime";
installScripts = [ "mesa" "nvidiaPrime" ];
};
programs.mpv = {
enable = true;
package = config.lib.nixGL.wrap pkgs.mpv;
};
home.packages = [
(config.lib.nixGL.wrapOffload pkgs.freecad)
(config.lib.nixGL.wrappers.nvidiaPrime pkgs.xonotic)
];
}
```
The above example assumes a flake-based setup where `nixgl` was passed from the
flake. When using channels, the example would instead begin with
```nix
{ config, lib, pkgs, ... }:
{
targets.genericLinux.nixGL.packages = import <nixgl> { inherit pkgs; };
# The rest is the same as above
...
```
-32
View File
@@ -1,32 +0,0 @@
# Graphical services {#sec-usage-graphical}
Home Manager includes a number of services intended to run in a
graphical session, for example `xscreensaver` and `dunst`.
Unfortunately, such services will not be started automatically unless
you let Home Manager start your X session. That is, you have something
like
``` nix
{
# …
services.xserver.enable = true;
# …
}
```
in your system configuration and
``` nix
{
# …
xsession.enable = true;
xsession.windowManager.command = "…";
# …
}
```
in your Home Manager configuration.
-119
View File
@@ -1,119 +0,0 @@
# Modular Services {#sec-usage-modular-services}
Home Manager supports nixpkgs
[modular services](https://nixos.org/manual/nixos/unstable/#modular-services)
under [](#opt-home.services). This is the Home Manager analog to the
NixOS `system.services` namespace: each entry is an abstract service
sourced from `<nixpkgs/lib/services/lib.nix>` with the upstream portable
systemd module loaded into it, so service modules shipped with packages
(e.g. `pkgs.<name>.passthru.services.default`) drop in unchanged --
the same module evaluates on NixOS and on Home Manager.
A minimal example -- run mpd as a user service:
```nix
{ pkgs, ... }: {
home.services.mpd = {
process.argv = [ "${pkgs.mpd}/bin/mpd" "--no-daemon" ];
};
}
```
This produces `~/.config/systemd/user/mpd.service` with `ExecStart` set
to the mpd binary and `WantedBy=default.target`.
Each service exposes the upstream NixOS-style schema: [`process.argv`],
`systemd.lib`, `systemd.mainExecStart`, `systemd.service`,
`systemd.services`, `systemd.sockets`. Lifted units are translated from
NixOS-style attrs (`wantedBy`, `serviceConfig`, `unitConfig`,
`environment`, ...) into the section-based INI shape
(`{ Unit; Service; Install; }`) that Home Manager's
[](#opt-systemd.user.services) consumes. Only common keys are mapped
explicitly; uncommon options remain reachable via `unitConfig`,
`serviceConfig`, or `socketConfig`.
Sub-services (nested `services.<sub>` inside another service) and their
units are dashed under the parent service name. The empty unit key
`""` denotes the service's *primary* unit (lifted to a unit named
after the service itself); [`process.argv`] becomes the default
`ExecStart` for that unit, which defaults to `WantedBy=default.target`.
## Reusing upstream package modules {#sec-usage-modular-services-upstream}
Modular services exposed by packages under
`pkgs.<name>.passthru.services.default` can be imported directly.
For example, `pkgs.php`'s [`php-fpm`]:
```nix
{ pkgs, ... }: {
home.services."php-fpm" = {
imports = [ pkgs.php.passthru.services.default ];
configData."php-fpm.conf".source = builtins.elemAt config.home.services.php-fpm.process.argv 2;
php-fpm.settings.mypool = {
listen = "127.0.0.1:9000";
# FIXME: required by upstream modular service, but ignored when run as user
"user" = "";
"pm" = "dynamic";
"pm.max_children" = 75;
"pm.min_spare_servers" = 5;
"pm.max_spare_servers" = 20;
};
};
}
```
Some packages ship modules written for system services that include
directives the user-session manager cannot honour (`DynamicUser`,
`AmbientCapabilities`, ...). The unit is still generated with those
directives -- user systemd silently ignores what it cannot apply.
`WantedBy=multi-user.target` is automatically normalized to
`WantedBy=default.target`. Other directives can be overridden per
service:
```nix
home.services."tunnel" = {
imports = [ pkgs.ghostunnel.passthru.services.default ];
# ...
systemd.services."tunnel".serviceConfig.DynamicUser = lib.mkForce false;
};
```
## Configuration data {#sec-usage-modular-services-configdata}
Each service can declare configuration files via `configData.<name>`.
These are materialized at `$XDG_CONFIG_HOME/home-services/<service>/<name>`
(mirroring how NixOS lifts `configData` to `environment.etc`), with the
absolute path injected back into `configData.<name>.path` so the service
can refer to its files at a stable location:
```nix
{ config, ... }:
{
home.services.demo = {
process.argv = [ "/bin/myapp" "--config" config.home.services.demo.configData."app.toml".path ];
configData."app.toml".text = ''
port = 1234
'';
};
}
```
The store paths of all enabled `configData` entries are automatically
added to the primary unit's `X-Reload-Triggers`, so `home-manager switch`
restarts the service whenever any of its configuration files change. To
reload instead of restart, override `X-SwitchMethod`:
```nix
home.services.demo.systemd.services."".unitConfig.X-SwitchMethod = "reload";
```
## Scope notes {#sec-usage-modular-services-scope}
Home Manager mirrors the surface of nixpkgs' portable systemd module:
services and sockets only. Other unit kinds Home Manager supports
natively under [](#opt-systemd.user.services) (timers, paths, mounts, ...)
are intentionally not modeled on `home.services` until upstream grows them,
to keep both surfaces aligned.
[`process.argv`]: https://nixos.org/manual/nixos/unstable/#service-opt-process.argv
[`php-fpm`]: https://nixos.org/manual/nixos/stable/options#opt-_imports_=___pkgs.php.services.default___
-45
View File
@@ -1,45 +0,0 @@
# Rollbacks {#sec-usage-rollbacks}
When you perform a `home-manager switch` and discover a problem then
it is possible to _roll back_ to the previous version of your
configuration using `home-manager switch --rollback`. This will turn
the previous configuration into the current configuration.
::: {.example #ex-rollback-scenario}
### Home Manager Rollback
Imagine you have just updated Nixpkgs and switched to a new Home
Manager configuration. You discover that a package update included in
your new configuration has a bug that was not present in the previous
configuration.
You can then run `home-manager switch --rollback` to recover your
previous configuration, which includes the working version of the
package.
To see what happened above we can observe the list of Home Manager
generations before and after the rollback:
``` shell
$ home-manager generations
2024-01-04 11:56 : id 765 -> /nix/store/kahm1rxk77mnvd2l8pfvd4jkkffk5ijk-home-manager-generation (current)
2024-01-03 10:29 : id 764 -> /nix/store/2wsmsliqr5yynqkdyjzb1y57pr5q2lsj-home-manager-generation
2024-01-01 12:21 : id 763 -> /nix/store/mv960kl9chn2lal5q8lnqdp1ygxngcd1-home-manager-generation
2023-12-29 21:03 : id 762 -> /nix/store/6c0k1r03fxckql4vgqcn9ccb616ynb94-home-manager-generation
2023-12-25 18:51 : id 761 -> /nix/store/czc5y6vi1rvnkfv83cs3rn84jarcgsgh-home-manager-generation
$ home-manager switch --rollback
Starting home manager activation
$ home-manager generations
2024-01-04 11:56 : id 765 -> /nix/store/kahm1rxk77mnvd2l8pfvd4jkkffk5ijk-home-manager-generation
2024-01-03 10:29 : id 764 -> /nix/store/2wsmsliqr5yynqkdyjzb1y57pr5q2lsj-home-manager-generation (current)
2024-01-01 12:21 : id 763 -> /nix/store/mv960kl9chn2lal5q8lnqdp1ygxngcd1-home-manager-generation
2023-12-29 21:03 : id 762 -> /nix/store/6c0k1r03fxckql4vgqcn9ccb616ynb94-home-manager-generation
2023-12-25 18:51 : id 761 -> /nix/store/czc5y6vi1rvnkfv83cs3rn84jarcgsgh-home-manager-generation
```
:::
-84
View File
@@ -1,84 +0,0 @@
# Updating {#sec-updating}
Updating means moving to a newer revision of the Home Manager branch
that your configuration already follows. For example, a configuration
using `release-25.11` can update to a newer revision of `release-25.11`
without changing release branches.
If you want to move from one release branch to another, such as
`release-25.05` to `release-25.11`, or between a release branch and
`master`, see
[Upgrading to a new Home Manager release](upgrading.md#sec-upgrade-release).
## Flake-Based Configurations {#sec-updating-flakes}
Flake inputs are pinned in `flake.lock`, and Home Manager will keep using
the pinned revisions until you update that lock file.
To update all inputs in the flake:
``` shell
$ nix flake update
```
To update only specific inputs, name them explicitly:
``` shell
$ nix flake update home-manager nixpkgs
```
These commands assume that your current directory is the flake. If not,
pass the flake path or URI with `--flake <flake-uri>`.
After updating the lock file, rebuild with the command for your
installation method.
For a standalone Home Manager flake:
``` shell
$ home-manager switch --flake .
```
For Home Manager as a NixOS module:
``` shell
$ sudo nixos-rebuild switch --flake .
```
For Home Manager as a nix-darwin module:
``` shell
$ darwin-rebuild switch --flake .
```
## Channel-Based Configurations {#sec-updating-channels}
Channels are mutable references outside the Home Manager configuration
itself. Updating a channel moves it to a newer revision of the same
channel or branch.
For a standalone Home Manager channel installation, update the user's
channels and then switch:
``` shell
$ nix-channel --update
unpacking channels...
$ home-manager switch
```
For Home Manager as a NixOS module, update the root user's Home Manager
channel and rebuild the system:
``` shell
$ sudo nix-channel --update home-manager
$ sudo nixos-rebuild switch
```
For Home Manager as a nix-darwin module, update the Home Manager channel
used by your nix-darwin configuration and rebuild the system:
``` shell
$ nix-channel --update home-manager
$ darwin-rebuild switch
```
-202
View File
@@ -1,202 +0,0 @@
# Upgrading to a new Home Manager release {#sec-upgrade-release}
## Overview {#sec-upgrade-release-overview}
When moving your configuration to a new Nixpkgs release branch, you
should also move Home Manager to the matching release branch. On NixOS
this usually means upgrading Home Manager together with NixOS. On
standalone and nix-darwin installations, match Home Manager to the
Nixpkgs branch used by your configuration. The examples below use 25.11;
replace this with the release branch you are upgrading to.
If your configuration follows `nixos-unstable` or `nixpkgs-unstable`,
use Home Manager's `master` branch.
## Understanding Home Manager Versioning {#sec-upgrade-release-understanding-versioning}
Home Manager follows NixOS release cycles and provides corresponding branches:
- **release-\<version\>**: Stable branch for the matching NixOS or
Nixpkgs release, such as `release-25.11`.
- **master**: Development branch (tracks nixpkgs-unstable)
:::{.note}
Use the Home Manager branch that matches the Nixpkgs branch used to
evaluate your Home Manager configuration. For stable NixOS
configurations, this is normally the same as your NixOS version.
:::
## Flake-Based Installation {#sec-upgrade-release-understanding-flake}
If you are using Home Manager with Nix flakes, update your `nixpkgs` and
`home-manager` inputs together:
```nix
{
description = "Home Manager configuration";
inputs = {
# Match the Nixpkgs branch to the release you are using.
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
home-manager = {
# Match the Home Manager branch to the Nixpkgs branch above.
url = "github:nix-community/home-manager/release-25.11";
};
};
outputs = { nixpkgs, home-manager, ... }: {
homeConfigurations."yourusername" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [ ./home.nix ];
};
};
}
```
For `nixos-unstable` or `nixpkgs-unstable`, use the `master` branch
instead:
```nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
};
};
}
```
Then update the lock file and rebuild using the command for your
installation method.
For a standalone Home Manager flake:
``` shell
$ nix flake update
$ home-manager switch --flake .
```
For Home Manager as a NixOS module:
``` shell
$ nix flake update
$ sudo nixos-rebuild switch --flake .
```
For Home Manager as a nix-darwin module:
``` shell
$ nix flake update
$ darwin-rebuild switch --flake .
```
These commands assume that your current directory is the flake. If not,
pass the flake path or URI with `--flake <flake-uri>`.
## Channel-Based Installation {#sec-upgrade-release-understanding-channel}
For a standalone channel-based installation, first verify your current
Home Manager channel:
``` shell
$ nix-channel --list
```
The entry identifies the Home Manager branch currently in use. For
example:
```
home-manager https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz
```
Update the Home Manager channel to the branch matching your Nixpkgs
release, then switch:
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
$ nix-channel --update
$ home-manager switch
```
When Home Manager is installed as a NixOS module with channels, update
the root user's Home Manager channel and rebuild the system:
``` shell
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
$ sudo nix-channel --update
$ sudo nixos-rebuild switch
```
When Home Manager is installed as a nix-darwin module with channels,
update the Home Manager channel used by your nix-darwin configuration
and rebuild the system:
``` shell
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
$ nix-channel --update
$ darwin-rebuild switch
```
## State Version Management {#sec-upgrade-release-state-version}
:::{.warning}
Careful updating your `home.stateVersion` when upgrading Home Manager.
:::
The `stateVersion` should remain set to the Home Manager release you
first used for this home configuration.
```nix
{
# Example: if this home configuration was first created on 24.11.
home.stateVersion = "24.11";
}
```
**Why?** The `stateVersion` ensures backward compatibility and
prevents breaking changes from affecting your existing configuration.
**Remember:** Channel or flake input version is not the same as state
version. Update Home Manager, keep `home.stateVersion` unchanged, and
only change it after reading the release notes and migrating any
affected configuration.
## Troubleshooting {#sec-upgrade-release-state-troubleshooting}
### Common Issues {#sec-upgrade-release-state-troubleshooting-common-issues}
Check the [Home Manager Release Notes](../release-notes/release-notes.md#ch-release-notes) for breaking changes.
1. **Version Mismatch Warning**: If you see warnings about version
mismatches, ensure your Home Manager branch matches the Nixpkgs
branch used by your configuration. For NixOS stable releases, this
usually means matching your NixOS version.
1. **Module Changes**: Modules are constantly being updated with new
features to keep up with changes in upstream packaging or to fix
bugs and add features. If you have an unexpected change, check if
there was something noted in the release notes or news entries.
1. **Channel Not Found**: If `nix-channel --list` shows no channels,
you might be using a different installation method, such as flakes,
or Home Manager may be imported through your system configuration.
### Verification {#sec-upgrade-release-state-troubleshooting-verification}
After upgrading, verify the installation:
``` shell
$ home-manager --version
```
This should show the Home Manager version or indicate that it is using
the expected release branch.
## Additional Resources {#sec-upgrade-release-resources}
- [NixOS Stable Release Notes](https://nixos.org/manual/nixos/stable/release-notes)
- [Home Manager Release Notes](../release-notes/release-notes.md#ch-release-notes)
-13
View File
@@ -1,13 +0,0 @@
# Writing Home Manager Modules {#ch-writing-modules}
The module system in Home Manager is based entirely on the NixOS module
system so we will here only highlight aspects that are specific for Home
Manager. For information about the module system as such please refer to
the [Writing NixOS
Modules](https://nixos.org/nixos/manual/index.html#sec-writing-modules)
chapter of the NixOS manual.
```{=include=} sections
writing-modules/types.md
```

Some files were not shown because too many files have changed in this diff Show More