diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d1ff78e..0000000 --- a/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Rust/Carge -/target - -# Nix -result - -# Main nix files -/data diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6bf9262..776bc61 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,81 +1,12 @@ +# You can override the included template(s) by including variable overrides +# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings +# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings +# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings +# Note that environment variables can be set in several places +# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence stages: - - prepare - - test - - build - - release - -prepare-job: - stage: prepare - image: rust - rules: - - if: $CI_COMMIT_TAG - when: never # Do not run this job when a tag is created manually - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - script: - - echo "======== PREPARE JOB ========" - - echo "PKG_VERSION=$(awk -F ' = ' '$1 ~ /version/ { gsub(/["]/, "", $2); printf("%s",$2) }' Cargo.toml)" >> variables.env - - echo "PKG_REGISTRY_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic" >> variables.env - - echo $PKG_VERSION - artifacts: - reports: - dotenv: variables.env -test-job: +- test +sast: stage: test - image: rust:latest - script: - - echo "======== TESTS JOB ========" - - apt update -m - - apt install -y libfdisk-dev libclang-19-dev - - cargo test --verbose - -build-job: - stage: build - image: rust:latest - script: - - echo "======== BUILD JOB ========" - - apt update -m - - apt install -y libfdisk-dev libclang-19-dev - - cargo build --release - - mkdir bin - - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer bin/nyxi-installer-v${PKG_VERSION} - artifacts: - paths: - - bin/ - -release-job: - stage: release - image: registry.gitlab.com/gitlab-org/release-cli:latest - needs: - - job: prepare-job - artifacts: true - - job: build-job - script: - - echo "======== RELEASE JOB ========" - rules: - - if: $CI_COMMIT_TAG - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - release: - tag_name: "v$PKG_VERSION" - description: "NixOS installer in Rust : v$PKG_VERSION" - ref: "$CI_COMMIT_SHA" # The tag is created from the pipeline SHA. - assets: - links: - - name: "v$PKG_VERSION" - url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer" - -upload-job: - stage: release - image: curlimages/curl:latest - needs: - - job: prepare-job - artifacts: true - - job: build-job - artifacts: true - rules: - - if: $CI_COMMIT_TAG - when: never # Do not run this job when a tag is created manually - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - script: - - echo "======== UPLOAD JOB ========" - - ls -la bin/ - - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer-v${PKG_VERSION} ${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer' +include: +- template: Security/SAST.gitlab-ci.yml diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 5a5e4e6..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,758 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bindgen" -version = "0.66.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.100", - "which", -] - -[[package]] -name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" - -[[package]] -name = "cc" -version = "1.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" -dependencies = [ - "shlex", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "curl" -version = "0.4.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2", - "windows-sys 0.52.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.80+curl-8.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f7df2eac63200c3ab25bde3b2268ef2ee56af3d238e76d61f01c3c49bff734" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.52.0", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "embed-doc-image" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af36f591236d9d822425cb6896595658fa558fcebf5ee8accac1d4b92c47166e" -dependencies = [ - "base64", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "enum-iterator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "indexmap" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "io-kit-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de" -dependencies = [ - "core-foundation-sys", - "mach2", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "libc" -version = "0.2.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" - -[[package]] -name = "libloading" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" -dependencies = [ - "cfg-if", - "windows-targets", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "log" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "nyxi-installer" -version = "2.0.0" -dependencies = [ - "curl", - "nix", - "rsfdisk", - "sys_metrics", -] - -[[package]] -name = "once_cell" -version = "1.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "prettyplease" -version = "0.2.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" -dependencies = [ - "proc-macro2", - "syn 2.0.100", -] - -[[package]] -name = "proc-macro-crate" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rsfdisk" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b3cacc1af2ca434035b8c885b1ef4d64a663581df95134653feba07fccae0c" -dependencies = [ - "embed-doc-image", - "enum-iterator", - "libc", - "log", - "num_enum", - "once_cell", - "pkg-config", - "rsfdisk-sys", - "thiserror", - "typed-builder", -] - -[[package]] -name = "rsfdisk-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39b186475d9df76290bba3de5196eeed64b95e77861095ea8b244f962f47575" -dependencies = [ - "bindgen", - "cc", - "pkg-config", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "socket2" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sys_metrics" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b266b80f59f86e2e1e0a4938e316e32c3730d94a749f236305152279f77484" -dependencies = [ - "core-foundation-sys", - "glob", - "io-kit-sys", - "lazy_static", - "libc", - "mach", - "serde", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.22.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - -[[package]] -name = "typed-builder" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" -dependencies = [ - "typed-builder-macro", -] - -[[package]] -name = "typed-builder-macro" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" -dependencies = [ - "memchr", -] diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 2e8fa81..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "nyxi-installer" -version = "2.0.2" -edition = "2021" - -[dependencies] -curl = "0.4.47" -nix = { version = "0.29.0", features = ["mount"] } -rsfdisk = "0.1.0" -sys_metrics = "0.2.7" diff --git a/LICENSE b/LICENSE deleted file mode 100644 index a8037d6..0000000 --- a/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - Nyxi Installer - Copyright (C) 2022 Aaron Honeycutt - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/README.md b/README.md index fd5496f..46d5a27 100644 --- a/README.md +++ b/README.md @@ -4,34 +4,57 @@ This installer is named after my doggo Onyxia. At the core of this installer it does the following: -- Partition the drive of your choice using the `rsfdisk` crate. -- Uses `flake.nix` to set certain modules depending on the system like nixos-hardware for the Pinebook Pro -- Installs a base of NixOS (`configuration.nix`) +- Partition the drive of your choice +- Installs a base of NixOS +- Installs Plasma +- Installs needed packages -nix files are from [this repo](https://gitlab.com/ahoneybun/nix-configs/) but that can be changed as needed. +Tested on the following drives: +- SATA +- NVMe This sets the hashedPassword to my own so you will need to update it to match your own as well as the username. I created the hash with this command: -```bash -mkpasswd -m sha-512 +``` +sudo mkpasswd -m sha-512 ``` -# Usage +## Get Started -1. Boot from a live disk of NixOS (ideally the minimal image) -2. Connect to network -3. Download from the releases page using curl +Prerequisites: -```bash -curl $PATH +- Prepare an installation medium. +- Boot the live environment. +- Connect to internet. + +## Connect to internet + +https://nixos.org/manual/nixos/stable/index.html#sec-installation-booting-networking + +## Start the installer + +``` +curl https://gitlab.com/ahoneybun/nixos-cli-installer/-/raw/main/install.sh > install.sh; sh install.sh ``` -## Older Bash installer +The following will happen: -```bash -sh <(curl -L https://gitlab.com/ahoneybun/nyxi-installer/-/raw/main/install.sh) -``` +- Clear partition table for `/dev/***`. +- Creates a GPT partition table for `/dev/***`. +- Create a +512M EFI partiton at `/dev/***1`. +- Create a encrypted LVM at `/dev/***2`. +- Create a swap partition in the LVM and sets it as the same size as the RAM for hibernation. +- Create a root partition in the LVM. +- Install systemd-boot. -# Development +## After Installation ... -![docs/development](https://gitlab.com/ahoneybun/nyxi-installer/-/blob/rust-rewrite/docs/development.md) +... + +## Roadmap + +- [ ] + +# Possible Ideas + +- [ ] diff --git a/Screenshots/.gitkeep b/Screenshots/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Screenshots/Screenshot_from_2023-01-08_00-21-43.png b/Screenshots/Screenshot_from_2023-01-08_00-21-43.png deleted file mode 100644 index 55a0570..0000000 Binary files a/Screenshots/Screenshot_from_2023-01-08_00-21-43.png and /dev/null differ diff --git a/Screenshots/nixos-pantheon.png b/Screenshots/nixos-pantheon.png deleted file mode 100644 index dfb7ae7..0000000 Binary files a/Screenshots/nixos-pantheon.png and /dev/null differ diff --git a/Screenshots/pinebook-pro_nixos.png b/Screenshots/pinebook-pro_nixos.png deleted file mode 100644 index b029355..0000000 Binary files a/Screenshots/pinebook-pro_nixos.png and /dev/null differ diff --git a/config.nix b/config.nix new file mode 100644 index 0000000..78356e1 --- /dev/null +++ b/config.nix @@ -0,0 +1,111 @@ +{ config, pkgs, ... }: + +{ + # Import other configuration modules + # (hardware-configuration.nix is autogenerated upon installation) + # paths in nix expressions are always relative the file which defines them + imports = + [ + ./hardware-configuration.nix + ]; + + boot.loader = { + systemd-boot.enable = true; + }; + + boot.initrd.luks.devices = { + crypt-root = { + device = "/dev/disk/by-label/luks"; + preLVM = true; + }; + }; + + # Allow Unfree + nixpkgs.config.allowUnfree = true; + + # Enable 32 Bit libraries for applications like Steam + hardware.opengl.driSupport32Bit = true; + + # Name your host machine + networking.hostName = "NixOS"; + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Denver"; + + # Enter keyboard layout + services.xserver.layout = "us"; + + # Enable Flatpak + xdg = { + portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-wlr + xdg-desktop-portal-kde + ]; + }; + }; + + services.flatpak.enable = true; + + # Enable fwupd + services.fwupd.enable = true; + + # Define user accounts + users.extraUsers = + { + aaronh = + { + home = "/home/aaronh"; + extraGroups = [ "wheel" "networkmanager" ]; + isNormalUser = true; + hashedPassword = "$6$aAcbLtqiqzySifls$jdKMOQjoWITHD/dWNNZVUH/qNc6aoJ7v4zYofi0U7IJSVTbmOfChS3mzaJbp57AodjdPNKPrnrip8Nlh2Qanx."; + }; + }; + + # Install some packages + environment.systemPackages = + with pkgs; + [ + firefox + fish + flatpak + git + libsForQt5.bismuth + libsForQt5.kde-gtk-config + libsForQt5.plasma-nm + libsForQt5.plasma-pa + libsForQt5.sddm + steam + thunderbird + ]; + + # Enable the OpenSSH daemon + services.openssh.enable = true; + + # Plasma + services.xserver.enable = true; + services.xserver.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + + # Enable Pipewire + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + # Enable Bluetooth + hardware.bluetooth.enable = true; + + # Enable CUPS + services.printing.enable = true; + + # System + system.autoUpgrade.enable = true; + system.autoUpgrade.allowReboot = true; + +} diff --git a/docs/development.md b/docs/development.md deleted file mode 100644 index 5808ad7..0000000 --- a/docs/development.md +++ /dev/null @@ -1,47 +0,0 @@ -# Development - -## Clone the repository - -```bash -git clone https://gitlab.com/ahoneybun/nyxi-installer.git -``` - -## Enter the repository that you just cloned - -```bash -cd nyxi-installer -``` - -## Enter nix-shell - -This is if you are already running NixOS or using the `nix` packagemanager on your system where development will take place. This will install the needed system packages, set environment variables and such for development. - -```bash -nix-shell -``` - -## Flakes - -If you have flakes enabled you can use `nix develop` instead. - -```bash -nix develop -``` - -## Ubuntu - -Install these packages for developing using `apt`. - -```bash -sudo apt install build-essential pkg-config libcurl4-openssl-dev libfdisk-dev -``` - -## Building and testing - -You can use normal `cargo` commands like: - -- `cargo test` -- `cargo build` -- `cargo run` - -**NOTE:** you will need to build the program and run it with `sudo` currently so `cargo run` is not the best for testing. diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 1d51da6..0000000 --- a/flake.lock +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "naersk": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1743800763, - "narHash": "sha256-YFKV+fxEpMgP5VsUcM6Il28lI0NlpM7+oB1XxbBAYCw=", - "owner": "nix-community", - "repo": "naersk", - "rev": "ed0232117731a4c19d3ee93aa0c382a8fe754b01", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "naersk", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "naersk": "naersk", - "nixpkgs": "nixpkgs_2" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index b73e439..0000000 --- a/flake.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - description = "Flake to build and develop Nyxi"; - - inputs = { - flake-utils.url = "github:numtide/flake-utils"; - naersk.url = "github:nix-community/naersk"; - nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - }; - - outputs = { self, flake-utils, naersk, nixpkgs }: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = (import nixpkgs) { - inherit system; - }; - - naersk' = pkgs.callPackage naersk {}; - - # Setting variables that everything uses - LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; - CLANG_PATH = "${pkgs.llvmPackages.clang}/bin/clang"; - - in rec { - # For `nix build` & `nix run`: - defaultPackage = naersk'.buildPackage { - inherit LIBCLANG_PATH CLANG_PATH; - buildInputs = with pkgs; [ pkg-config openssl ]; - nativeBuildInputs = with pkgs; [ util-linux.dev ]; - src = ./.; - }; - - # For `nix develop` (optional, can be skipped): - devShell = pkgs.mkShell { - inherit LIBCLANG_PATH CLANG_PATH; - buildInputs = with pkgs; [ pkg-config openssl ]; - nativeBuildInputs = with pkgs; [ rustc cargo util-linux.dev ]; - }; - } - ); -} diff --git a/install.sh b/install.sh index e2810a1..00bff76 100644 --- a/install.sh +++ b/install.sh @@ -1,80 +1,110 @@ -# Step 1: Choosing the drive for the installation +# Figure out how much RAM the system has an set a variable +ramTotal=$(free -h | awk '/^Mem:/{print $2}'| awk -FG {'print$1'}) -## Detect and list the drives. +# Detect and list the drives. lsblk -f -## Choice the drive to use : +# Choice the drive to use : +# 1. echo "----------" +echo "" echo "Which drive do we want to use for this installation?" -echo "For example /dev/sda or /dev/nvme0n1" +read driveName + +( +echo g # Create new GPT partition table +echo n # Create new partition (for EFI). +echo # Set default partition number. +echo # Set default first sector. +echo +512M # Set +512M as last sector. +echo n # Create new partition (for root). +echo # Set default partition number. +echo # Set default first sector. +echo n # Create new partition (for swap). +echo # Set default partition number. +echo # Set default first sector. +echo # Set default last sector (rest of the disk). +echo t # Change partition type. +echo 1 # Pick first partition. +echo 1 # Change first partition to EFI system. +echo w # write changes. +) | sudo fdisk $driveName -w always -W always + +# List the new partitions. +lsblk -f + +# Format the partitions : +echo "----------" +echo "" +echo "Which is the EFI partition?" +read efiName echo "" -read -p "Enter your drive choice: " driveName -echo "" +echo "Which is the root partition?" +read rootName -## Download Disko file -cd /tmp -curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/partitions/luks-btrfs-subvolumes.nix -o /tmp/disko-config.nix +# Create EFI partition +sudo mkfs.fat -F32 -n EFI $efiName -## Replace drive in Disko file -sudo sed -i "s#/dev/sda#$driveName#g" /tmp/disko-config.nix +# Encrypt the root partition +sudo cryptsetup luksFormat -v -s 512 -h sha512 $rootName -# Step 2: Partitioning the drive used for the installation +# Open the encrypted root partition +sudo cryptsetup luksOpen $rootName crypt-root -## Run Disko to partition the disk -sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount /tmp/disko-config.nix --yes-wipe-all-disks +sudo pvcreate /dev/mapper/crypt-root +sudo vgcreate lvm /dev/mapper/crypt-root -## Generate Nix configuration -sudo nixos-generate-config --no-filesystems --root /mnt +sudo lvcreate -L "$ramTotal"G -n swap lvm +sudo lvcreate -l '100%FREE' -n root lvm -## Copies over the disko file for running `nixos-install` -sudo mv /tmp/disko-config.nix /mnt/etc/nixos +sudo cryptsetup config $rootName --label luks -## Downloads and places the predefinded generic flake to use -curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix > flake.nix; sudo mv -f flake.nix /mnt/etc/nixos/ +sudo mkswap /dev/lvm/swap # swap partition +sudo mkfs.btrfs -L root /dev/lvm/root # /root partition -## Downloads and places the predefinded generic configuration and home files to use -curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/configuration.nix > configuration.nix; sudo mv -f configuration.nix /mnt/etc/nixos/ -curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/home.nix > home.nix; sudo mv -f home.nix /mnt/etc/nixos/ +# 0. Mount the filesystems. +sudo swapon /dev/lvm/swap +sudo mount /dev/lvm/root /mnt -# Step 3: Choosing a predefined system flake file to use +# Create Subvolumes +sudo btrfs subvolume create /mnt/@ +sudo btrfs subvolume create /mnt/@home -cat << EOF +# Unmount root +sudo umount /mnt -Which device are you installing to? - 1) Virtual Machine - 2) Lemur Pro 13 (Garrus) - 3) Pixel Slate - 4) nebula49 (Shepard) - 0) Generic -EOF +# Mount the subvolumes. +sudo mount -o noatime,commit=120,compress=zstd:10,space_cache,subvol=@ /dev/lvm/root /mnt -echo "" -read -p "Enter your device choice: " hostChoice -echo "" +sudo mkdir /mnt/home/ +sudo mount -o noatime,commit=120,compress=zstd:10,space_cache,subvol=@home /dev/lvm/root /mnt/home -if [ $hostChoice = 1 ]; then - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/vm/configuration.nix > vm.nix; sudo mv -f vm.nix /mnt/etc/nixos/ - sudo nixos-install --flake /mnt/etc/nixos#vm +# Mount the EFI partition. +sudo mkdir /mnt/boot/ +sudo mount $efiName /mnt/boot -elif [ $hostChoice = 2 ]; then - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix > garrus.nix; sudo mv -f garrus.nix /mnt/etc/nixos/ - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix > gnome.nix; sudo mv -f gnome.nix /mnt/etc/nixos/ - sudo nixos-install --flake /mnt/etc/nixos#garrus +# Generate Nix configuration +sudo nixos-generate-config --root /mnt -elif [ $hostChoice = 3 ]; then - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/pixel-slate.nix > pixel-slate.nix; sudo mv -f pixel-slate.nix /mnt/etc/nixos/ - #curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/lomiri.nix > gnome.nix; sudo mv -f gnome.nix /mnt/etc/nixos/ - sudo nixos-install --flake /mnt/etc/nixos#pixel-slate +curl https://gitlab.com/ahoneybun/nyxi-installer/-/raw/main/config.nix > configuration.nix; sudo mv -f configuration.nix /mnt/etc/nixos/ -elif [ $hostChoice = 4 ]; then - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/shepard/configuration.nix > shepard.nix; sudo mv -f shepard.nix /mnt/etc/nixos/ - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix > gnome.nix; sudo mv -f gnome.nix /mnt/etc/nixos/ - sudo nixos-install --flake /mnt/etc/nixos#shepard +# Install +sudo nixos-install -elif [ $hostChoice = 0 ]; then - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix > flake.nix; sudo mv -f flake.nix /mnt/etc/nixos/ - curl https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix > gnome.nix; sudo mv -f gnome.nix /mnt/etc/nixos/ - sudo nixos-install --flake /mnt/etc/nixos#nixos +# Start Setup section +# sudo -i +# curl https://gitlab.com/ahoneybun/nynx-installer/-/raw/main/setup.sh > /mnt/setup.sh -fi +# # Enter into installed OS +# mount -o bind /dev /mnt/dev +# mount -o bind /proc /mnt/proc +# mount -o bind /sys /mnt/sys +# chroot /mnt /nix/var/nix/profiles/system/activate +# chroot /mnt /run/current-system/sw/bin/sh setup.sh + +# Removed install script. +rm install.sh + +# Remove setup script +# rm setup.sh diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..9ca3093 --- /dev/null +++ b/setup.sh @@ -0,0 +1,12 @@ +# Set user password +echo "----------" +echo "" +echo "Which is the username?" +read userName + +sudo passwd $userName + +# Create Directories +mkdir /home/$userName/Projects + +exit diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 7f9e443..0000000 --- a/shell.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs ? import {} }: - - pkgs.mkShell { - buildInputs = with pkgs; [ - # Rust - cargo - rustc - - # Compiler - gnumake - clang - llvmPackages.libclang - llvmPackages.clang - - # System - btrfs-progs - e2fsprogs - openssl - pkg-config - util-linux - ]; - - shellHook = '' - export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" - export CLANG_PATH="${pkgs.llvmPackages.clang}/bin/clang" - export RUST_BACKTRACE=1 - echo "We're ready to make some Rust!" - ''; -} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 372549f..0000000 --- a/src/main.rs +++ /dev/null @@ -1,375 +0,0 @@ -use rsfdisk::core::partition::{Guid, Partition, PartitionKind}; -use rsfdisk::core::partition_table::PartitionTableKind; -use rsfdisk::fdisk::Fdisk; -use std::fs::File; -use std::io; -use std::io::Write; -use std::path::Path; -use std::process::{Command, Stdio}; -use sys_metrics::disks; - -use curl::easy::Easy; -use nix::mount::{mount, MsFlags}; - -fn format_drive(drive_name: &str) -> rsfdisk::Result<()> { - let mut disk = Fdisk::builder() - .assign_device(drive_name) - .enable_read_write() - .wipe_device_metadata() - .build()?; - - disk.partition_table_create(PartitionTableKind::GPT)?; - - let partition_type = PartitionKind::builder().guid(Guid::EfiSystem).build()?; - - let boot = Partition::builder() - .partition_type(partition_type) - .name("EFI") - //Assuming 512 bytes per sector, 2_097_152 sectors <=> 1 GiB. - .size_in_sectors(2_097_152) - .build()?; - - let _ = disk.partition_add(boot)?; - - let partition_type = PartitionKind::builder() - .guid(Guid::LinuxRootx86_64) - .build()?; - - let root = Partition::builder() - .partition_type(partition_type) - .name("Root") - .build()?; - - let _ = disk.partition_add(root)?; - - disk.partition_table_write_to_disk()?; - - Ok(()) -} - -fn format_partitions(drive_name: &str) { - let efi_path = format!("{}p1", drive_name); - let root_path = format!("{}p2", drive_name); - - let _efi_partition = Command::new("mkfs.fat") - .arg("-F32") - .arg("-n") - .arg("EFI") - .arg(&efi_path) - .output() - .expect("Failed to format boot partition as FAT32"); - - let _root_partition = Command::new("mkfs.ext4") - .arg(&root_path) - .output() - .expect("Failed to format root partition as ext4"); -} - -fn mount_partitions(drive_name: &str) { - let efi_path = format!("{}p1", drive_name); - let root_path = format!("{}p2", drive_name); - - let root_source = Some(Path::new(&root_path)); - let root_target = Path::new("/mnt"); - - mount( - root_source, - root_target, - Some("ext4"), - MsFlags::empty(), - None::<&[u8]>, - ) - .expect("Failed to mount root partition"); - - // Creates the boot directory in /mnt/boot - let _create_boot_directory = Command::new("mkdir") - .arg("-p") - .arg("/mnt/boot") - .output() - .expect("Failed to create boot directory"); - - //let boot_source = Some(Path::new(&efi_path)); - //let boot_target = Path::new("/mnt/boot"); - - let _mount_boot = Command::new("mount") - .args(["-t", "vfat"]) - .args(["-o", "umask=0077"]) - .arg(&efi_path) - .arg("/mnt/boot") - .output() - .expect("Failed to mount boot partition"); - - // mount( - // boot_source, - // boot_target, - // Some("vfat"), - // MsFlags::empty(), - // None::<&[u8]>, - // ) - // .expect("Failed to mount boot partition"); -} - -fn grab_flake() { - let mut easy = Easy::new(); - easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix") - .unwrap(); - - let mut file = File::create("flake.nix").unwrap(); - - { - let mut transfer = easy.transfer(); - transfer - .write_function(|data| { - file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } -} - -fn grab_config() { - let mut easy = Easy::new(); - easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/configuration.nix") - .unwrap(); - - let mut file = File::create("configuration.nix").unwrap(); - - { - let mut transfer = easy.transfer(); - transfer - .write_function(|data| { - file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } -} - -fn grab_home() { - let mut easy = Easy::new(); - easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/home.nix") - .unwrap(); - - let mut file = File::create("home.nix").unwrap(); - - { - let mut transfer = easy.transfer(); - transfer - .write_function(|data| { - file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } -} - -fn grab_gnome() { - let mut gnome_config = Easy::new(); - gnome_config - .url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix") - .unwrap(); - - let mut config_file = File::create("gnome.nix").unwrap(); - - { - let mut transfer = gnome_config.transfer(); - transfer - .write_function(|data| { - config_file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } -} - -fn main() { - println!("--------------------------------------"); - println!("| Welcome to the Nyxi Installer 2.0! |"); - println!("--------------------------------------"); - println!(""); - - println!("Availble disks for installation:"); - println!("---------------------------------"); - println!(""); - - match disks::get_physical_ioblocks() { - Ok(disk_list) => { - for disk in disk_list { - println!("Disk: {}", disk.device_name); - } - } - Err(_e) => println!("{}", _e), - } - - let mut drive_name = String::new(); - - println!(""); - println!("Use the full drive path such as /dev/nvme0n1 or /dev/sda"); - println!(""); - println!( - "Which drive do we want to use for this installation?: {}", - drive_name - ); - - io::stdin() - .read_line(&mut drive_name) - .expect("Failed to read line"); - - let drive_name = drive_name.trim(); - - // Download nix files - grab_flake(); - grab_config(); - grab_home(); - grab_gnome(); - - // Partitioning the selected drive - let _ = format_drive(drive_name); - - // Formatting the partitions - format_partitions(drive_name); - - // Mounting the partitions - mount_partitions(drive_name); - - // Creates the init nix config in /mnt/etc/nixos - let _nixos_gen_config = Command::new("nixos-generate-config") - .arg("--root") - .arg("/mnt") - .output() - .expect("Failed to execute command"); - - // Copies the nix files to /mnt/etc/nixos/ - let _nix_move = Command::new("mv") - .args(["-f", "flake.nix", "configuration.nix", "home.nix"]) - .arg("/mnt/etc/nixos") - .output() - .expect("Failed to move nix files over"); - - // Fixes a security issue with boot - let _boot_fix = Command::new("sed") - .arg("-i") - .arg( - r#"/fsType = "vfat"/ { - n - s/\(options = \[.*\)\]/\1"umask=0077 "]/ - }"#, - ) - .arg("/mnt/etc/nixos/hardware-configuration.nix") - .output() - .expect("Failed to apply boot fix"); - - // Host selection - loop { - println!(""); - println!("Host selection:"); - println!("---------------"); - println!(""); - println!("1. Lemur Pro 13 (Garrus)"); - println!("2. Virtual Machine"); - println!("3. Generic"); - println!(""); - - println!("Enter your host for installation:"); - - let mut choice = String::new(); - io::stdin().read_line(&mut choice).unwrap(); - - match choice.trim() { - "1" => { - let mut garrus_config = Easy::new(); - garrus_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix").unwrap(); - - let mut config_file = File::create("garrus.nix").unwrap(); - - { - let mut transfer = garrus_config.transfer(); - transfer - .write_function(|data| { - config_file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } - - // Copies the system nix files to /mnt/etc/nixos/ - let _garrus_nix_copy = Command::new("mv") - .args(["garrus.nix", "gnome.nix", "/mnt/etc/nixos"]) - .output() - .expect("Failed to copy nix files over"); - - let mut nixos_install = Command::new("nixos-install") - .arg("--flake") - .arg("/mnt/etc/nixos#garrus") - .arg("--no-root-passwd") - .stdout(Stdio::inherit()) - .stderr(Stdio::inherit()) - .spawn() - .unwrap(); - - let install_status = nixos_install.wait(); - println!("Exited with status {:?}", install_status); - - break; - } - "2" => { - let mut vm_config = Easy::new(); - vm_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/vm/configuration.nix").unwrap(); - - let mut config_file = File::create("vm.nix").unwrap(); - - { - let mut transfer = vm_config.transfer(); - transfer - .write_function(|data| { - config_file.write_all(data).unwrap(); - Ok(data.len()) - }) - .unwrap(); - transfer.perform().unwrap(); - } - - // Copies the system nix files to /mnt/etc/nixos/ - let _garrus_nix_copy = Command::new("mv") - .args(["vm.nix", "/mnt/etc/nixos"]) - .output() - .expect("Failed to copy nix files over"); - - let mut nixos_install = Command::new("nixos-install") - .arg("--flake") - .arg("/mnt/etc/nixos#vm") - .arg("--no-root-passwd") - .stdout(Stdio::inherit()) - .stderr(Stdio::inherit()) - .spawn() - .unwrap(); - - let install_status = nixos_install.wait(); - println!("Exited with status {:?}", install_status); - - break; - } - "3" => { - let mut nixos_install = Command::new("nixos-install") - .arg("--flake") - .arg("/mnt/etc/nixos#nixos") - .arg("--no-root-passwd") - .stdout(Stdio::inherit()) - .stderr(Stdio::inherit()) - .spawn() - .unwrap(); - - let install_status = nixos_install.wait(); - println!("Exited with status {:?}", install_status); - - break; - } - _ => println!("Invalid choice, try again."), - } - } -}