Compare commits

...

110 Commits

Author SHA1 Message Date
Richie d2bd57aa16 monthly iso build 2025-02-17 12:07:44 -05:00
Richie 698f571961 adding git and python313 to installeriso 2025-02-17 11:54:39 -05:00
Richie 11a84e06e8 moved installer.py to system_tools 2025-02-15 19:25:08 -05:00
Richie 43b582fb33 creating a custom installer iso 2025-02-15 19:25:08 -05:00
Richie f7f0d02ef9 moved nvidia.nix to common/optional 2025-02-12 21:20:39 -05:00
Richie e723ab9e86 added word tod spell check 2025-02-12 21:20:39 -05:00
Richie 5182bf18bc removed un unused ssh config entry 2025-02-12 21:20:39 -05:00
Richie 11883f981e improving spell check 2025-02-12 21:20:39 -05:00
Richie 6d41287eec removed some open firewall ports 2025-02-12 19:56:18 -05:00
Richie 433c52309b set up duel stack for haproxy 2025-02-12 19:56:18 -05:00
Richie e1bbadfcba removed a trailing space 2025-02-12 17:32:15 -05:00
Richie 868f782523 removing cosmic 2025-02-12 17:32:15 -05:00
Richie 434c80adac add daily build to refresh cache 2025-02-11 21:46:50 -05:00
Richie 6c15bbe0a3 adding nixfmt to spell check 2025-02-11 20:42:16 -05:00
Richie cbdefc0c52 remove reference for ioit vlan from home-assistant 2025-02-11 20:40:57 -05:00
Richie 3fc9d9d614 fixed names in treefmt.yml 2025-02-08 18:13:31 -05:00
Richie aa4a11c0c3 set up treefmt action 2025-02-08 18:13:31 -05:00
Richie 300aa1f032 ran nix fmt . 2025-02-08 18:13:31 -05:00
Richie c12bd0c7ca set up treefmt 2025-02-08 18:13:31 -05:00
Richie f43a34f37c setting up postgres 2025-02-08 17:38:52 -05:00
Richie 33c2718d40 removed duplicate zerotierone entry 2025-02-06 19:02:02 -05:00
Richie 78500e6122 removed vlans 2025-02-06 19:02:02 -05:00
Richie 9459d4797e testing cosmic 2025-02-06 19:02:02 -05:00
Richie bfbcb70327 added git lfs support 2025-02-04 21:37:27 -05:00
Richie b95e553093 added chromium to users 2025-02-04 21:37:27 -05:00
Richie 8668603404 adding llms to bob 2025-02-04 21:37:27 -05:00
Richie 60c3e3db20 moved cloud_flare_tunnel to a service 2025-02-04 21:28:10 -05:00
Richie d3aa49f9e4 moved haproxy to a service 2025-02-04 21:28:10 -05:00
Richie f691015920 deleted photoprism.nix 2025-02-04 21:28:10 -05:00
Richie 81ab03f3f1 moved audiobookshelf to a service 2025-02-04 21:28:10 -05:00
Richie ba1170720c moved filebrowser to a service 2025-02-04 21:28:10 -05:00
Richie 4316c8a52e moved validate_system.toml to services dir 2025-02-04 21:28:10 -05:00
Richie a036467131 fixed mistake 2025-02-04 21:28:10 -05:00
Richie 62c26b351c added duckdns.nix 2025-02-04 21:28:10 -05:00
Richie cd5ad0dcae added runners dir 2025-02-04 21:28:10 -05:00
Richie fa38cc6321 added services import to jeeves default 2025-02-04 21:28:10 -05:00
Richie e8d971340b made nix_serve.nix 2025-02-04 21:28:10 -05:00
Richie 30f2af87be moved systemd.nix 2025-02-04 21:28:10 -05:00
Richie 8522b77285 moved home_assistant.nix 2025-02-04 21:28:10 -05:00
Richie f1a48819a5 moved jellyfin.nix 2025-02-04 21:28:10 -05:00
Richie eff58f08ad added services dir 2025-02-04 21:28:10 -05:00
Richie a24c4fd756 moved audiobookshelf volumes 2025-02-01 15:31:04 -05:00
Richie f10ab4a9af updated startup_validation to have a config file 2025-02-01 15:31:04 -05:00
Richie 7cc831a2d0 added version to audiobookshelf filebrowser haproxy cloudflared apache2 and uptime-kuma 2025-02-01 15:31:04 -05:00
Richie 91690734ba removed grafana and postgres 2025-02-01 15:31:04 -05:00
github-actions[bot] b97e81e96e flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/9a96d7b0485be4654b6f2237efeccb1144d1ba54?dir=pkgs/firefox-addons&narHash=sha256-YDDKpj1j9MqGZgrugfu8mQWjpiy4r7fZ1FMJL58NasM%3D' (2025-01-25)
  → 'gitlab:rycee/nur-expressions/dc86c8feffa328d9050e039a1286e175af6d76d8?dir=pkgs/firefox-addons&narHash=sha256-ppR81tMrcQk/wHm8MmKtp3mrtYmMTgF2lxLLXYwRsOM%3D' (2025-02-01)
• Updated input 'home-manager':
    'github:nix-community/home-manager/daf04c5950b676f47a794300657f1d3d14c1a120?narHash=sha256-5HGG09bh/Yx0JA8wtBMAzt0HMCL1bYZ93x4IqzVExio%3D' (2025-01-24)
  → 'github:nix-community/home-manager/8544cd092047a7e92d0dce011108a563de7fc0f2?narHash=sha256-ZlLTnqIQQ8OE6AtT%2BfluB642j2R9tnvxHHtpnmLjSxQ%3D' (2025-02-01)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/e277b9162637a85f45c4564d687729797f560637?narHash=sha256-5/8KyhEtPLXqmE5CygvMSZZUw8wHcq/bFh1ckTtDDcA%3D' (2025-01-25)
  → 'github:lilyinstarlight/nixos-cosmic/51b9cce097da369550f45ac07879274dc8be81e4?narHash=sha256-y9st4Y0p5ry%2B6QdlIGeqxAA6rbEIOO1uXdAc5jxV2Bc%3D' (2025-01-31)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/035f8c0853c2977b24ffc4d0a42c74f00b182cd8?narHash=sha256-YnHJJ19wqmibLQdUeq9xzE6CjrMA568KN/lFPuSVs4I%3D' (2025-01-23)
  → 'github:NixOS/nixpkgs/59e618d90c065f55ae48446f307e8c09565d5ab0?narHash=sha256-B/7Y1v4y%2BmsFFBW1JAdFjNvVthvNdJKiN6EGRPnqfno%3D' (2025-01-29)
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/dfad538f751a5aa5d4436d9781ab27a6128ec9d4?narHash=sha256-ZEbOJ9iT72iwqXsiEMbEa8wWjyFvRA9Ugx8utmYbpz4%3D' (2025-01-24)
  → 'github:nixos/nixos-hardware/34b64e4e1ddb14e3ffc7db8d4a781396dbbab773?narHash=sha256-6HI58PKjddsC0RA0gBQlt6ox47oH//jLUHwx05RO8g0%3D' (2025-02-01)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/825479c345a7f806485b7f00dbe3abb50641b083?narHash=sha256-nU6AezEX4EuahTO1YopzueAXfjFfmCHylYEFCagduHU%3D' (2025-01-24)
  → 'github:nixos/nixpkgs/9d3ae807ebd2981d593cddd0080856873139aa40?narHash=sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9%2BWC4%3D' (2025-01-29)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/8504e3c64d7ad6943f9e684cc3fe83ad443a009b?narHash=sha256-RFDB7DV2TTh/2dX2X8IRUOeKTxUiFmnHg82IV2OEZf0%3D' (2025-01-26)
  → 'github:nixos/nixpkgs/102a39bfee444533e6b4e8611d7e92aa39b7bec1?narHash=sha256-Q4vhtbLYWBUnjWD4iQb003Lt%2BN5PuURDad1BngGKdUs%3D' (2025-02-01)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/015d461c16678fc02a2f405eb453abb509d4e1d4?narHash=sha256-j9IdflJwRtqo9WpM0OfAZml47eBblUHGNQTe62OUqTw%3D' (2025-01-20)
  → 'github:Mic92/sops-nix/4c1251904d8a08c86ac6bc0d72cc09975e89aef7?narHash=sha256-wkwYJc8cKmmQWUloyS9KwttBnja2ONRuJQDEsmef320%3D' (2025-01-31)
• Updated input 'system_tools':
    'github:RichieCahill/system_tools/a643f2e67492901e3975aeab603f4a71f54e645d?narHash=sha256-agiofvmeAjAzQxs3HXe0ruKwgws0PECBjc8HlTkgDlc%3D' (2025-01-20)
  → 'github:RichieCahill/system_tools/a697bd3df11ba40afd40d6324a39859c91b7bb78?narHash=sha256-wC8hJvhdFdrEtzc7HMWyXNtQbS3CVyOjUUpEHtxOlJg%3D' (2025-01-31)
2025-02-01 10:37:51 -05:00
Richie 0d680dc68d adding internal-ioit-vlan 2025-01-31 17:31:17 -05:00
Richie 81867eb312 testing GH_TOKEN_FOR_UPDATES 2025-01-26 13:46:23 -05:00
Richie 00852c019d moving hardware.bluetooth to optional/desktop.nix 2025-01-26 12:58:32 -05:00
github-actions[bot] b53f4ec8d8 flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/f3bffded7ab861654ab3be7c1e974eafe72c52b0?dir=pkgs/firefox-addons&narHash=sha256-lroOTrqUw443CfegVkfNAfE57uIsF4fjUvlUjVnB3kY%3D' (2025-01-23)
  → 'gitlab:rycee/nur-expressions/9a96d7b0485be4654b6f2237efeccb1144d1ba54?dir=pkgs/firefox-addons&narHash=sha256-YDDKpj1j9MqGZgrugfu8mQWjpiy4r7fZ1FMJL58NasM%3D' (2025-01-25)
• Updated input 'home-manager':
    'github:nix-community/home-manager/7b9ece1bf3c8780cde9b975b28c2d9ccd7e9cdb9?narHash=sha256-v9WQ3c4ctwPMfdBZMZxpdM9xXev4uChce4BxOpvsu0E%3D' (2025-01-23)
  → 'github:nix-community/home-manager/daf04c5950b676f47a794300657f1d3d14c1a120?narHash=sha256-5HGG09bh/Yx0JA8wtBMAzt0HMCL1bYZ93x4IqzVExio%3D' (2025-01-24)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/4152cf7f0caab4821f009ee132f8ff016f537630?narHash=sha256-6rDozHAgJmdsUrIggrIxcjSq8lQeFuh9WjyqhhLEqDE%3D' (2025-01-23)
  → 'github:lilyinstarlight/nixos-cosmic/e277b9162637a85f45c4564d687729797f560637?narHash=sha256-5/8KyhEtPLXqmE5CygvMSZZUw8wHcq/bFh1ckTtDDcA%3D' (2025-01-25)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/47addd76727f42d351590c905d9d1905ca895b82?narHash=sha256-6qY0pk2QmUtBT9Mywdvif0i/CLVgpCjMUn6g9vB%2Bf3M%3D' (2025-01-22)
  → 'github:NixOS/nixpkgs/035f8c0853c2977b24ffc4d0a42c74f00b182cd8?narHash=sha256-YnHJJ19wqmibLQdUeq9xzE6CjrMA568KN/lFPuSVs4I%3D' (2025-01-23)
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/9368027715d8dde4b84c79c374948b5306fdd2db?narHash=sha256-qM/y6Dtpu9Wmf5HqeZajQdn%2BcS0aljdYQQQnrvx%2BLJE%3D' (2025-01-23)
  → 'github:nixos/nixos-hardware/dfad538f751a5aa5d4436d9781ab27a6128ec9d4?narHash=sha256-ZEbOJ9iT72iwqXsiEMbEa8wWjyFvRA9Ugx8utmYbpz4%3D' (2025-01-24)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab?narHash=sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk%3D' (2025-01-21)
  → 'github:nixos/nixpkgs/825479c345a7f806485b7f00dbe3abb50641b083?narHash=sha256-nU6AezEX4EuahTO1YopzueAXfjFfmCHylYEFCagduHU%3D' (2025-01-24)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/2d99c7f729083f488efb1228e2129443f6fa6ebc?narHash=sha256-P9gfexAOEd51nAgz3TtgGy1YEFgoQPk18QZQklrVlT0%3D' (2025-01-23)
  → 'github:nixos/nixpkgs/8504e3c64d7ad6943f9e684cc3fe83ad443a009b?narHash=sha256-RFDB7DV2TTh/2dX2X8IRUOeKTxUiFmnHg82IV2OEZf0%3D' (2025-01-26)
2025-01-26 12:58:32 -05:00
Richie 64a4223560 adding nix-builders 2025-01-23 23:47:00 -05:00
Richie 88d3d6311f adding rokuecp 2025-01-23 23:46:51 -05:00
github-actions[bot] bccc569650 flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/a66d5a22e3659544f41970472bd944a7824eb572?dir=pkgs/firefox-addons&narHash=sha256-wXKdOKufzA4cUoHrKWOaPSyCjGEuPHWB7EOjPZKw5uQ%3D' (2025-01-19)
  → 'gitlab:rycee/nur-expressions/f3bffded7ab861654ab3be7c1e974eafe72c52b0?dir=pkgs/firefox-addons&narHash=sha256-lroOTrqUw443CfegVkfNAfE57uIsF4fjUvlUjVnB3kY%3D' (2025-01-23)
• Updated input 'home-manager':
    'github:nix-community/home-manager/f8ef4541bb8a54a8b52f19b52912119e689529b3?narHash=sha256-0NBrY2A7buujKmeCbieopOMSbLxTu8TFcTLqAbTnQDw%3D' (2025-01-19)
  → 'github:nix-community/home-manager/7b9ece1bf3c8780cde9b975b28c2d9ccd7e9cdb9?narHash=sha256-v9WQ3c4ctwPMfdBZMZxpdM9xXev4uChce4BxOpvsu0E%3D' (2025-01-23)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/6ec08f11bbf0e936ad82f1bb532f3757f8b5e3c2?narHash=sha256-0QcnnQZ/il9UPVmhJtDqjPDCCcW5vTCz7QaLu%2BrlrRQ%3D' (2025-01-19)
  → 'github:lilyinstarlight/nixos-cosmic/4152cf7f0caab4821f009ee132f8ff016f537630?narHash=sha256-6rDozHAgJmdsUrIggrIxcjSq8lQeFuh9WjyqhhLEqDE%3D' (2025-01-23)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/6a3ae7a5a12fb8cac2d59d7df7cbd95f9b2f0566?narHash=sha256-s40Kk/OulP3J/1JvC3VT16U4r/Xw6Qdi7SRw3LYkPWs%3D' (2025-01-18)
  → 'github:NixOS/nixpkgs/47addd76727f42d351590c905d9d1905ca895b82?narHash=sha256-6qY0pk2QmUtBT9Mywdvif0i/CLVgpCjMUn6g9vB%2Bf3M%3D' (2025-01-22)
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/cb3173dc5c746fa95bca1f035a7e4d2b588894ac?narHash=sha256-%2BX9KAryvDsIE7lQ0FdfiD1u33nOVgsgufedqspf77N4%3D' (2025-01-19)
  → 'github:nixos/nixos-hardware/9368027715d8dde4b84c79c374948b5306fdd2db?narHash=sha256-qM/y6Dtpu9Wmf5HqeZajQdn%2BcS0aljdYQQQnrvx%2BLJE%3D' (2025-01-23)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/5df43628fdf08d642be8ba5b3625a6c70731c19c?narHash=sha256-Tbk1MZbtV2s5aG%2BiM99U8FqwxU/YNArMcWAv6clcsBc%3D' (2025-01-16)
  → 'github:nixos/nixpkgs/9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab?narHash=sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk%3D' (2025-01-21)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/bba244a0bb9073202711ac5c88d02fd95cd80b0a?narHash=sha256-j/4dg6A76JEz7yoS4%2B69NeK3spEGNyJ32w1LfBOpYQE%3D' (2025-01-20)
  → 'github:nixos/nixpkgs/2d99c7f729083f488efb1228e2129443f6fa6ebc?narHash=sha256-P9gfexAOEd51nAgz3TtgGy1YEFgoQPk18QZQklrVlT0%3D' (2025-01-23)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6?narHash=sha256-GXUE9%2BFgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o%3D' (2025-01-17)
  → 'github:Mic92/sops-nix/015d461c16678fc02a2f405eb453abb509d4e1d4?narHash=sha256-j9IdflJwRtqo9WpM0OfAZml47eBblUHGNQTe62OUqTw%3D' (2025-01-20)
2025-01-23 23:45:02 -05:00
Richie 633a48af7b added shell = pkgs.bash 2025-01-23 22:47:43 -05:00
Richie 799794ebe5 added nix setting to nix_builder containers 2025-01-23 22:47:43 -05:00
Richie 7b07266c44 removed ping test 2025-01-23 22:47:43 -05:00
Richie 60ce45a08d increase ssh login level 2025-01-23 22:47:43 -05:00
Richie 12b6c1e279 removed ping test 2025-01-23 22:47:43 -05:00
Richie 12b4fe92da adding ping to extraPackages 2025-01-23 22:47:43 -05:00
Richie d076183777 added openssh to extraPackages 2025-01-23 22:47:43 -05:00
Richie 7a454ca740 testing connection 2025-01-23 22:47:43 -05:00
Richie 8dd892a88f added openssh to extraPackages 2025-01-23 22:47:43 -05:00
Richie 7f3bb43d39 testing ssh config 2025-01-23 22:47:43 -05:00
Richie 793d06683e added -vv to NIX_SSHOPTS 2025-01-23 22:47:43 -05:00
Richie bb1d92252f added -o UserKnownHostsFile=/dev/null 2025-01-23 22:47:43 -05:00
Richie f7a95f32cd added -o StrictHostKeyChecking=no 2025-01-23 22:47:43 -05:00
Richie ea24fb9865 fixed ip address 2025-01-23 22:47:43 -05:00
Richie c39f8c4a7e added copy step to build_systems action 2025-01-23 22:47:43 -05:00
Richie d7fd0796ea created nix_builder module 2025-01-23 22:47:43 -05:00
Richie 01d2bd04b2 created base containers for nix builder 2025-01-23 22:47:43 -05:00
Richie 040a44b608 updated homeassistant unit_system to us_customary 2025-01-19 22:02:06 -05:00
github-actions[bot] a3a132b41c flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/9b53b108b417e6d3fef7743c4034df582fbd9a7e?dir=pkgs/firefox-addons&narHash=sha256-6VB1uVPqyaXTTori47ESnvAlQ1nHR4XwRybBHxWpL3E%3D' (2025-01-16)
  → 'gitlab:rycee/nur-expressions/a66d5a22e3659544f41970472bd944a7824eb572?dir=pkgs/firefox-addons&narHash=sha256-wXKdOKufzA4cUoHrKWOaPSyCjGEuPHWB7EOjPZKw5uQ%3D' (2025-01-19)
• Updated input 'home-manager':
    'github:nix-community/home-manager/12851ae7467bad8ef422b20806ab4d6d81e12d29?narHash=sha256-u1gk5I1an975FOAMMdS6oBKnSIsZza5ZKhaeBZAskVo%3D' (2025-01-17)
  → 'github:nix-community/home-manager/f8ef4541bb8a54a8b52f19b52912119e689529b3?narHash=sha256-0NBrY2A7buujKmeCbieopOMSbLxTu8TFcTLqAbTnQDw%3D' (2025-01-19)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/c92ead1ab77f8be697a44ca855d06c5957ee2a62?narHash=sha256-P9n4HP0XPlXTViw7g3lBRX3Eix0sgcnhanV0ddB08SA%3D' (2025-01-16)
  → 'github:lilyinstarlight/nixos-cosmic/6ec08f11bbf0e936ad82f1bb532f3757f8b5e3c2?narHash=sha256-0QcnnQZ/il9UPVmhJtDqjPDCCcW5vTCz7QaLu%2BrlrRQ%3D' (2025-01-19)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/9c6b49aeac36e2ed73a8c472f1546f6d9cf1addc?narHash=sha256-i/UJ5I7HoqmFMwZEH6vAvBxOrjjOJNU739lnZnhUln8%3D' (2025-01-14)
  → 'github:NixOS/nixpkgs/6a3ae7a5a12fb8cac2d59d7df7cbd95f9b2f0566?narHash=sha256-s40Kk/OulP3J/1JvC3VT16U4r/Xw6Qdi7SRw3LYkPWs%3D' (2025-01-18)
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/b678606690027913f3434dea3864e712b862dde5?narHash=sha256-oMr3PVIQ8XPDI8/x6BHxsWEPBRU98Pam6KGVwUh8MPk%3D' (2025-01-15)
  → 'github:nixos/nixos-hardware/cb3173dc5c746fa95bca1f035a7e4d2b588894ac?narHash=sha256-%2BX9KAryvDsIE7lQ0FdfiD1u33nOVgsgufedqspf77N4%3D' (2025-01-19)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/eb62e6aa39ea67e0b8018ba8ea077efe65807dc8?narHash=sha256-uQ%2BNQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140%3D' (2025-01-14)
  → 'github:nixos/nixpkgs/5df43628fdf08d642be8ba5b3625a6c70731c19c?narHash=sha256-Tbk1MZbtV2s5aG%2BiM99U8FqwxU/YNArMcWAv6clcsBc%3D' (2025-01-16)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/0993fc268872148cebcd1fac8660a8b8ced49542?narHash=sha256-hCddtSuk6m6XROmdOC0te0j2sLeUr28QIzNRk0qF1as%3D' (2025-01-17)
  → 'github:nixos/nixpkgs/bba244a0bb9073202711ac5c88d02fd95cd80b0a?narHash=sha256-j/4dg6A76JEz7yoS4%2B69NeK3spEGNyJ32w1LfBOpYQE%3D' (2025-01-20)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/553c7cb22fed19fd60eb310423fdc93045c51ba8?narHash=sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk%3D' (2025-01-13)
  → 'github:Mic92/sops-nix/4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6?narHash=sha256-GXUE9%2BFgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o%3D' (2025-01-17)
• Updated input 'system_tools':
    'github:RichieCahill/system_tools/bc357d8fabd83c1423611829091e5b1d86dd913c?narHash=sha256-B13faNyBbA3MeI7Jp6pFVbp58rI2Rx5Uvd83csW2p48%3D' (2024-12-01)
  → 'github:RichieCahill/system_tools/a643f2e67492901e3975aeab603f4a71f54e645d?narHash=sha256-agiofvmeAjAzQxs3HXe0ruKwgws0PECBjc8HlTkgDlc%3D' (2025-01-20)
• Updated input 'system_tools/poetry2nix':
    'github:nix-community/poetry2nix/f554d27c1544d9c56e5f1f8e2b8aff399803674e?narHash=sha256-F7N1mxH1VrkVNHR3JGNMRvp9%2B98KYO4b832KS8Gl2xI%3D' (2024-11-10)
  → 'github:nix-community/poetry2nix/75d0515332b7ca269f6d7abfd2c44c47a7cbca7b?narHash=sha256-eiCqmKl0BIRiYk5/ZhZozwn4/7Km9CWTbc15Cv%2BVX5k%3D' (2025-01-14)
2025-01-19 22:02:06 -05:00
Richie c0a97c6ed8 removed unnecessary nesting 2025-01-19 16:40:53 -05:00
Richie 83dad24351 moved davids-server.id to jeeves/syncthing.nix 2025-01-19 16:40:53 -05:00
Richie 1a1cc41265 removed bob_temp 2025-01-19 16:40:53 -05:00
Richie 0457265bd7 added firewall rule for syncthing webui 2025-01-19 16:40:53 -05:00
Richie 3c2476336b added encrypted folders to davids-server 2025-01-19 16:40:53 -05:00
Richie 27ec9d9204 added davids-server to devices 2025-01-19 16:40:53 -05:00
Richie 0f094bfacb added update.nix to bob 2025-01-19 14:41:24 -05:00
Richie 14a312dd0f formatted nixpkgs settings 2025-01-19 14:41:24 -05:00
Richie c87e653ad7 moved zfs services to global/default.nix 2025-01-19 14:41:24 -05:00
Richie e88fc08d91 moved security.rtkit.enable = true; to optional/desktop.nix
https://nixos.wiki/wiki/PipeWire
2025-01-19 14:41:24 -05:00
Richie 2e26035693 removing plex 2025-01-19 13:29:40 -05:00
Richie f877b15d35 added jellyfin-media-player to bob 2025-01-18 17:07:00 -05:00
Richie 7736c36eee added new line 2025-01-18 17:07:00 -05:00
Richie 78159e1d90 removed useragent.override 2025-01-18 17:07:00 -05:00
Richie a39d3f0c51 setup jellyfin to home_assistant and haproxy 2025-01-18 17:07:00 -05:00
Richie 7995d383ca added jellyfin.nix 2025-01-18 17:07:00 -05:00
Richie a7e8494d8a zfs 2.3 update 2025-01-17 18:56:22 -05:00
github-actions[bot] 17599aea9d flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/7f8746a7ef2d15b8fb4acc63cb0d7e3a407739bf?dir=pkgs/firefox-addons&narHash=sha256-RBTk5KavYsPZ56m9C2evS4pDkEu3%2BNdxY6mFNbo8DH8%3D' (2025-01-11)
  → 'gitlab:rycee/nur-expressions/9b53b108b417e6d3fef7743c4034df582fbd9a7e?dir=pkgs/firefox-addons&narHash=sha256-6VB1uVPqyaXTTori47ESnvAlQ1nHR4XwRybBHxWpL3E%3D' (2025-01-16)
• Updated input 'home-manager':
    'github:nix-community/home-manager/2532b500c3ed2b8940e831039dcec5a5ea093afc?narHash=sha256-ZOaGwa%2BWnB7Zn3YXimqjmIugAnHePdXCmNu%2BAHkq808%3D' (2025-01-10)
  → 'github:nix-community/home-manager/12851ae7467bad8ef422b20806ab4d6d81e12d29?narHash=sha256-u1gk5I1an975FOAMMdS6oBKnSIsZza5ZKhaeBZAskVo%3D' (2025-01-17)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/a934c861065b6b1aca9a859c45631336e0e8560c?narHash=sha256-h6hi94y9bTl9DQV4keGpYAfJhnH50rxxEdQlGL7QENw%3D' (2025-01-11)
  → 'github:lilyinstarlight/nixos-cosmic/c92ead1ab77f8be697a44ca855d06c5957ee2a62?narHash=sha256-P9n4HP0XPlXTViw7g3lBRX3Eix0sgcnhanV0ddB08SA%3D' (2025-01-16)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/3f0a8ac25fb674611b98089ca3a5dd6480175751?narHash=sha256-JO%2BlFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I%3D' (2025-01-06)
  → 'github:NixOS/nixpkgs/9c6b49aeac36e2ed73a8c472f1546f6d9cf1addc?narHash=sha256-i/UJ5I7HoqmFMwZEH6vAvBxOrjjOJNU739lnZnhUln8%3D' (2025-01-14)
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/8870dcaff63dfc6647fb10648b827e9d40b0a337?narHash=sha256-OL7leZ6KBhcDF3nEKe4aZVfIm6xQpb1Kb%2BmxySIP93o%3D' (2025-01-09)
  → 'github:nixos/nixos-hardware/b678606690027913f3434dea3864e712b862dde5?narHash=sha256-oMr3PVIQ8XPDI8/x6BHxsWEPBRU98Pam6KGVwUh8MPk%3D' (2025-01-15)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/bffc22eb12172e6db3c5dde9e3e5628f8e3e7912?narHash=sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc%2Bc2c%3D' (2025-01-08)
  → 'github:nixos/nixpkgs/eb62e6aa39ea67e0b8018ba8ea077efe65807dc8?narHash=sha256-uQ%2BNQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140%3D' (2025-01-14)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/b1877784f6a133d4b2b1a36e77ecf1d50684ebb4?narHash=sha256-/IbHbC5dKe/hT2Buv4eKcWijoGRB1mUwU3hErUbD9gw%3D' (2025-01-11)
  → 'github:nixos/nixpkgs/0993fc268872148cebcd1fac8660a8b8ced49542?narHash=sha256-hCddtSuk6m6XROmdOC0te0j2sLeUr28QIzNRk0qF1as%3D' (2025-01-17)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/f214c1b76c347a4e9c8fb68c73d4293a6820d125?narHash=sha256-4P99yL8vGehwzytkpP87eklBePt6aqeEC5JFsIzhfUs%3D' (2025-01-10)
  → 'github:Mic92/sops-nix/553c7cb22fed19fd60eb310423fdc93045c51ba8?narHash=sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk%3D' (2025-01-13)
2025-01-16 22:56:55 -05:00
Richie ae5981dcfa reformatted richie default.nix 2025-01-16 22:40:43 -05:00
Richie 1770cb87d3 removed bob authorizedKey 2025-01-16 22:40:43 -05:00
Richie 61b548e11c changed the defaultSession to plasma 2025-01-16 22:40:43 -05:00
Richie 76da8cd379 add reservations to to zfs datasets
This reduce the risk of out of space error
2025-01-16 22:40:43 -05:00
Richie 0e4cb002c8 set up esphome 2025-01-14 23:49:54 -05:00
Richie ce27dcfa39 added home-manager backupFileExtension 2025-01-11 14:10:52 -05:00
github-actions[bot] 6dae76c51e flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-addons':
    'gitlab:rycee/nur-expressions/0ad9cf75bae6a9290e9c83cef19f60595f189979?dir=pkgs/firefox-addons&narHash=sha256-WXbwHw%2BJeIOo3KvGDjrfsuwj8JWBUkFFxmlm07w9i7Q%3D' (2025-01-07)
  → 'gitlab:rycee/nur-expressions/7f8746a7ef2d15b8fb4acc63cb0d7e3a407739bf?dir=pkgs/firefox-addons&narHash=sha256-RBTk5KavYsPZ56m9C2evS4pDkEu3%2BNdxY6mFNbo8DH8%3D' (2025-01-11)
• Updated input 'home-manager':
    'github:nix-community/home-manager/5c4302313d9207f7ec0886d68f8ff4a3c71209a1?narHash=sha256-kPDXF6cIPsVqSK08XF5EC6KM7BdMnM9vtJDzsnf%2BlLU%3D' (2025-01-07)
  → 'github:nix-community/home-manager/2532b500c3ed2b8940e831039dcec5a5ea093afc?narHash=sha256-ZOaGwa%2BWnB7Zn3YXimqjmIugAnHePdXCmNu%2BAHkq808%3D' (2025-01-10)
• Updated input 'nixos-cosmic':
    'github:lilyinstarlight/nixos-cosmic/0830abeebf3b2d1bae44652ffb2c89cf0d56ddaa?narHash=sha256-Pi70vbASZ1O9cR8RO5d2hBiNjIJBKKLoABl4sxWyOgg%3D' (2025-01-07)
  → 'github:lilyinstarlight/nixos-cosmic/a934c861065b6b1aca9a859c45631336e0e8560c?narHash=sha256-h6hi94y9bTl9DQV4keGpYAfJhnH50rxxEdQlGL7QENw%3D' (2025-01-11)
• Updated input 'nixos-cosmic/nixpkgs-stable':
    'github:NixOS/nixpkgs/cbd8ec4de4469333c82ff40d057350c30e9f7d36?narHash=sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60%3D' (2025-01-05)
  → 'github:NixOS/nixpkgs/3f0a8ac25fb674611b98089ca3a5dd6480175751?narHash=sha256-JO%2BlFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I%3D' (2025-01-06)
• Removed input 'nixos-cosmic/rust-overlay'
• Removed input 'nixos-cosmic/rust-overlay/nixpkgs'
• Updated input 'nixos-hardware':
    'github:nixos/nixos-hardware/4f339f6be2b61662f957c2ee9eda0fa597d8a6d6?narHash=sha256-BG1FfTexFwNty5VhYjaQLMR6CMPfI3QRcaZrFQYu2EM%3D' (2025-01-07)
  → 'github:nixos/nixos-hardware/8870dcaff63dfc6647fb10648b827e9d40b0a337?narHash=sha256-OL7leZ6KBhcDF3nEKe4aZVfIm6xQpb1Kb%2BmxySIP93o%3D' (2025-01-09)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/8f3e1f807051e32d8c95cd12b9b421623850a34d?narHash=sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs%2BrI%3D' (2025-01-04)
  → 'github:nixos/nixpkgs/bffc22eb12172e6db3c5dde9e3e5628f8e3e7912?narHash=sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc%2Bc2c%3D' (2025-01-08)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/ed6183b173fe27e1d7dceef1ddca2aa64d07aad4?narHash=sha256-6Epm0TQkXt0DcS3akYSeT0PzYMpgkZf0V14%2B5UGe6oE%3D' (2025-01-08)
  → 'github:nixos/nixpkgs/b1877784f6a133d4b2b1a36e77ecf1d50684ebb4?narHash=sha256-/IbHbC5dKe/hT2Buv4eKcWijoGRB1mUwU3hErUbD9gw%3D' (2025-01-11)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/c9c88f08e3ee495e888b8d7c8624a0b2519cb773?narHash=sha256-eSjkBwBdQk%2BTZWFlLbclF2rAh4JxbGg8az4w/Lfe7f4%3D' (2025-01-06)
  → 'github:Mic92/sops-nix/f214c1b76c347a4e9c8fb68c73d4293a6820d125?narHash=sha256-4P99yL8vGehwzytkpP87eklBePt6aqeEC5JFsIzhfUs%3D' (2025-01-10)
2025-01-11 13:33:16 -05:00
Richie 92a87c01d3 adding to spell check 2025-01-11 13:31:56 -05:00
Richie bca98cfadb adding unifi support 2025-01-11 13:31:56 -05:00
Richie 91ebec054c fixed evaluation warning 2025-01-10 23:08:32 -05:00
Richie 6ae6bc0dd6 deleted build.sh 2025-01-10 23:03:25 -05:00
Richie 0a1e517468 deleting muninn 2025-01-10 23:03:25 -05:00
Richie f852d9b9fb added games.nix to bob 2025-01-10 23:03:25 -05:00
Richie 7ad195ff24 added syncthing dir to gitignore 2025-01-10 23:03:25 -05:00
Richie 4cadc374b1 setup displayManager autoLogin 2025-01-10 23:03:25 -05:00
Richie 56456ab375 moved dotfiles out of projects 2025-01-10 23:03:25 -05:00
Richie 17b19967e8 updated syncthing dirs 2025-01-10 23:03:25 -05:00
Richie 9ff57ba6f3 setup auto decrypt 2025-01-10 23:03:25 -05:00
Richie 573031e4c9 added gaming user to bob 2025-01-10 23:03:25 -05:00
Richie 6e2703f852 added extraConfig to git settings 2025-01-08 22:36:37 -05:00
86 changed files with 1062 additions and 1582 deletions
+17
View File
@@ -0,0 +1,17 @@
name: build_systems
on:
workflow_dispatch:
pull_request:
push:
branches: [main]
schedule:
- cron: "0 0 1 * *"
jobs:
build:
name: build-installer-iso
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Build default package
run: "nix build .#nixosConfigurations.installer.config.system.build.isoImage"
+6 -2
View File
@@ -1,9 +1,11 @@
name: build_jeeves
name: build_systems
on:
workflow_dispatch:
pull_request:
push:
branches: [main]
schedule:
- cron: "0 22 * * *"
jobs:
build:
@@ -14,9 +16,11 @@ jobs:
system:
- "bob"
- "jeeves"
- "muninn"
- "rhapsody-in-green"
steps:
- uses: actions/checkout@v4
- name: Build default package
run: "nixos-rebuild build --flake ./#${{ matrix.system }}"
- name: copy to nix-cache
run: nix copy --to ssh://jeeves .#nixosConfigurations.${{ matrix.system }}.config.system.build.toplevel
+15
View File
@@ -0,0 +1,15 @@
name: treefmt
on:
workflow_dispatch:
pull_request:
push:
branches: [main]
jobs:
treefmt:
name: nix fmt
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: runs treefmt
run: "treefmt --ci"
+1
View File
@@ -15,6 +15,7 @@ jobs:
- name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@main
with:
token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
pr-title: "Update flake.lock"
pr-labels: |
dependencies
+6
View File
@@ -162,3 +162,9 @@ cython_debug/
#.idea/
test.*
# syncthing
.stfolder
# nixos build results
result
+5 -5
View File
@@ -1,10 +1,10 @@
keys:
- &admin_richie age1u8zj599elqqvcmhxn8zuwrufsz8w8w366d3ayrljjejljt2q45kq8mxw9c
- &admin_richie age1u8zj599elqqvcmhxn8zuwrufsz8w8w366d3ayrljjejljt2q45kq8mxw9c # cspell:disable-line
- &system_bob age1q47vup0tjhulkg7d6xwmdsgrw64h4ax3la3evzqpxyy4adsmk9fs56qz3y
- &system_jeeves age13lmqgc3jvkyah5e3vcwmj4s5wsc2akctcga0lpc0x8v8du3fxprqp4ldkv
- &system_router age1xzxryqq63x65yuza9lmmkud7crjjxpnkdew070yhx6xn7xe4tdws5twxsv
- &system_rhapsody age1ufnewppysaq2wwcl4ugngjz8pfzc5a35yg7luq0qmuqvctajcycs5lf6k4
- &system_bob age1q47vup0tjhulkg7d6xwmdsgrw64h4ax3la3evzqpxyy4adsmk9fs56qz3y # cspell:disable-line
- &system_jeeves age13lmqgc3jvkyah5e3vcwmj4s5wsc2akctcga0lpc0x8v8du3fxprqp4ldkv # cspell:disable-line
- &system_router age1xzxryqq63x65yuza9lmmkud7crjjxpnkdew070yhx6xn7xe4tdws5twxsv # cspell:disable-line
- &system_rhapsody age1ufnewppysaq2wwcl4ugngjz8pfzc5a35yg7luq0qmuqvctajcycs5lf6k4 # cspell:disable-line
creation_rules:
- path_regex: users/secrets\.yaml$
+42 -2
View File
@@ -6,7 +6,9 @@
"advplyr",
"ahci",
"aioesphomeapi",
"aiounifi",
"alsa",
"apiclient",
"archlinux",
"ashift",
"asrouter",
@@ -17,11 +19,14 @@
"auditd",
"autofetch",
"autologin",
"automations",
"autopull",
"autotrim",
"autoupdate",
"azuretools",
"bantime",
"bazarr",
"bgwriter",
"binhex",
"bitwarden",
"blkdiscard",
@@ -32,20 +37,26 @@
"captivedetect",
"cgroupdriver",
"charliermarsh",
"Checkpointing",
"cloudflared",
"codellama",
"codezombiech",
"compactmode",
"Compat",
"contentblocking",
"cookiebanners",
"createdb",
"createrole",
"crlite",
"cryptsetup",
"cuda",
"darkreader",
"datareporting",
"davidanson",
"dconf",
"dearrow",
"debugpy",
"deepseek",
"dialout",
"diffie",
"direnv",
@@ -53,12 +64,16 @@
"dnodesize",
"dotfiles",
"drawio",
"duckdns",
"eamodio",
"ehci",
"emerg",
"endlessh",
"errorlens",
"esbenp",
"esphome",
"extest",
"fadvise",
"fastforwardteam",
"FASTFOX",
"ffmpegthumbnailer",
@@ -70,6 +85,7 @@
"fmask",
"fontconfig",
"formfill",
"forwardfor",
"foxundermoon",
"FULLSCREEN",
"fwupd",
@@ -94,6 +110,7 @@
"HPKP",
"hplip",
"htmlaboutaddons",
"httpchk",
"hurlenko",
"hwloc",
"INITDB",
@@ -101,16 +118,19 @@
"ioit",
"iperf",
"isal",
"jellyfin",
"jnoortheen",
"jsbc",
"kagi",
"kuma",
"lazer",
"levelname",
"libglvnd",
"libmysqlclient",
"libsodium",
"libssh",
"libvirtd",
"llms",
"localtime",
"louislam",
"lsnew",
@@ -118,6 +138,8 @@
"lynis",
"mangohud",
"markdownlint",
"maxconn",
"maxpages",
"maxretry",
"maxtime",
"mechatroner",
@@ -129,7 +151,6 @@
"mountpoints",
"mousewheel",
"mtxr",
"muninn",
"ncdu",
"nemo",
"neofetch",
@@ -139,22 +160,27 @@
"Networkd",
"networkmanager",
"newtabpage",
"nixfmt",
"nixos",
"nixpkgs",
"nmap",
"noauto",
"nodev",
"noecho",
"nonsponsored",
"Noto",
"nprt",
"nvme",
"OCSP",
"oderwat",
"ollama",
"oneshot",
"optimise",
"optoutstudies",
"overalljails",
"overscroll",
"overseerr",
"partitionwise",
"pbmode",
"pciutils",
"pcscd",
@@ -162,7 +188,6 @@
"peerconnection",
"PESKYFOX",
"PGID",
"photoprism",
"pipewire",
"pkgs",
"plugdev",
@@ -172,6 +197,7 @@
"prismlauncher",
"privatebrowsing",
"PRIVOXY",
"protontricks",
"prowlarr",
"proxychains",
"prusa",
@@ -179,8 +205,10 @@
"PUID",
"pulseaudio",
"punycode",
"pychromecast",
"pylance",
"pymetno",
"pyownet",
"qbit",
"qbittorrent",
"qbittorrentvpn",
@@ -188,12 +216,16 @@
"quicksuggest",
"radarr",
"readahead",
"receiveencrypted",
"recordsize",
"Redistributable",
"referer",
"REFERERS",
"relatime",
"Rhosts",
"ripgrep",
"roboto",
"rokuecp",
"routable",
"rspace",
"rtkit",
@@ -215,6 +247,7 @@
"sponsorblock",
"sqltools",
"ssdp",
"SSHOPTS",
"stdenv",
"subresource",
"substituters",
@@ -222,19 +255,24 @@
"sysstat",
"tabmanager",
"tamasfe",
"TCPIP",
"tiktok",
"timonwong",
"titlebar",
"tmmworkshop",
"Tmpfs",
"topsites",
"topstories",
"torrenting",
"treefmt",
"twimg",
"uaccess",
"ublock",
"uiprotect",
"uitour",
"unrar",
"unsubmitted",
"uptimekuma",
"urlbar",
"urlclassifier",
"usbhid",
@@ -246,9 +284,11 @@
"virt",
"virtualisation",
"vpnpromourl",
"wakeonlan",
"webchannel",
"WEBRTC",
"WEBUI",
"wireplumber",
"wireshark",
"Workqueues",
"xattr",
-6
View File
@@ -1,6 +0,0 @@
#!/bin/sh
nixos-rebuild build --flake /home/richie/projects/dotfiles#bob
nixos-rebuild build --flake /home/richie/projects/dotfiles#jeeves
nixos-rebuild build --flake /home/richie/projects/dotfiles#muninn
nixos-rebuild build --flake /home/richie/projects/dotfiles#rhapsody-in-green
+15 -6
View File
@@ -23,7 +23,7 @@
boot = {
tmp.useTmpfs = true;
kernelPackages = lib.mkDefault pkgs.linuxPackages_6_12;
zfs.package = lib.mkDefault pkgs.zfs;
zfs.package = lib.mkDefault pkgs.zfs_2_3;
};
hardware.enableRedistributableFirmware = true;
@@ -31,17 +31,26 @@
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = {inherit inputs outputs;};
extraSpecialArgs = { inherit inputs outputs; };
backupFileExtension = "backup";
};
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
};
config.allowUnfree = true;
};
services.fwupd.enable = true;
services = {
# firmware update
fwupd.enable = true;
snapshot_manager.enable = lib.mkDefault true;
zfs = {
trim.enable = lib.mkDefault true;
autoScrub.enable = lib.mkDefault true;
};
};
programs.zsh.enable = true;
+5 -3
View File
@@ -2,9 +2,11 @@
inputs,
lib,
...
}: let
}:
let
flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs;
in {
in
{
nix = {
settings = {
trusted-users = [
@@ -37,7 +39,7 @@ in {
};
# Add each flake input as a registry and nix_path
registry = lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs;
registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
};
}
+7 -1
View File
@@ -1,4 +1,10 @@
{ inputs, pkgs, lib, config, ... }:
{
inputs,
pkgs,
lib,
config,
...
}:
let
cfg = config.services.snapshot_manager;
in
+11 -1
View File
@@ -2,9 +2,17 @@
{
boot = {
kernelPackages = pkgs.linuxPackages_6_12;
zfs.package = pkgs.zfs;
zfs.package = pkgs.zfs_2_3;
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
# rtkit is optional but recommended for pipewire
security.rtkit.enable = true;
services = {
displayManager.sddm = {
enable = true;
@@ -21,6 +29,8 @@
};
};
pulseaudio.enable = false;
pipewire = {
enable = true;
alsa.enable = true;
+4 -1
View File
@@ -2,6 +2,9 @@
{
services.printing = {
enable = true;
drivers = with pkgs; [ gutenprint hplip ];
drivers = with pkgs; [
gutenprint
hplip
];
};
}
+5 -2
View File
@@ -1,6 +1,9 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [mangohud steam-run];
environment.systemPackages = with pkgs; [
mangohud
steam-run
];
hardware.steam-hardware.enable = true;
programs = {
@@ -11,7 +14,7 @@
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
protontricks.enable = true;
extraCompatPackages = with pkgs; [proton-ge-bin];
extraCompatPackages = with pkgs; [ proton-ge-bin ];
extest.enable = true;
};
gamescope = {
+1 -3
View File
@@ -6,8 +6,7 @@
overrideFolders = true;
dataDir = "/home/richie/Syncthing";
configDir = "/home/richie/.config/syncthing";
settings = {
devices = {
settings.devices = {
phone.id = "LTGPLAE-M4ZDJTM-TZ3DJGY-SLLAVWF-CQDVEVS-RGCS75T-GAPZYK3-KUM6LA5"; # cspell:disable-line
jeeves.id = "ICRHXZW-ECYJCUZ-I4CZ64R-3XRK7CG-LL2HAAK-FGOHD22-BQA4AI6-5OAL6AG"; # cspell:disable-line
ipad.id = "KI76T3X-SFUGV2L-VSNYTKR-TSIUV5L-SHWD3HE-GQRGRCN-GY4UFMD-CW6Z6AX"; # cspell:disable-line
@@ -15,5 +14,4 @@
rhapsody-in-green.id = "ASL3KC4-3XEN6PA-7BQBRKE-A7JXLI6-DJT43BY-Q4WPOER-7UALUAZ-VTPQ6Q4"; # cspell:disable-line
};
};
};
}
+2 -25
View File
@@ -1,32 +1,9 @@
{ lib, pkgs, ... }:
{
systemd = {
services."autopull@dotfiles" = {
requires = [ "multi-user.target" ];
after = [ "multi-user.target" ];
description = "Pull the latest data for dotfiles";
serviceConfig = {
Type = "oneshot";
User = "root";
WorkingDirectory = /root/dotfiles;
ExecStart = "${pkgs.git}/bin/git pull --all --prune";
};
};
timers."autopull@dotfiles" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "1h";
OnUnitActiveSec = "1h";
Unit = "autopull@dotfiles.service";
};
};
};
system.autoUpgrade = {
enable = lib.mkDefault true;
enable = true;
flags = [ "--accept-flake-config" ];
randomizedDelaySec = "1h";
persistent = true;
flake = "github:RAD-Development/nix-dotfiles";
flake = "github:RichieCahill/dotfiles";
};
}
Generated
+28 -104
View File
@@ -9,11 +9,11 @@
},
"locked": {
"dir": "pkgs/firefox-addons",
"lastModified": 1736279099,
"narHash": "sha256-WXbwHw+JeIOo3KvGDjrfsuwj8JWBUkFFxmlm07w9i7Q=",
"lastModified": 1739396257,
"narHash": "sha256-E+xGh25fyBLNo2FYxP4uHkTh4yh1C0AIyYpcVdW3CL0=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "0ad9cf75bae6a9290e9c83cef19f60595f189979",
"rev": "f61927ae7c2b28ee9d426114a06f185f4dea4301",
"type": "gitlab"
},
"original": {
@@ -23,22 +23,6 @@
"type": "gitlab"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1717312683,
"narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1629284811,
@@ -79,11 +63,11 @@
]
},
"locked": {
"lastModified": 1736277415,
"narHash": "sha256-kPDXF6cIPsVqSK08XF5EC6KM7BdMnM9vtJDzsnf+lLU=",
"lastModified": 1739381933,
"narHash": "sha256-4gvobxITgcrNGfwsVG5a46QzQCX89btIYw23p0ilbcc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5c4302313d9207f7ec0886d68f8ff4a3c71209a1",
"rev": "15b59d4191b993ebdfcb1f61b834fced217882ba",
"type": "github"
},
"original": {
@@ -114,36 +98,13 @@
"type": "github"
}
},
"nixos-cosmic": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1736214624,
"narHash": "sha256-Pi70vbASZ1O9cR8RO5d2hBiNjIJBKKLoABl4sxWyOgg=",
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"rev": "0830abeebf3b2d1bae44652ffb2c89cf0d56ddaa",
"type": "github"
},
"original": {
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1736283893,
"narHash": "sha256-BG1FfTexFwNty5VhYjaQLMR6CMPfI3QRcaZrFQYu2EM=",
"lastModified": 1738816619,
"narHash": "sha256-5yRlg48XmpcX5b5HesdGMOte+YuCy9rzQkJz+imcu6I=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "4f339f6be2b61662f957c2ee9eda0fa597d8a6d6",
"rev": "2eccff41bab80839b1d25b303b53d339fbb07087",
"type": "github"
},
"original": {
@@ -155,11 +116,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1736012469,
"narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
"lastModified": 1739214665,
"narHash": "sha256-26L8VAu3/1YRxS8MHgBOyOM8xALdo6N0I04PgorE7UM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
"rev": "64e75cd44acf21c7933d61d7721e812eac1b5a0a",
"type": "github"
},
"original": {
@@ -171,11 +132,11 @@
},
"nixpkgs-master": {
"locked": {
"lastModified": 1736294919,
"narHash": "sha256-6Epm0TQkXt0DcS3akYSeT0PzYMpgkZf0V14+5UGe6oE=",
"lastModified": 1739399097,
"narHash": "sha256-5U1YLh8bENPGtC6j6493qs3lK0PrzZw4omMvJUFOhEI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ed6183b173fe27e1d7dceef1ddca2aa64d07aad4",
"rev": "154a2c1abcea99a98f8b9344dfaba019a28162bd",
"type": "github"
},
"original": {
@@ -186,22 +147,6 @@
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1735563628,
"narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=",
@@ -232,11 +177,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1731205797,
"narHash": "sha256-F7N1mxH1VrkVNHR3JGNMRvp9+98KYO4b832KS8Gl2xI=",
"lastModified": 1736884309,
"narHash": "sha256-eiCqmKl0BIRiYk5/ZhZozwn4/7Km9CWTbc15Cv+VX5k=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "f554d27c1544d9c56e5f1f8e2b8aff399803674e",
"rev": "75d0515332b7ca269f6d7abfd2c44c47a7cbca7b",
"type": "github"
},
"original": {
@@ -249,37 +194,15 @@
"inputs": {
"firefox-addons": "firefox-addons",
"home-manager": "home-manager",
"nixos-cosmic": "nixos-cosmic",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs",
"nixpkgs-master": "nixpkgs-master",
"nixpkgs-stable": "nixpkgs-stable_2",
"nixpkgs-stable": "nixpkgs-stable",
"sops-nix": "sops-nix",
"system_tools": "system_tools",
"systems": "systems_3"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixos-cosmic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736130662,
"narHash": "sha256-z+WGez9oTR2OsiUWE5ZhIpETqM1ogrv6Xcd24WFi6KQ=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "2f5d4d9cd31cc02c36e51cb2e21c4b25c4f78c52",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
@@ -287,11 +210,11 @@
]
},
"locked": {
"lastModified": 1736203741,
"narHash": "sha256-eSjkBwBdQk+TZWFlLbclF2rAh4JxbGg8az4w/Lfe7f4=",
"lastModified": 1739262228,
"narHash": "sha256-7JAGezJ0Dn5qIyA2+T4Dt/xQgAbhCglh6lzCekTVMeU=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "c9c88f08e3ee495e888b8d7c8624a0b2519cb773",
"rev": "07af005bb7d60c7f118d9d9f5530485da5d1e975",
"type": "github"
},
"original": {
@@ -309,11 +232,11 @@
"poetry2nix": "poetry2nix"
},
"locked": {
"lastModified": 1733083480,
"narHash": "sha256-B13faNyBbA3MeI7Jp6pFVbp58rI2Rx5Uvd83csW2p48=",
"lastModified": 1739664204,
"narHash": "sha256-uzT5hQstNHJvdPPqdSiznxPXL3qCaKQ+DmMnx6IpIYk=",
"owner": "RichieCahill",
"repo": "system_tools",
"rev": "bc357d8fabd83c1423611829091e5b1d86dd913c",
"rev": "b36dd59fedeba140175590bfcab2ba22049dfc93",
"type": "github"
},
"original": {
@@ -347,8 +270,9 @@
"type": "github"
},
"original": {
"id": "systems",
"type": "indirect"
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
+19 -22
View File
@@ -8,10 +8,10 @@
"https://nix-community.cachix.org/?priority=10&want-mass-query=true"
];
extra-trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"cache.tmmworkshop.com:jHffkpgbmEdstQPoihJPYW9TQe6jnQbWR2LqkNGV3iA="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache-nix-dot:Od9KN34LXc6Lu7y1ozzV1kIXZa8coClozgth/SYE7dU="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" # cspell:disable-line
"cache.tmmworkshop.com:jHffkpgbmEdstQPoihJPYW9TQe6jnQbWR2LqkNGV3iA=" # cspell:disable-line
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" # cspell:disable-line
"cache-nix-dot:Od9KN34LXc6Lu7y1ozzV1kIXZa8coClozgth/SYE7dU=" # cspell:disable-line
];
};
@@ -38,26 +38,22 @@
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
outputs =
{
self,
nixpkgs,
home-manager,
systems,
nixos-cosmic,
sops-nix,
...
} @ inputs: let
}@inputs:
let
inherit (self) outputs;
lib = nixpkgs.lib // home-manager.lib;
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
@@ -68,37 +64,38 @@
config.allowUnfree = true;
}
);
in {
in
{
inherit lib;
overlays = import ./overlays {inherit inputs outputs;};
overlays = import ./overlays { inherit inputs outputs; };
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
formatter = forEachSystem (pkgs: pkgs.alejandra);
devShells = forEachSystem (pkgs: import ./shell.nix { inherit pkgs; });
formatter = forEachSystem (pkgs: pkgs.treefmt);
nixosConfigurations = {
bob = lib.nixosSystem {
modules = [
./systems/bob
];
specialArgs = {inherit inputs outputs;};
specialArgs = { inherit inputs outputs; };
};
jeeves = lib.nixosSystem {
modules = [
./systems/jeeves
];
specialArgs = {inherit inputs outputs;};
specialArgs = { inherit inputs outputs; };
};
rhapsody-in-green = lib.nixosSystem {
modules = [
./systems/rhapsody-in-green
];
specialArgs = {inherit inputs outputs;};
specialArgs = { inherit inputs outputs; };
};
muninn = lib.nixosSystem {
installer = lib.nixosSystem {
modules = [
./systems/muninn
./systems/installer
];
specialArgs = {inherit inputs outputs;};
specialArgs = { inherit inputs outputs; };
};
};
};
+2 -1
View File
@@ -1,4 +1,5 @@
{inputs, ...}: {
{ inputs, ... }:
{
# When applied, the stable nixpkgs set (declared in the flake inputs) will be accessible through 'pkgs.stable'
stable = final: _prev: {
stable = import inputs.nixpkgs-stable {
+5 -1
View File
@@ -1,4 +1,8 @@
{pkgs ? import <nixpkgs> {}, ...}: {
{
pkgs ? import <nixpkgs> { },
...
}:
{
default = pkgs.mkShell {
NIX_CONFIG = "extra-experimental-features = nix-command flakes ca-derivations";
nativeBuildInputs = with pkgs; [
+13 -18
View File
@@ -1,6 +1,7 @@
{
imports = [
../../users/richie
../../users/gaming
../../common/global
../../common/optional/desktop.nix
../../common/optional/docker.nix
@@ -8,11 +9,14 @@
../../common/optional/steam.nix
../../common/optional/syncthing_base.nix
../../common/optional/systemd-boot.nix
../../common/optional/update.nix
../../common/optional/yubikey.nix
../../common/optional/zerotier.nix
../../common/optional/nvidia.nix
./hardware.nix
./nvidia.nix
./syncthing.nix
./games.nix
./llms.nix
];
networking = {
@@ -22,26 +26,17 @@
networkmanager.enable = true;
};
hardware = {
pulseaudio.enable = false;
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
security.rtkit.enable = true;
services = {
displayManager = {
enable = true;
autoLogin = {
user = "gaming";
enable = true;
};
defaultSession = "plasma";
};
openssh.ports = [ 262 ];
snapshot_manager.enable = true;
zfs = {
trim.enable = true;
autoScrub.enable = true;
};
};
system.stateVersion = "24.05";
+7
View File
@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
osu-lazer-bin
jellyfin-media-player
];
}
+2
View File
@@ -26,6 +26,8 @@
device = "/dev/disk/by-id/nvme-Samsung_SSD_990_PRO_with_Heatsink_1TB_S73JNJ0X114418B-part2";
bypassWorkqueues = true;
allowDiscards = true;
keyFileSize = 4096;
keyFile = "/dev/disk/by-id/usb-Samsung_Flash_Drive_FIT_0374620080067131-0:0";
};
};
kernelModules = [ "kvm-amd" ];
+24
View File
@@ -0,0 +1,24 @@
{
services = {
ollama = {
enable = true;
loadModels = [
"codellama:7b"
"deepseek-r1:1.5b"
"deepseek-r1:7b"
"deepseek-r1:8b"
"deepseek-r1:14b"
"deepseek-r1:32b"
"llama3.2:3b"
"mistral-nemo:12b"
];
acceleration = "cuda";
openFirewall = true;
};
open-webui = {
enable = true;
openFirewall = true;
host = "192.168.90.25";
};
};
}
+2 -27
View File
@@ -1,8 +1,7 @@
{
services.syncthing.settings.folders = {
"notes" = {
id = "l62ul-lpweo"; # cspell:disable-line
path = "/home/richie/notes";
"dotfiles" = {
path = "/home/richie/dotfiles";
devices = [
"jeeves"
"rhapsody-in-green"
@@ -30,29 +29,5 @@
];
fsWatcherEnabled = true;
};
"projects" = {
id = "vyma6-lqqrz"; # cspell:disable-line
path = "/home/richie/projects";
devices = [
"jeeves"
"rhapsody-in-green"
];
fsWatcherEnabled = true;
};
"temp" = {
id = "bob_temp";
path = "/home/richie/temp";
devices = [
"jeeves"
];
fsWatcherEnabled = true;
};
"vault" = {
path = "/home/richie/vault";
devices = [
"rhapsody-in-green"
];
fsWatcherEnabled = true;
};
};
}
+24
View File
@@ -0,0 +1,24 @@
{
inputs,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") ];
environment.systemPackages = with pkgs; [
git
python313
inputs.system_tools.packages.x86_64-linux.default
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
systemd.services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ];
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJYZFsc9CSH03ZUP7y81AHwSyjLwFmcshVFCyxDcYhBT rhapsody-in-green" # cspell:disable-line
];
}
+3 -29
View File
@@ -1,6 +1,3 @@
let
vars = import ./vars.nix;
in
{
imports = [
../../users/richie
@@ -10,12 +7,11 @@ in
../../common/optional/syncthing_base.nix
../../common/optional/zerotier.nix
./docker
./services
./hardware.nix
./home_assistant.nix
./networking.nix
./programs.nix
./runner.nix
./services.nix
./runners
./syncthing.nix
];
@@ -28,31 +24,9 @@ in
services = {
openssh.ports = [ 629 ];
nix-serve = {
enable = true;
secretKeyFile = "${vars.storage_secrets}/services/nix-cache/cache-priv-key.pem";
openFirewall = true;
};
plex = {
enable = true;
dataDir = vars.media_plex;
openFirewall = true;
};
smartd.enable = true;
snapshot_manager = {
enable = true;
path = ./snapshot_config.toml;
};
sysstat.enable = true;
zfs = {
trim.enable = true;
autoScrub.enable = true;
};
snapshot_manager.path = ./snapshot_config.toml;
};
system.stateVersion = "24.05";
-19
View File
@@ -1,19 +0,0 @@
let
vars = import ../vars.nix;
in
{
virtualisation.oci-containers.containers.audiobookshelf = {
image = "ghcr.io/advplyr/audiobookshelf:latest";
volumes = [
"${vars.media_docker_configs}/audiobookshelf:/config"
"${vars.media_docker_configs}/audiobookshelf:/metadata"
"${vars.storage_library}/audiobooks:/audiobooks"
"${vars.storage_library}/books:/books"
];
environment = {
TZ = "America/New_York";
};
extraOptions = [ "--network=web" ];
autoStart = true;
};
}
-15
View File
@@ -1,15 +0,0 @@
let
vars = import ../vars.nix;
in
{
virtualisation.oci-containers.containers.filebrowser = {
image = "hurlenko/filebrowser:latest";
extraOptions = [ "--network=web" ];
volumes = [
"/zfs:/data"
"${vars.media_docker_configs}/filebrowser:/config"
];
autoStart = true;
user = "1000:users";
};
}
-12
View File
@@ -1,12 +0,0 @@
let
vars = import ../vars.nix;
in
{
virtualisation.oci-containers.containers.grafana = {
image = "grafana/grafana-enterprise:latest";
volumes = [ "${vars.media_docker_configs}/grafana:/var/lib/grafana" ];
user = "600:600";
extraOptions = [ "--network=web" ];
autoStart = true;
};
}
-53
View File
@@ -1,53 +0,0 @@
let
vars = import ../vars.nix;
in
{
virtualisation.oci-containers.containers.photoprism = {
image = "photoprism/photoprism:latest";
volumes = [
"${vars.media_docker_configs}/photoprism:/photoprism/storage"
"${vars.storage_photos}/originals:/photoprism/originals"
"${vars.storage_photos}/import:/photoprism/import"
];
environment = {
PHOTOPRISM_ADMIN_USER="admin";
PHOTOPRISM_AUTH_MODE="password";
PHOTOPRISM_DISABLE_TLS="false";
PHOTOPRISM_DEFAULT_TLS="true";
PHOTOPRISM_ORIGINALS_LIMIT="30000";
PHOTOPRISM_HTTP_COMPRESSION="gzip";
PHOTOPRISM_LOG_LEVEL="info";
PHOTOPRISM_READONLY="false";
PHOTOPRISM_EXPERIMENTAL="false";
PHOTOPRISM_DISABLE_CHOWN="false";
PHOTOPRISM_DISABLE_WEBDAV="false";
PHOTOPRISM_DISABLE_SETTINGS="false";
PHOTOPRISM_DISABLE_TENSORFLOW="false";
PHOTOPRISM_DISABLE_FACES="false";
PHOTOPRISM_DISABLE_CLASSIFICATION="false";
PHOTOPRISM_DISABLE_VECTORS="false";
PHOTOPRISM_DISABLE_RAW="false";
PHOTOPRISM_RAW_PRESETS="false";
PHOTOPRISM_SIDECAR_YAML="true";
PHOTOPRISM_BACKUP_ALBUMS="true";
PHOTOPRISM_BACKUP_DATABASE="true";
PHOTOPRISM_BACKUP_SCHEDULE="daily";
PHOTOPRISM_INDEX_SCHEDULE="";
PHOTOPRISM_AUTO_INDEX="300";
PHOTOPRISM_AUTO_IMPORT= "-1";
PHOTOPRISM_DETECT_NSFW="false";
PHOTOPRISM_UPLOAD_NSFW="true";
PHOTOPRISM_DATABASE_DRIVER="sqlite";
PHOTOPRISM_SITE_CAPTION="AI-Powered Photos App";
PHOTOPRISM_SITE_DESCRIPTION="";
PHOTOPRISM_SITE_AUTHOR="";
PHOTOPRISM_UID="600";
PHOTOPRISM_GID="600";
# PHOTOPRISM_UMASK: 0000
};
environmentFiles = ["${vars.storage_secrets}/docker/photoprism"];
autoStart = true;
extraOptions = [ "--network=web" ];
};
}
-32
View File
@@ -1,32 +0,0 @@
let
vars = import ../vars.nix;
in
{
users = {
users.postgres = {
isSystemUser = true;
group = "postgres";
uid = 999;
};
groups.postgres = {
gid = 999;
};
};
virtualisation.oci-containers.containers = {
postgres = {
image = "postgres:17";
ports = [ "5432:5432" ];
volumes = [ "${vars.media_database}/postgres:/var/lib/postgresql/data" ];
environment = {
POSTGRES_USER = "admin";
POSTGRES_DB = "archive";
POSTGRES_INITDB_ARGS = "--auth-host=scram-sha-256";
};
environmentFiles = [ "${vars.storage_secrets}/docker/postgres" ];
autoStart = true;
user = "postgres:postgres";
};
};
}
+9 -2
View File
@@ -3,8 +3,15 @@ let
in
{
networking.firewall = {
allowedTCPPorts = [ 6881 8082 29432 ];
allowedUDPPorts = [ 6881 29432 ];
allowedTCPPorts = [
6881
8082
29432
];
allowedUDPPorts = [
6881
29432
];
};
virtualisation.oci-containers.containers.qbit = {
image = "ghcr.io/linuxserver/qbittorrent:5.0.2";
+6 -2
View File
@@ -3,7 +3,11 @@ let
in
{
networking.firewall = {
allowedTCPPorts = [ 6882 8081 8118 ];
allowedTCPPorts = [
6882
8081
8118
];
allowedUDPPorts = [ 6882 ];
};
virtualisation.oci-containers.containers.qbitvpn = {
@@ -36,7 +40,7 @@ in
DELUGE_DAEMON_LOG_LEVEL = "debug";
DELUGE_WEB_LOG_LEVEL = "debug";
};
environmentFiles = ["${vars.storage_secrets}/docker/qbitvpn"];
environmentFiles = [ "${vars.storage_secrets}/docker/qbitvpn" ];
autoStart = true;
};
}
-39
View File
@@ -1,39 +0,0 @@
let
vars = import ../vars.nix;
in
{
virtualisation.oci-containers.containers = {
haproxy = {
image = "haproxy:latest";
user = "600:600";
environment = {
TZ = "Etc/EST";
};
volumes = [
"${vars.storage_secrets}/docker/cloudflare.pem:/etc/ssl/certs/cloudflare.pem"
"${./haproxy.cfg}:/usr/local/etc/haproxy/haproxy.cfg"
];
dependsOn = [
"audiobookshelf"
"filebrowser"
"grafana"
"photoprism"
"uptime_kuma"
];
extraOptions = [ "--network=web" ];
autoStart = true;
};
cloud_flare_tunnel = {
image = "cloudflare/cloudflared:latest";
user = "600:600";
cmd = [
"tunnel"
"run"
];
environmentFiles = ["${vars.storage_secrets}/docker/cloud_flare_tunnel"];
dependsOn = [ "haproxy" ];
extraOptions = [ "--network=web" ];
autoStart = true;
};
};
}
+2 -1
View File
@@ -3,7 +3,8 @@ let
in
{
virtualisation.oci-containers.containers.share = {
image = "ubuntu/apache2:latest";
image = "ubuntu/apache2:2.4-22.04_beta";
ports = [ "8091:80" ];
volumes = [
"${../../../common/docker_templates}/file_server/sites/:/etc/apache2/sites-enabled/"
"${vars.media_share}:/data"
+2 -1
View File
@@ -4,7 +4,8 @@ in
{
virtualisation.oci-containers.containers = {
uptime_kuma = {
image = "louislam/uptime-kuma:latest";
ports = [ "3001:3001" ];
image = "louislam/uptime-kuma:1.23.16-debian";
volumes = [
"${vars.media_docker_configs}/uptime_kuma:/app/data"
"/var/run/docker.sock:/var/run/docker.sock"
+29 -14
View File
@@ -1,6 +1,11 @@
{ config, lib, modulesPath, ... }:
{
imports =[ (modulesPath + "/installer/scan/not-detected.nix") ];
config,
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = {
loader = {
@@ -88,22 +93,32 @@
bypassWorkqueues = true;
allowDiscards = true;
};
"luks-storage_pool-wwn-0x5000cca23bc438dd-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bc438dd-part1";
"luks-storage_pool-wwn-0x5000cca23bd035f5-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bd035f5-part1";
"luks-storage_pool-wwn-0x5000cca23bd00ad6-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bd00ad6-part1";
"luks-storage_pool-wwn-0x5000cca23bcf313e-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bcf313e-part1";
"luks-storage_pool-wwn-0x5000cca23bcdf3b8-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bcdf3b8-part1";
"luks-storage_pool-wwn-0x5000cca23bd02746-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bd02746-part1";
"luks-storage_pool-wwn-0x5000cca23bcf9f89-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bcf9f89-part1";
"luks-storage_pool-wwn-0x5000cca23bd00ae9-part1".device = "/dev/disk/by-id/wwn-0x5000cca23bd00ae9-part1";
"luks-storage_pool-wwn-0x5000cca23bc438dd-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bc438dd-part1";
"luks-storage_pool-wwn-0x5000cca23bd035f5-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bd035f5-part1";
"luks-storage_pool-wwn-0x5000cca23bd00ad6-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bd00ad6-part1";
"luks-storage_pool-wwn-0x5000cca23bcf313e-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bcf313e-part1";
"luks-storage_pool-wwn-0x5000cca23bcdf3b8-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bcdf3b8-part1";
"luks-storage_pool-wwn-0x5000cca23bd02746-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bd02746-part1";
"luks-storage_pool-wwn-0x5000cca23bcf9f89-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bcf9f89-part1";
"luks-storage_pool-wwn-0x5000cca23bd00ae9-part1".device =
"/dev/disk/by-id/wwn-0x5000cca23bd00ae9-part1";
# Torrenting pool
"luks-torrenting_pool-wwn-0x500a0751e6c3c01e-part1" = {
device = "/dev/disk/by-id/wwn-0x500a0751e6c3c01e-part1";
bypassWorkqueues = true;
allowDiscards = true;
};
"luks-torrenting_pool-wwn-0x5000cca264f080a3-part1".device = "/dev/disk/by-id/wwn-0x5000cca264f080a3-part1";
"luks-torrenting_pool-wwn-0x5000cca298c33ae5-part1".device = "/dev/disk/by-id/wwn-0x5000cca298c33ae5-part1";
"luks-torrenting_pool-wwn-0x5000cca264f080a3-part1".device =
"/dev/disk/by-id/wwn-0x5000cca264f080a3-part1";
"luks-torrenting_pool-wwn-0x5000cca298c33ae5-part1".device =
"/dev/disk/by-id/wwn-0x5000cca298c33ae5-part1";
# cspell:enable
};
};
@@ -122,8 +137,8 @@
fsType = "zfs";
};
"/nix" =
{ device = "root_pool/nix";
"/nix" = {
device = "root_pool/nix";
fsType = "zfs";
};
-57
View File
@@ -1,57 +0,0 @@
let
vars = import ./vars.nix;
in
{
services.home-assistant = {
enable = true;
openFirewall = true;
configDir = vars.media_home_assistant;
config = {
http = {
server_port = 8123;
server_host = [
"192.168.95.14"
"192.168.90.40"
"192.168.98.4"
];
use_x_forwarded_for = true;
trusted_proxies = "172.18.0.0/24";
};
homeassistant = {
time_zone = "America/New_York";
unit_system = "imperial";
temperature_unit = "F";
};
assist_pipeline = { };
backup = { };
bluetooth = { };
config = { };
dhcp = { };
energy = { };
history = { };
homeassistant_alerts = { };
image_upload = { };
logbook = { };
media_source = { };
mobile_app = { };
ssdp = { };
sun = { };
webhook = { };
zeroconf = { };
automation = "!include automations.yaml";
script = "!include scripts.yaml";
scene = "!include scenes.yaml";
group = "!include groups.yaml";
};
extraPackages =
python3Packages: with python3Packages; [
psycopg2
gtts
aioesphomeapi
esphome-dashboard-api
bleak-esphome
pymetno
];
extraComponents = [ "isal" ];
};
}
+1 -23
View File
@@ -7,25 +7,12 @@
};
systemd.network = {
enable = true;
netdevs = {
"20-ioit-vlan" = {
netdevConfig = {
Kind = "vlan";
Name = "ioit-vlan";
};
vlanConfig.Id = 20;
};
};
networks = {
"10-1GB_Primary" = {
matchConfig.Name = "enp98s0f0";
address = [ "192.168.95.14/24" ];
routes = [{ Gateway = "192.168.95.1"; }];
vlan = [ "ioit-vlan" ];
routes = [ { Gateway = "192.168.95.1"; } ];
linkConfig.RequiredForOnline = "routable";
};
"10-1GB_Secondary" = {
@@ -41,15 +28,6 @@
matchConfig.Name = "enp97s0f1np1";
DHCP = "yes";
};
"40-ioit-vlan" = {
matchConfig.Name = "ioit-vlan";
DHCP = "yes";
};
};
};
services.zerotierone = {
enable = true;
joinNetworks = [ "e4da7455b2ae64ca" ];
};
}
-29
View File
@@ -1,29 +0,0 @@
{ pkgs, ... }:
let
vars = import ./vars.nix;
in
{
users = {
users.github-runners = {
isSystemUser = true;
group = "github-runners";
uid = 601;
};
groups.github-runners = {
gid = 601;
};
};
services.github-runners.nix_builder = {
enable = true;
replace = true;
workDir = "/zfs/media/github-runners/nix_builder/";
url = "https://github.com/RichieCahill/dotfiles";
extraLabels = [ "nixos" ];
tokenFile = "${vars.storage_secrets}/services/github_runners/nix_builder";
user = "github-runners";
group = "github-runners";
extraPackages = [ pkgs.nixos-rebuild ];
# extraEnvironment
};
}
+26
View File
@@ -0,0 +1,26 @@
{ pkgs, ... }:
{
imports = [ ./nix_builder.nix ];
users = {
users.github-runners = {
shell = pkgs.bash;
isSystemUser = true;
group = "github-runners";
uid = 601;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA/S8i+BNX/12JNKg+5EKGX7Aqimt5KM+ve3wt/SyWuO github-runners" # cspell:disable-line
];
};
groups.github-runners.gid = 601;
};
services.nix_builder.containers = {
nix-builder-0.enable = true;
nix-builder-1.enable = true;
nix-builder-2.enable = true;
nix-builder-3.enable = true;
nix-builder-4.enable = true;
nix-builder-5.enable = true;
};
}
+101
View File
@@ -0,0 +1,101 @@
{ config, lib, ... }:
with lib;
let
vars = import ../vars.nix;
in
{
options.services.nix_builder.containers = mkOption {
type = types.attrsOf (
types.submodule (
{ name, ... }:
{
options.enable = mkEnableOption "GitHub runner container";
}
)
);
default = { };
description = "GitHub runner container configurations";
};
config.containers = mapAttrs (
name: cfg:
mkIf cfg.enable {
autoStart = true;
bindMounts = {
"/storage" = {
mountPoint = "/zfs/media/github-runners/${name}";
isReadOnly = false;
};
"/secrets".mountPoint = "${vars.storage_secrets}/services/github-runners/${name}";
"ssh-keys".mountPoint = "${vars.storage_secrets}/services/github-runners/id_ed25519_github-runners";
};
config =
{
config,
pkgs,
lib,
...
}:
{
nix.settings = {
trusted-substituters = [
"https://cache.nixos.org"
"https://cache.tmmworkshop.com"
"https://nix-community.cachix.org"
];
substituters = [
"https://cache.nixos.org/?priority=2&want-mass-query=true"
"https://cache.tmmworkshop.com/?priority=2&want-mass-query=true"
"https://nix-community.cachix.org/?priority=10&want-mass-query=true"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"cache.tmmworkshop.com:jHffkpgbmEdstQPoihJPYW9TQe6jnQbWR2LqkNGV3iA="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
experimental-features = [
"flakes"
"nix-command"
];
};
programs.ssh.extraConfig = ''
Host jeeves
Port 629
User github-runners
HostName 192.168.95.14
IdentityFile ${vars.storage_secrets}/services/github-runners/id_ed25519_github-runners
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
'';
services.github-runners.${name} = {
enable = true;
replace = true;
workDir = "/zfs/media/github-runners/${name}";
url = "https://github.com/RichieCahill/dotfiles";
extraLabels = [ "nixos" ];
tokenFile = "${vars.storage_secrets}/services/github-runners/${name}";
user = "github-runners";
group = "github-runners";
extraPackages = with pkgs; [
nixfmt-rfc-style
nixos-rebuild
openssh
treefmt
];
};
users = {
users.github-runners = {
shell = pkgs.bash;
isSystemUser = true;
group = "github-runners";
uid = 601;
};
groups.github-runners.gid = 601;
};
system.stateVersion = "24.11";
};
}
) config.services.nix_builder.containers;
}
+1 -1
View File
@@ -20,8 +20,8 @@ sudo zfs create -o compression=zstd-9 media/docker
sudo zfs create -o recordsize=1M -o compression=zstd-19 media/library
sudo zfs create -o compression=zstd-9 -o sync=disabled media/github-runners
sudo zfs create -o copies=3 media/notes
sudo zfs create -o recordsize=16k -o primarycache=metadata -o mountpoint=/zfs/media/database/photoprism_mariadb media/photoprism_mariadb
sudo zfs create -o compression=zstd-9 media/plex
sudo zfs create -o compression=zstd-9 media/services
sudo zfs create -o compression=zstd-19 media/home_assistant
sudo zfs create -o exec=off media/share
sudo zfs create -o recordsize=16k -o primarycache=metadata -o mountpoint=/zfs/media/database/postgres media/postgres
@@ -0,0 +1,10 @@
{ lib, ... }:
let
vars = import ../vars.nix;
in
{
services.audiobookshelf.enable = true;
systemd.services.audiobookshelf.serviceConfig.WorkingDirectory =
lib.mkForce "${vars.media_docker_configs}/audiobookshelf";
users.users.audiobookshelf.home = lib.mkForce "${vars.media_docker_configs}/audiobookshelf";
}
@@ -0,0 +1,17 @@
{ pkgs, ... }:
let
vars = import ../vars.nix;
in
{
systemd.services.cloud_flare_tunnel = {
description = "cloud_flare_tunnel proxy's traffic through cloudflare";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
EnvironmentFile = "${vars.storage_secrets}/docker/cloud_flare_tunnel";
ExecStart = "${pkgs.cloudflared}/bin/cloudflared --no-autoupdate tunnel run";
Restart = "on-failure";
};
};
}
+9
View File
@@ -0,0 +1,9 @@
{ lib, ... }:
{
imports =
let
files = builtins.attrNames (builtins.readDir ./.);
nixFiles = builtins.filter (name: lib.hasSuffix ".nix" name && name != "default.nix") files;
in
map (file: ./. + "/${file}") nixFiles;
}
+10
View File
@@ -0,0 +1,10 @@
let
vars = import ../vars.nix;
in
{
services.duckdns = {
enable = true;
tokenFile = "${vars.storage_secrets}/services/duckdns/token";
domainsFile = "${vars.storage_secrets}/services/duckdns/domains";
};
}
+21
View File
@@ -0,0 +1,21 @@
{
pkgs,
...
}:
let
vars = import ../vars.nix;
in
{
systemd.services.filebrowser = {
description = "filebrowser";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
User = "richie";
Group = "users";
ExecStart = "${pkgs.filebrowser}/bin/filebrowser --root=/zfs --address=0.0.0.0 --database=${vars.media_docker_configs}/filebrowser/filebrowser.db";
Restart = "on-failure";
};
};
}
@@ -21,57 +21,53 @@ defaults
#Application Setup
frontend ContentSwitching
bind *:80
bind *:443 ssl crt /etc/ssl/certs/cloudflare.pem
bind *:80 v4v6
bind *:443 v4v6 ssl crt /zfs/storage/secrets/docker/cloudflare.pem
mode http
# tmmworkshop.com
acl host_audiobookshelf hdr(host) -i audiobookshelf.tmmworkshop.com
acl host_cache hdr(host) -i cache.tmmworkshop.com
acl host_filebrowser hdr(host) -i filebrowser.tmmworkshop.com
acl host_grafana hdr(host) -i grafana.tmmworkshop.com
acl host_homeassistant hdr(host) -i homeassistant.tmmworkshop.com
acl host_photoprism hdr(host) -i photoprism.tmmworkshop.com
acl host_jellyfin hdr(host) -i jellyfin.tmmworkshop.com
acl host_share hdr(host) -i share.tmmworkshop.com
acl host_uptime_kuma hdr(host) -i uptimekuma-jeeves.tmmworkshop.com
use_backend audiobookshelf_nodes if host_audiobookshelf
use_backend cache_nodes if host_cache
use_backend filebrowser_nodes if host_filebrowser
use_backend grafana_nodes if host_grafana
use_backend homeassistant_nodes if host_homeassistant
use_backend photoprism_nodes if host_photoprism
use_backend jellyfin if host_jellyfin
use_backend share_nodes if host_share
use_backend uptime_kuma_nodes if host_uptime_kuma
backend audiobookshelf_nodes
mode http
server server audiobookshelf:80
server server 127.0.0.1:8000
backend cache_nodes
mode http
server server 192.168.90.40:5000
backend grafana_nodes
mode http
server server grafana:3000
server server 127.0.0.1:5000
backend filebrowser_nodes
mode http
server server filebrowser:8080
server server 127.0.0.1:8080
backend homeassistant_nodes
mode http
server server 192.168.95.14:8123
server server 127.0.0.1:8123
backend photoprism_nodes
mode http
server server photoprism:2342
backend jellyfin
option httpchk
option forwardfor
http-check send meth GET uri /health
http-check expect string Healthy
server jellyfin 127.0.0.1:8096
backend share_nodes
mode http
server server share:80
server server 127.0.0.1:8091
backend uptime_kuma_nodes
mode http
server server uptime_kuma:3001
server server 127.0.0.1:3001
+11
View File
@@ -0,0 +1,11 @@
{
networking.firewall.allowedTCPPorts = [
80
443
];
services.haproxy = {
enable = true;
config = builtins.readFile ./haproxy.cfg;
};
}
@@ -0,0 +1,70 @@
let
vars = import ../vars.nix;
in
{
services = {
home-assistant = {
enable = true;
openFirewall = true;
configDir = vars.media_home_assistant;
config = {
http = {
server_port = 8123;
server_host = [
"192.168.95.14"
"192.168.90.40"
"127.0.0.1"
];
use_x_forwarded_for = true;
trusted_proxies = "127.0.0.1";
};
homeassistant = {
time_zone = "America/New_York";
unit_system = "us_customary";
temperature_unit = "F";
};
assist_pipeline = { };
backup = { };
bluetooth = { };
config = { };
dhcp = { };
energy = { };
history = { };
homeassistant_alerts = { };
image_upload = { };
logbook = { };
media_source = { };
mobile_app = { };
ssdp = { };
sun = { };
webhook = { };
zeroconf = { };
automation = "!include automations.yaml";
script = "!include scripts.yaml";
scene = "!include scenes.yaml";
group = "!include groups.yaml";
};
extraPackages =
python3Packages: with python3Packages; [
aioesphomeapi
aiounifi
bleak-esphome
esphome-dashboard-api
gtts
jellyfin-apiclient-python
psycopg2
pymetno
pyownet
rokuecp
uiprotect
wakeonlan
];
extraComponents = [ "isal" ];
};
esphome = {
enable = true;
openFirewall = true;
address = "192.168.90.40";
};
};
}
+10
View File
@@ -0,0 +1,10 @@
let
vars = import ../vars.nix;
in
{
services.jellyfin = {
enable = true;
openFirewall = true;
dataDir = "${vars.media_services}/jellyfin";
};
}
+10
View File
@@ -0,0 +1,10 @@
let
vars = import ../vars.nix;
in
{
services.nix-serve = {
enable = true;
secretKeyFile = "${vars.storage_secrets}/services/nix-cache/cache-priv-key.pem";
openFirewall = true;
};
}
+127
View File
@@ -0,0 +1,127 @@
{ pkgs, ... }:
let
vars = import ../vars.nix;
in
{
networking.firewall.allowedTCPPorts = [ 5432 ];
services.postgresql = {
enable = true;
package = pkgs.postgresql_17_jit;
enableTCPIP = true;
enableJIT = true;
dataDir = "${vars.media_database}/postgres";
authentication = pkgs.lib.mkOverride 10 ''
#type database DBuser origin-address auth-method
local all all trust
# ipv4
host all all 127.0.0.1/32 trust
host all all 192.168.90.1/24 trust
# ipv6
host all all ::1/128 trust
'';
identMap = ''
# ArbitraryMapName systemUser DBUser
superuser_map root postgres
superuser_map postgres postgres
# Let other names login as themselves
superuser_map richie postgres
'';
ensureUsers = [
{
name = "postgres";
ensureClauses = {
superuser = true;
login = true;
createrole = true;
createdb = true;
replication = true;
};
}
{
name = "richie";
ensureClauses = {
superuser = true;
login = true;
createrole = true;
createdb = true;
replication = true;
};
}
];
# Thank you NotAShelf
# https://github.com/NotAShelf/nyx/blob/d407b4d6e5ab7f60350af61a3d73a62a5e9ac660/modules/core/roles/server/system/services/databases/postgresql.nix#L74
settings = {
# Connectivity;
max_connections = 100;
superuser_reserved_connections = 3;
# Memory Settings;
shared_buffers = "1024 MB";
work_mem = "32 MB";
maintenance_work_mem = "320 MB";
huge_pages = "off";
effective_cache_size = "2 GB";
effective_io_concurrency = 100; # concurrent IO only really activated if OS supports posix_fadvise function;
random_page_cost = 1.25; # speed of random disk access relative to sequential access (1.0);
# Monitoring;
shared_preload_libraries = "pg_stat_statements,auto_explain"; # per statement resource usage stats & log explain statements for slow queries
track_io_timing = "on"; # measure exact block IO times;
track_functions = "pl"; # track execution times of pl-language procedures if any;
# Replication;
wal_level = "replica"; # consider using at least "replica";
max_wal_senders = 0;
synchronous_commit = "on";
# Checkpointing: ;
checkpoint_timeout = "15 min";
checkpoint_completion_target = 0.9;
max_wal_size = "1024 MB";
min_wal_size = "512 MB";
# WAL writing;
wal_compression = "on";
wal_buffers = -1; # auto-tuned by Postgres till maximum of segment size (16MB by default);
wal_writer_delay = "200ms";
wal_writer_flush_after = "1MB";
# Background writer;
bgwriter_delay = "200ms";
bgwriter_lru_maxpages = 100;
bgwriter_lru_multiplier = 2.0;
bgwriter_flush_after = 0;
# Parallel queries: ;
max_worker_processes = 6;
max_parallel_workers_per_gather = 3;
max_parallel_maintenance_workers = 3;
max_parallel_workers = 6;
parallel_leader_participation = "on";
# Advanced features ;
enable_partitionwise_join = "on";
enable_partitionwise_aggregate = "on";
jit = "on";
jit_above_cost = 100000;
jit_inline_above_cost = 150000;
jit_optimize_above_cost = 500000;
# log slow queries
log_min_duration_statement = 100;
"auto_explain.log_min_duration" = 100;
# logging configuration
log_connections = true;
log_statement = "all";
logging_collector = true;
log_disconnections = true;
};
};
}
@@ -4,7 +4,7 @@
...
}:
let
vars = import ./vars.nix;
vars = import ../vars.nix;
in
{
systemd = {
@@ -13,7 +13,7 @@ in
description = "maintains /zfs/storage/plex permissions";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.bash}/bin/bash ${./scripts/plex_permission.sh}";
ExecStart = "${pkgs.bash}/bin/bash ${../scripts/plex_permission.sh}";
};
};
startup_validation = {
@@ -25,7 +25,7 @@ in
serviceConfig = {
EnvironmentFile = "${vars.storage_secrets}/services/server-validation";
Type = "oneshot";
ExecStart = "${inputs.system_tools.packages.x86_64-linux.default}/bin/validate_jeeves";
ExecStart = "${inputs.system_tools.packages.x86_64-linux.default}/bin/validate_system --config-file='${./validate_system.toml}'";
};
};
};
@@ -0,0 +1,13 @@
zpool = ["root_pool", "storage", "torrenting", "media"]
services = [
"audiobookshelf",
"cloud_flare_tunnel",
"haproxy",
"docker-qbit",
"docker-qbitvpn",
"docker-uptime_kuma",
"docker",
"filebrowser",
"home-assistant",
"jellyfin",
]
+72 -6
View File
@@ -2,13 +2,18 @@ let
vars = import ./vars.nix;
in
{
networking.firewall.allowedTCPPorts = [ 8384 ];
services.syncthing = {
guiAddress = "192.168.90.40:8384";
settings.folders = {
"bob_temp" = {
path = "${vars.storage_syncthing}/bob_temp";
settings = {
devices.davids-server.id = "7GXTDGR-AOXFW2O-K6J7NM3-XYZNRRW-AKHAFWM-GBOWUPQ-OA6JIWD-ER7RDQL"; # cspell:disable-line
folders = {
"dotfiles" = {
path = "/home/richie/dotfiles";
devices = [
"jeeves"
"bob"
"rhapsody-in-green"
];
fsWatcherEnabled = true;
};
@@ -16,8 +21,8 @@ in
id = "l62ul-lpweo"; # cspell:disable-line
path = vars.media_notes;
devices = [
"bob"
"rhapsody-in-green"
"davids-server"
];
fsWatcherEnabled = true;
};
@@ -46,7 +51,6 @@ in
id = "vyma6-lqqrz"; # cspell:disable-line
path = "${vars.storage_syncthing}/projects";
devices = [
"bob"
"rhapsody-in-green"
];
fsWatcherEnabled = true;
@@ -58,6 +62,68 @@ in
];
fsWatcherEnabled = true;
};
"vault" = {
path = "/home/richie/vault";
devices = [
"rhapsody-in-green"
"davids-server"
];
fsWatcherEnabled = true;
};
"backup" = {
path = "${vars.storage_syncthing}/backup";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
};
#
"davids-backup1" = {
id = "8229p-8z3tm"; # cspell:disable-line
path = "${vars.storage_syncthing}/davids_backups/1";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
type = "receiveencrypted";
};
"davids-backup2" = {
id = "iciw3-dp6ao"; # cspell:disable-line
path = "${vars.storage_syncthing}/davids_backups/2";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
type = "receiveencrypted";
};
"davids-backup3" = {
id = "9si6m-bnkjb"; # cspell:disable-line
path = "${vars.storage_syncthing}/davids_backups/3";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
type = "receiveencrypted";
};
"davids-backup4" = {
id = "qjyfy-uupj4"; # cspell:disable-line
path = "${vars.storage_syncthing}/davids_backups/4";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
type = "receiveencrypted";
};
"davids-backup5" = {
id = "fm4h5-emsu2"; # cspell:disable-line
path = "${vars.storage_syncthing}/davids_backups/5";
devices = [
"davids-server"
];
fsWatcherEnabled = true;
type = "receiveencrypted";
};
};
};
};
}
+1
View File
@@ -11,6 +11,7 @@ in
media_docker_configs = "${zfs_media}/docker/configs";
media_mirror = "${zfs_media}/mirror";
media_share = "${zfs_media}/share";
media_services = "${zfs_media}/services";
media_notes = "${zfs_media}/notes";
media_plex = "${zfs_media}/plex";
media_home_assistant = "${zfs_media}/home_assistant";
-59
View File
@@ -1,59 +0,0 @@
{ inputs, pkgs, ... }:
{
imports = [
../../users/gaming
../../users/richie
../../common/global
../../common/optional/desktop.nix
../../common/optional/steam.nix
../../common/optional/systemd-boot.nix
../../common/optional/update.nix
./hardware.nix
inputs.nixos-hardware.nixosModules.framework-11th-gen-intel
];
environment.systemPackages = with pkgs; [
plex-media-player
];
networking = {
hostName = "muninn";
hostId = "a43179c5";
firewall.enable = true;
networkmanager.enable = true;
};
hardware = {
pulseaudio.enable = false;
bluetooth = {
enable = true;
powerOnBoot = true;
};
firmware = [ pkgs.sof-firmware ];
};
security.rtkit.enable = true;
services = {
displayManager = {
enable = true;
autoLogin = {
user = "gaming";
enable = true;
};
defaultSession = "steam";
# defaultSession = "plasma";
};
openssh.ports = [ 295 ];
snapshot_manager.enable = true;
zfs = {
trim.enable = true;
autoScrub.enable = true;
};
};
system.stateVersion = "24.05";
}
-63
View File
@@ -1,63 +0,0 @@
{ config, lib, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = {
initrd = {
availableKernelModules = [
"nvme"
"xhci_pci"
"thunderbolt"
"usb_storage"
"sd_mod"
];
kernelModules = [ ];
luks.devices."luks-root-pool-nvme-INTEL_SSDPEKKW256G7_BTPY63820XBH256D-part2" = {
device = "/dev/disk/by-id/nvme-INTEL_SSDPEKKW256G7_BTPY63820XBH256D-part2";
bypassWorkqueues = true;
allowDiscards = true;
keyFileSize = 4096;
keyFile = "/dev/disk/by-id/usb-SanDisk_Ultra_T_C_4C530001020919102244-0:0";
};
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems = {
"/" = lib.mkDefault {
device = "root_pool/root";
fsType = "zfs";
};
"/home" = {
device = "root_pool/home";
fsType = "zfs";
};
"/nix" = {
device = "root_pool/nix";
fsType = "zfs";
};
"/var" = {
device = "root_pool/var";
fsType = "zfs";
};
"/boot" = {
device = "/dev/disk/by-uuid/12CE-A600";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
};
swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
-18
View File
@@ -22,26 +22,8 @@
networkmanager.enable = true;
};
hardware = {
pulseaudio.enable = false;
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
security.rtkit.enable = true;
services = {
openssh.ports = [ 922 ];
snapshot_manager.enable = true;
zfs = {
trim.enable = true;
autoScrub.enable = true;
};
};
system.stateVersion = "24.05";
+6 -1
View File
@@ -1,4 +1,9 @@
{ config, lib, modulesPath, ... }:
{
config,
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
+9 -3
View File
@@ -1,10 +1,17 @@
{
services.syncthing.settings.folders = {
"dotfiles" = {
path = "/home/richie/dotfiles";
devices = [
"jeeves"
"bob"
];
fsWatcherEnabled = true;
};
"notes" = {
id = "l62ul-lpweo"; # cspell:disable-line
path = "/home/richie/notes";
devices = [
"bob"
"jeeves"
];
fsWatcherEnabled = true;
@@ -34,7 +41,6 @@
id = "vyma6-lqqrz"; # cspell:disable-line
path = "/home/richie/projects";
devices = [
"bob"
"jeeves"
];
fsWatcherEnabled = true;
@@ -50,7 +56,7 @@
"vault" = {
path = "/home/richie/vault";
devices = [
"bob"
"jeeves"
];
fsWatcherEnabled = true;
};
-683
View File
@@ -1,683 +0,0 @@
"""Install NixOS on a ZFS pool."""
from __future__ import annotations
import curses
import logging
import sys
from collections import defaultdict
from os import getenv
from pathlib import Path
from random import getrandbits
from subprocess import PIPE, Popen, run
from time import sleep
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from collections.abc import Sequence
def configure_logger(level: str = "INFO") -> None:
"""Configure the logger.
Args:
level (str, optional): The logging level. Defaults to "INFO".
"""
logging.basicConfig(
level=level,
datefmt="%Y-%m-%dT%H:%M:%S%z",
format="%(asctime)s %(levelname)s %(filename)s:%(lineno)d - %(message)s",
handlers=[logging.StreamHandler(sys.stdout)],
)
def bash_wrapper(command: str) -> str:
"""Execute a bash command and capture the output.
Args:
command (str): The bash command to be executed.
Returns:
Tuple[str, int]: A tuple containing the output of the command (stdout) as a string,
the error output (stderr) as a string (optional), and the return code as an integer.
"""
logging.debug(f"running {command=}")
# This is a acceptable risk
process = Popen(command.split(), stdout=PIPE, stderr=PIPE) # noqa: S603
output, _ = process.communicate()
if process.returncode != 0:
error = f"Failed to run command {command=} return code {process.returncode=}"
raise RuntimeError(error)
return output.decode()
def partition_disk(disk: str, swap_size: int, reserve: int = 0) -> None:
"""Partition a disk.
Args:
disk (str): The disk to partition.
swap_size (int): The size of the swap partition in GB.
minimum value is 1.
reserve (int, optional): The size of the reserve partition in GB. Defaults to 0.
minimum value is 0.
"""
logging.info(f"partitioning {disk=}")
swap_size = max(swap_size, 1)
reserve = max(reserve, 0)
bash_wrapper(f"blkdiscard -f {disk}")
if reserve > 0:
msg = f"Creating swap partition on {disk=} with size {swap_size=}GiB and reserve {reserve=}GiB"
logging.info(msg)
swap_start = swap_size + reserve
swap_partition = f"mkpart swap -{swap_start}GiB -{reserve}GiB "
else:
logging.info(f"Creating swap partition on {disk=} with size {swap_size=}GiB")
swap_start = swap_size
swap_partition = f"mkpart swap -{swap_start}GiB 100% "
logging.debug(f"{swap_partition=}")
create_partitions = (
f"parted --script --align=optimal {disk} -- "
"mklabel gpt "
"mkpart EFI 1MiB 4GiB "
f"mkpart root_pool 4GiB -{swap_start}GiB "
f"{swap_partition}"
"set 1 esp on"
)
bash_wrapper(create_partitions)
logging.info(f"{disk=} successfully partitioned")
def create_zfs_pool(pool_disks: Sequence[str], mnt_dir: str) -> None:
"""Create a ZFS pool.
Args:
disks (Sequence[str]): A tuple of disks to use for the pool.
mnt_dir (str): The mount directory.
"""
if len(pool_disks) <= 0:
error = "disks must be a tuple of at least length 1"
raise ValueError(error)
zpool_create = (
"zpool create "
"-o ashift=12 "
"-o autotrim=on "
f"-R {mnt_dir} "
"-O acltype=posixacl "
"-O canmount=off "
"-O dnodesize=auto "
"-O normalization=formD "
"-O relatime=on "
"-O xattr=sa "
"-O mountpoint=legacy "
"-O compression=zstd "
"-O atime=off "
"root_pool "
)
if len(pool_disks) == 1:
zpool_create += pool_disks[0]
else:
zpool_create += "mirror "
zpool_create += " ".join(pool_disks)
bash_wrapper(zpool_create)
zpools = bash_wrapper("zpool list -o name")
if "root_pool" not in zpools.splitlines():
logging.critical("Failed to create root_pool")
sys.exit(1)
def create_zfs_datasets() -> None:
"""Create ZFS datasets."""
bash_wrapper("zfs create -o canmount=noauto root_pool/root")
bash_wrapper("zfs create root_pool/home")
bash_wrapper("zfs create root_pool/var")
bash_wrapper("zfs create -o compression=zstd-9 root_pool/nix")
datasets = bash_wrapper("zfs list -o name")
expected_datasets = {
"root_pool/root",
"root_pool/home",
"root_pool/var",
"root_pool/nix",
}
missing_datasets = expected_datasets.difference(datasets.splitlines())
if missing_datasets:
logging.critical(f"Failed to create pools {missing_datasets}")
sys.exit(1)
def get_cpu_manufacturer() -> str:
"""Get the CPU manufacturer."""
output = bash_wrapper("cat /proc/cpuinfo")
id_vendor = {"AuthenticAMD": "amd", "GenuineIntel": "intel"}
for line in output.splitlines():
if "vendor_id" in line:
return id_vendor[line.split(": ")[1].strip()]
def get_boot_drive_id(disk: str) -> str:
"""Get the boot drive ID."""
output = bash_wrapper(f"lsblk -o UUID {disk}-part1")
return output.splitlines()[1]
def create_nix_hardware_file(mnt_dir: str, disks: Sequence[str], encrypt: bool) -> None:
"""Create a NixOS hardware file."""
cpu_manufacturer = get_cpu_manufacturer()
devices = ""
if encrypt:
disk = disks[0]
devices = (
f' luks.devices."luks-root-pool-{disk.split("/")[-1]}-part2"'
"= {\n"
f' device = "{disk}-part2";\n'
" bypassWorkqueues = true;\n"
" allowDiscards = true;\n"
" };\n"
)
host_id = format(getrandbits(32), "08x")
nix_hardware = (
"{ config, lib, modulesPath, ... }:\n"
"{\n"
' imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];\n\n'
" boot = {\n"
" initrd = {\n"
' availableKernelModules = [ \n "ahci"\n "ehci_pci"\n "nvme"\n "sd_mod"\n "usb_storage"\n "usbhid"\n "xhci_pci"\n ];\n'
" kernelModules = [ ];\n"
f" {devices}"
" };\n"
f' kernelModules = [ "kvm-{cpu_manufacturer}" ];\n'
" extraModulePackages = [ ];\n"
" };\n\n"
" fileSystems = {\n"
' "/" = lib.mkDefault {\n device = "root_pool/root";\n fsType = "zfs";\n };\n\n'
' "/home" = {\n device = "root_pool/home";\n fsType = "zfs";\n };\n\n'
' "/var" = {\n device = "root_pool/var";\n fsType = "zfs";\n };\n\n'
' "/nix" = {\n device = "root_pool/nix";\n fsType = "zfs";\n };\n\n'
' "/boot" = {\n'
f' device = "/dev/disk/by-uuid/{get_boot_drive_id(disks[0])}";\n'
' fsType = "vfat";\n options = [\n "fmask=0077"\n "dmask=0077"\n ];\n };\n };\n\n'
" swapDevices = [ ];\n\n"
" networking.useDHCP = lib.mkDefault true;\n\n"
' nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";\n'
f" hardware.cpu.{cpu_manufacturer}.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;\n"
f' networking.hostId = "{host_id}";\n'
"}\n"
)
Path(f"{mnt_dir}/etc/nixos/hardware-configuration.nix").write_text(nix_hardware)
def install_nixos(mnt_dir: str, disks: Sequence[str], encrypt: bool) -> None:
"""Install NixOS."""
bash_wrapper(f"mount -o X-mount.mkdir -t zfs root_pool/root {mnt_dir}")
bash_wrapper(f"mount -o X-mount.mkdir -t zfs root_pool/home {mnt_dir}/home")
bash_wrapper(f"mount -o X-mount.mkdir -t zfs root_pool/var {mnt_dir}/var")
bash_wrapper(f"mount -o X-mount.mkdir -t zfs root_pool/nix {mnt_dir}/nix")
for disk in disks:
bash_wrapper(f"mkfs.vfat -n EFI {disk}-part1")
# set up mirroring afterwards if more than one disk
boot_partition = f"mount -t vfat -o fmask=0077,dmask=0077,iocharset=iso8859-1,X-mount.mkdir {disks[0]}-part1 {mnt_dir}/boot"
bash_wrapper(boot_partition)
bash_wrapper(f"nixos-generate-config --root {mnt_dir}")
create_nix_hardware_file(mnt_dir, disks, encrypt)
run(("nixos-install", "--root", mnt_dir), check=True) # noqa: S603
def installer(
disks: set[str],
swap_size: int,
reserve: int,
encrypt_key: str | None,
) -> None:
"""Main."""
logging.info("Starting installation")
for disk in disks:
partition_disk(disk, swap_size, reserve)
if encrypt_key:
sleep(1)
for command in (
f'printf "{encrypt_key}" | cryptsetup luksFormat --type luks2 {disk}-part2 -',
f'printf "{encrypt_key}" | cryptsetup luksOpen {disk}-part2 luks-root-pool-{disk.split("/")[-1]}-part2 -',
):
run(command, shell=True, check=True)
mnt_dir = "/tmp/nix_install" # noqa: S108
Path(mnt_dir).mkdir(parents=True, exist_ok=True)
if encrypt_key:
pool_disks = [
f'/dev/mapper/luks-root-pool-{disk.split("/")[-1]}-part2' for disk in disks
]
else:
pool_disks = [f"{disk}-part2" for disk in disks]
create_zfs_pool(pool_disks, mnt_dir)
create_zfs_datasets()
install_nixos(mnt_dir, disks, encrypt_key)
logging.info("Installation complete")
class Cursor:
def __init__(self):
self.x_position = 0
self.y_position = 0
self.height = 0
self.width = 0
def set_height(self, height: int):
self.height = height
def set_width(self, width: int):
self.width = width
def x_bounce_check(self, cursor: int) -> int:
cursor = max(0, cursor)
return min(self.width - 1, cursor)
def y_bounce_check(self, cursor: int) -> int:
cursor = max(0, cursor)
return min(self.height - 1, cursor)
def set_x(self, x: int):
self.x_position = self.x_bounce_check(x)
def set_y(self, y: int):
self.y_position = self.y_bounce_check(y)
def get_x(self) -> int:
return self.x_position
def get_y(self) -> int:
return self.y_position
def move_up(self):
self.set_y(self.y_position - 1)
def move_down(self):
self.set_y(self.y_position + 1)
def move_left(self):
self.set_x(self.x_position - 1)
def move_right(self):
self.set_x(self.x_position + 1)
def navigation(self, key: int) -> None:
action = {
curses.KEY_DOWN: self.move_down,
curses.KEY_UP: self.move_up,
curses.KEY_RIGHT: self.move_right,
curses.KEY_LEFT: self.move_left,
}
action.get(key, lambda: None)()
class State:
"""State class to store the state of the program."""
def __init__(self):
self.key = 0
self.cursor = Cursor()
self.swap_size = 0
self.show_swap_input = False
self.reserve_size = 0
self.show_reserve_input = False
self.selected_device_ids = set()
def get_selected_devices(self) -> tuple[str]:
"""Get selected devices."""
return tuple(self.selected_device_ids)
def get_device(raw_device: str) -> dict[str, str]:
raw_device_components = raw_device.split(" ")
return {
thing.split("=")[0].lower(): thing.split("=")[1].strip('"')
for thing in raw_device_components
}
def get_devices() -> list[dict[str, str]]:
"""Get a list of devices."""
# --bytes
raw_devices = bash_wrapper("lsblk --paths --pairs").splitlines()
return [get_device(raw_device) for raw_device in raw_devices]
def get_device_id_mapping() -> dict[str, set[str]]:
"""Get a list of device ids.
Returns:
list[str]: the list of device ids
"""
device_ids = bash_wrapper("find /dev/disk/by-id -type l").splitlines()
device_id_mapping: dict[str, set[str]] = defaultdict(set)
for device_id in device_ids:
device = bash_wrapper(f"readlink -f {device_id}").strip()
device_id_mapping[device].add(device_id)
return device_id_mapping
def calculate_device_menu_padding(
devices: list[dict[str, str]], column: str, padding: int = 0
) -> int:
return max(len(device[column]) for device in devices) + padding
def draw_device_ids(
state: State,
row_number: int,
menu_start_x: int,
std_screen: curses.window,
menu_width: list[int],
device_ids: set[str],
) -> tuple[State, int]:
for device_id in sorted(device_ids):
row_number = row_number + 1
if row_number == state.cursor.get_y() and state.cursor.get_x() in menu_width:
std_screen.attron(curses.A_BOLD)
if state.key == ord(" "):
if device_id not in state.selected_device_ids:
state.selected_device_ids.add(device_id)
else:
state.selected_device_ids.remove(device_id)
if device_id in state.selected_device_ids:
std_screen.attron(curses.color_pair(7))
std_screen.addstr(row_number, menu_start_x, f" {device_id}")
std_screen.attroff(curses.color_pair(7))
std_screen.attroff(curses.A_BOLD)
return state, row_number
def draw_device_menu(
std_screen: curses.window,
devices: list[dict[str, str]],
device_id_mapping: dict[str, set[str]],
state: State,
menu_start_y: int = 0,
menu_start_x: int = 0,
) -> State:
"""draw the device menu and handle user input
Args:
std_screen (curses.window): the curses window to draw on
devices (list[dict[str, str]]): the list of devices to draw
device_id_mapping (dict[str, set[str]]): the list of device ids to draw
state (State): the state object to update
menu_start_y (int, optional): the y position to start drawing the menu. Defaults to 0.
menu_start_x (int, optional): the x position to start drawing the menu. Defaults to 0.
Returns:
State: the updated state object
"""
padding = 2
name_padding = calculate_device_menu_padding(devices, "name", padding)
size_padding = calculate_device_menu_padding(devices, "size", padding)
type_padding = calculate_device_menu_padding(devices, "type", padding)
mountpoints_padding = calculate_device_menu_padding(devices, "mountpoints", padding)
device_header = f"{"Name":{name_padding}}{"Size":{size_padding}}{"Type":{type_padding}}{"Mountpoints":{mountpoints_padding}}"
menu_width = range(menu_start_x, len(device_header) + menu_start_x)
std_screen.addstr(menu_start_y, menu_start_x, device_header, curses.color_pair(5))
devises_list_start = menu_start_y + 1
row_number = devises_list_start
for device in devices:
row_number = row_number + 1
device_name = device["name"]
device_row = (
f"{device_name:{name_padding}}"
f"{device['size']:{size_padding}}"
f"{device['type']:{type_padding}}"
f"{device['mountpoints']:{mountpoints_padding}}"
)
std_screen.addstr(row_number, menu_start_x, device_row)
state, row_number = draw_device_ids(
state=state,
row_number=row_number,
menu_start_x=menu_start_x,
std_screen=std_screen,
menu_width=menu_width,
device_ids=device_id_mapping[device_name],
)
return state, row_number
def debug_menu(std_screen: curses.window, key: int) -> None:
height, width = std_screen.getmaxyx()
width_height = "Width: {}, Height: {}".format(width, height)
std_screen.addstr(height - 4, 0, width_height, curses.color_pair(5))
key_pressed = f"Last key pressed: {key}"[: width - 1]
if key == 0:
key_pressed = "No key press detected..."[: width - 1]
std_screen.addstr(height - 3, 0, key_pressed)
for i in range(0, 8):
std_screen.addstr(height - 2, i * 3, f"{i}██", curses.color_pair(i))
def status_bar(
std_screen: curses.window,
cursor: Cursor,
width: int,
height: int,
) -> None:
std_screen.attron(curses.A_REVERSE)
std_screen.attron(curses.color_pair(3))
status_bar = (
f"Press 'q' to exit | STATUS BAR | Pos: {cursor.get_x()}, {cursor.get_y()}"
)
std_screen.addstr(height - 1, 0, status_bar)
std_screen.addstr(height - 1, len(status_bar), " " * (width - len(status_bar) - 1))
std_screen.attroff(curses.color_pair(3))
std_screen.attroff(curses.A_REVERSE)
def set_color() -> None:
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
def get_text_input(std_screen: curses.window, prompt: str, y: int, x: int) -> str:
curses.echo()
std_screen.addstr(y, x, prompt)
input_str = ""
while True:
key = std_screen.getch()
if key == ord("\n"):
break
elif key == 27: # ESC key
input_str = ""
break
elif key in (curses.KEY_BACKSPACE, ord("\b"), 127):
input_str = input_str[:-1]
std_screen.addstr(y, x + len(prompt), input_str + " ")
else:
input_str += chr(key)
std_screen.refresh()
curses.noecho()
return input_str
def swap_size_input(
std_screen: curses.window,
state: State,
swap_offset: int,
) -> State:
swap_size_text = "Swap size (GB): "
std_screen.addstr(swap_offset, 0, f"{swap_size_text}{state.swap_size}")
if state.key == ord("\n") and state.cursor.get_y() == swap_offset:
state.show_swap_input = True
if state.show_swap_input:
swap_size_str = get_text_input(std_screen, swap_size_text, swap_offset, 0)
try:
state.swap_size = int(swap_size_str)
state.show_swap_input = False
except ValueError:
std_screen.addstr(
swap_offset, 0, "Invalid input. Press any key to continue."
)
std_screen.getch()
state.show_swap_input = False
return state
def reserve_size_input(
std_screen: curses.window,
state: State,
reserve_offset: int,
) -> State:
reserve_size_text = "reserve size (GB): "
std_screen.addstr(reserve_offset, 0, f"{reserve_size_text}{state.reserve_size}")
if state.key == ord("\n") and state.cursor.get_y() == reserve_offset:
state.show_reserve_input = True
if state.show_reserve_input:
reserve_size_str = get_text_input(
std_screen, reserve_size_text, reserve_offset, 0
)
try:
state.reserve_size = int(reserve_size_str)
state.show_reserve_input = False
except ValueError:
std_screen.addstr(
reserve_offset, 0, "Invalid input. Press any key to continue."
)
std_screen.getch()
state.show_reserve_input = False
return state
def draw_menu(std_screen: curses.window) -> State:
"""draw the menu and handle user input
Args:
std_screen (curses.window): the curses window to draw on
Returns:
State: the state object
"""
# Clear and refresh the screen for a blank canvas
std_screen.clear()
std_screen.refresh()
set_color()
state = State()
devices = get_devices()
device_id_mapping = get_device_id_mapping()
# Loop where k is the last character pressed
while state.key != ord("q"):
std_screen.clear()
height, width = std_screen.getmaxyx()
state.cursor.set_height(height)
state.cursor.set_width(width)
state.cursor.navigation(state.key)
state, device_menu_size = draw_device_menu(
std_screen=std_screen,
state=state,
devices=devices,
device_id_mapping=device_id_mapping,
)
swap_offset = device_menu_size + 2
swap_size_input(
std_screen=std_screen,
state=state,
swap_offset=swap_offset,
)
reserve_size_input(
std_screen=std_screen,
state=state,
reserve_offset=swap_offset + 1,
)
status_bar(std_screen, state.cursor, width, height)
debug_menu(std_screen, state.key)
std_screen.move(state.cursor.get_y(), state.cursor.get_x())
std_screen.refresh()
state.key = std_screen.getch()
return state
def main() -> None:
configure_logger("DEBUG")
state = curses.wrapper(draw_menu)
encrypt_key = getenv("ENCRYPT_KEY")
logging.info("installing_nixos")
logging.info(f"disks: {state.selected_device_ids}")
logging.info(f"swap_size: {state.swap_size}")
logging.info(f"reserve: {state.reserve_size}")
logging.info(f"encrypted: {bool(encrypt_key)}")
sleep(3)
installer(
disks=state.get_selected_devices(),
swap_size=state.swap_size,
reserve=state.reserve_size,
encrypt_key=encrypt_key,
)
if __name__ == "__main__":
main()
+14
View File
@@ -0,0 +1,14 @@
# One CLI to format the code tree - https://github.com/numtide/treefmt
[global]
# Glob patterns of files to exclude
excludes = [".git/"]
[formatter.nixfmt]
# Formatter to run
command = "nixfmt"
# Command-line arguments for the command
#options = []
# Glob pattern of files to include
includes = ["*.nix"]
+1 -2
View File
@@ -16,8 +16,7 @@
shell = pkgs.zsh;
group = "gaming";
extraGroups =
[
extraGroups = [
"audio"
"video"
"users"
+2 -3
View File
@@ -18,8 +18,6 @@
order = [ "Google" ];
};
settings = {
# Makes Firefox use the PlayStation 5 user agent
"general.useragent.override" = "Mozilla/5.0 (PlayStation; PlayStation 5/10.01) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15,gzip(gfe),gzip(gfe)";
# SECTION: FASTFOX
# GENERAL
@@ -139,7 +137,8 @@
"permissions.default.desktop-notification" = 0; # allow websites to ask
# PREF: allow websites to ask you for your location
"permissions.default.geo" = 0;
"geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
"geo.provider.network.url" =
"https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
"permissions.manager.defaultsUrl" = "";
"webchannel.allowObject.urlWhitelist" = "";
-3
View File
@@ -13,8 +13,5 @@
username = "gaming";
homeDirectory = "/home/${config.home.username}";
stateVersion = "24.05";
sessionVariables = {
FLAKE = "$HOME/Projects/dotfiles";
};
};
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
wget
chromium
];
}
+7 -6
View File
@@ -2,16 +2,19 @@
pkgs,
config,
...
}: let
}:
let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
in
{
sops.secrets.richie_password = {
sopsFile = ../secrets.yaml;
neededForUsers = true;
};
users.users.richie = {
users = {
users.richie = {
isNormalUser = true;
hashedPasswordFile = "${config.sops.secrets.richie_password.path}";
@@ -19,7 +22,6 @@ in {
shell = pkgs.zsh;
group = "richie";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIPtuYhiJHRTYhNaDmTcJOqJASk7D8mIn6u3F1IN5AFJ bob" # cspell:disable-line
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJYZFsc9CSH03ZUP7y81AHwSyjLwFmcshVFCyxDcYhBT rhapsody-in-green" # cspell:disable-line
];
extraGroups =
@@ -43,8 +45,7 @@ in {
uid = 1000;
};
users.groups.richie = {
gid = 1000;
groups.richie.gid = 1000;
};
home-manager.users.richie = import ./systems/${config.networking.hostName}.nix;
+5
View File
@@ -3,5 +3,10 @@
enable = true;
userEmail = "Richie@tmmworkshop.com";
userName = "Richie Cahill";
extraConfig = {
pull.rebase = true;
color.ui = true;
};
lfs.enable = true;
};
}
+2 -5
View File
@@ -18,17 +18,14 @@
];
};
shellAliases = {
"sgc" = "sudo git -C /root/dotfiles";
## Utilities
"lrt" = "eza --icons -lsnew";
"ls" = "eza";
"ll" = "eza --long --group";
"la" = "eza --all";
"rspace" = "'for f in *\ *; do mv \"$f\" \"\${f// /_}\"; done'";
"rebuild" = "sudo nixos-rebuild switch --flake /home/richie/projects/dotfiles#$HOST";
"nix-test" = "nixos-rebuild test --flake /home/richie/projects/dotfiles";
"rebuild" = "sudo nixos-rebuild switch --flake /home/richie/dotfiles#$HOST";
"build_iso" = "nix build .#nixosConfigurations.installer.config.system.build.isoImage";
};
};
}
+1 -1
View File
@@ -16,7 +16,7 @@
homeDirectory = "/home/${config.home.username}";
stateVersion = "24.05";
sessionVariables = {
FLAKE = "$HOME/Projects/dotfiles";
FLAKE = "$HOME/dotfiles";
};
};
}
+1
View File
@@ -8,6 +8,7 @@
home.packages = with pkgs; [
candy-icons
chromium
discord-canary
gimp
gparted
+7 -2
View File
@@ -17,7 +17,11 @@
search = {
force = true;
default = "kagi";
order = [ "kagi" "DuckDuckGo" "Google" ];
order = [
"kagi"
"DuckDuckGo"
"Google"
];
};
settings = {
# SECTION: FASTFOX
@@ -138,7 +142,8 @@
"permissions.default.desktop-notification" = 0; # allow websites to ask
# PREF: allow websites to ask you for your location
"permissions.default.geo" = 0;
"geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
"geo.provider.network.url" =
"https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
"permissions.manager.defaultsUrl" = "";
"webchannel.allowObject.urlWhitelist" = "";
@@ -47,6 +47,21 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@n" ];
};
"Nix Packages pr-tracker" = {
urls = [
{
template = "https://nixpk.gs/pr-tracker.html?";
params = [
{
name = "pr";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nprt" ];
};
"kagi" = {
urls = [
{
+2 -1
View File
@@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
programs.kitty = {
enable = true;
font.name = "IntoneMono Nerd Font";
+4 -2
View File
@@ -4,8 +4,10 @@ let
in
{
# mutable symlinks to key binds and settings
xdg.configFile."Code/User/settings.json".source = config.lib.file.mkOutOfStoreSymlink "${vscode_dir}/settings.json";
xdg.configFile."Code/User/keybindings.json".source = config.lib.file.mkOutOfStoreSymlink "${vscode_dir}/keybindings.json";
xdg.configFile."Code/User/settings.json".source =
config.lib.file.mkOutOfStoreSymlink "${vscode_dir}/settings.json";
xdg.configFile."Code/User/keybindings.json".source =
config.lib.file.mkOutOfStoreSymlink "${vscode_dir}/keybindings.json";
home.packages = with pkgs; [ nil ];
@@ -30,6 +30,20 @@
"announcement": "off"
},
// database settings
"sqltools.connections": [
{
"previewLimit": 50,
"server": "192.168.90.40",
"port": 5432,
"askForPassword": true,
"driver": "PostgreSQL",
"name": "main",
"database": "postgres",
"username": "richie"
}
],
// formatters
"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+2 -1
View File
@@ -50,7 +50,8 @@
nix-output-monitor
nix-prefetch
nix-tree
nixpkgs-fmt
nixfmt-rfc-style
treefmt
inputs.system_tools.packages.x86_64-linux.default
];
}
-13
View File
@@ -16,13 +16,6 @@
identityFile = "~/.ssh/id_ed25519";
port = 2222;
};
jeevesjr = {
hostname = "192.168.90.35";
user = "richie";
identityFile = "~/.ssh/id_ed25519";
port = 352;
dynamicForwards = [ { port = 9050; } ];
};
bob = {
hostname = "192.168.90.25";
user = "richie";
@@ -36,12 +29,6 @@
identityFile = "~/.ssh/id_ed25519";
port = 922;
};
muninn = {
hostname = "192.168.98.52";
user = "richie";
identityFile = "~/.ssh/id_ed25519";
port = 295;
};
};
};
}
-6
View File
@@ -1,6 +0,0 @@
{
imports = [
../home/global.nix
../home/gui
];
}