From 7cd955583989e21ea5b5501fd31d14d1dc12833a Mon Sep 17 00:00:00 2001 From: Ryze Date: Tue, 16 Jul 2024 13:52:52 +0300 Subject: [PATCH] Init repository with compileOptimized and vscode-extensions --- flake.lock | 27 ++++++++++ flake.nix | 20 ++++++++ overlay.nix | 10 ++++ packages/compileOptimized.nix | 12 +++++ packages/compileOptimized/C.nix | 24 +++++++++ packages/compileOptimized/Rust.nix | 60 ++++++++++++++++++++++ packages/vscode-extensions.nix | 27 ++++++++++ packages/vscode-extensions/extensions.toml | 38 ++++++++++++++ stackpkgs.nix | 6 +++ 9 files changed, 224 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 overlay.nix create mode 100644 packages/compileOptimized.nix create mode 100644 packages/compileOptimized/C.nix create mode 100644 packages/compileOptimized/Rust.nix create mode 100644 packages/vscode-extensions.nix create mode 100644 packages/vscode-extensions/extensions.toml create mode 100644 stackpkgs.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f1034b0 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b2d7a90 --- /dev/null +++ b/flake.nix @@ -0,0 +1,20 @@ +{ + description = "Collection of packages and overlays used by me"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + system = "x86_64-linux"; + + pkgs = import nixpkgs { + inherit system; + }; + in + { + packages.${system} = pkgs.callPackage ./stackpkgs.nix {}; + overlays.default = import ./overlay.nix; + }; +} diff --git a/overlay.nix b/overlay.nix new file mode 100644 index 0000000..7a26adb --- /dev/null +++ b/overlay.nix @@ -0,0 +1,10 @@ +final: prev: + +let + stackpkgs = final.callPackage ./stackpkgs.nix; +in +builtins.removeAttrs stackpkgs [ + "vscode-extensions" +] // { + vscode-extensions = prev.vscode-extensions // stackpkgs.vscode-extensions; +} diff --git a/packages/compileOptimized.nix b/packages/compileOptimized.nix new file mode 100644 index 0000000..28ea5b2 --- /dev/null +++ b/packages/compileOptimized.nix @@ -0,0 +1,12 @@ +{ lib, callPackage }: + +let + mkOverridablePackage = pkg: lib.makeOverridable (callPackage pkg {}) {}; +in +{ + compileOptimized = rec { + C = mkOverridablePackage ./compileOptimized/C.nix; + CNoLTO = C.override { enableLTO = false; }; + Rust = mkOverridablePackage ./compileOptimized/Rust.nix; + }; +} diff --git a/packages/compileOptimized/C.nix b/packages/compileOptimized/C.nix new file mode 100644 index 0000000..6022d9f --- /dev/null +++ b/packages/compileOptimized/C.nix @@ -0,0 +1,24 @@ +{ lib }: + +{ + optimizationLevel ? "O3", + enableLTO ? true, + enableNativeOptimizations ? true, + additionalFlags ? [] +}: + +pkg: + +assert builtins.elem optimizationLevel [ "O0" "O1" "O2" "O3" "Ofast" "Os" "Oz" "Og" ]; + +let + flags = [ "-${optimizationLevel}" ] + ++ lib.optional enableLTO "-flto" + ++ lib.optional enableNativeOptimizations "-march=native" + ++ additionalFlags; +in + +pkg.overrideAttrs (prevAttrs: { + env.NIX_CFLAGS_COMPILE = (prevAttrs.env.NIX_CFLAGS_COMPILE or "") + + lib.strings.concatStringsSep " " flags; +}) diff --git a/packages/compileOptimized/Rust.nix b/packages/compileOptimized/Rust.nix new file mode 100644 index 0000000..917fd77 --- /dev/null +++ b/packages/compileOptimized/Rust.nix @@ -0,0 +1,60 @@ +{ lib }: + +# See https://doc.rust-lang.org/cargo/reference/profiles.html +# and https://doc.rust-lang.org/rustc/codegen-options/index.html +# for list of options + +{ + opt-level ? "3", + debug ? "none", + split-debuginfo ? "off", + strip ? "symbols", + debug-assertions ? false, + overflow-checks ? false, + lto ? "fat", + panic ? "abort", + codegen-units ? 1, + enableNativeOptimizations ? true, + enableNoPIC ? false, + additionalFlags ? [] +}: + +pkg: + +assert builtins.elem opt-level [ "0" "1" "2" "3" "s" "z" ]; +assert builtins.elem debug [ "none" "line-directives-only" "line-tables-only" "limited" "full" ]; +assert builtins.elem split-debuginfo [ "off" "packed" "unpacked" ]; +assert builtins.elem strip [ "none" "debuginfo" "symbols" ]; +assert builtins.elem lto [ "off" "thin" "fat" ]; +assert builtins.elem panic [ "unwind" "abort" ]; +assert codegen-units > 0; + +let + codegenOptions = [ + "opt-level=${opt-level}" + "debuginfo=${debug}" + "split-debuginfo=${split-debuginfo}" + "strip=${strip}" + "debug-assertions=${lib.boolToString debug-assertions}" + "overflow-checks=${lib.boolToString overflow-checks}" + "lto=${lto}" + "panic=${panic}" + "codegen-units=${toString codegen-units}" + ] + ++ lib.optional (lto != "off") "embed-bitcode=true" # LLVM bitcode is required for performing LTO + ++ lib.optional enableNoPIC "relocation-model=static" + ++ lib.optional enableNativeOptimizations "target-cpu=native"; +in + +pkg.overrideAttrs (finalAttrs: prevAttrs: { + cargoBuildType = "release"; + + # Disable tests with abort panic strategy. Tests can only run with unwind strategy + # See unstable panic-abort-tests option + doCheck = prevAttrs.doCheck && panic != "abort"; + + RUSTFLAGS = (prevAttrs.RUSTFLAGS or "") + + lib.strings.concatMapStringsSep " " (flag: "-C ${flag}") codegenOptions + + " " + + lib.strings.concatStringsSep " " additionalFlags; +}) diff --git a/packages/vscode-extensions.nix b/packages/vscode-extensions.nix new file mode 100644 index 0000000..a4d63df --- /dev/null +++ b/packages/vscode-extensions.nix @@ -0,0 +1,27 @@ +{ lib, vscode-utils }: + +let + extensions = builtins.fromTOML (builtins.readFile ./vscode-extensions/extensions.toml); + marketplaceBaseURL = "https://marketplace.visualstudio.com/items?itemName="; + + buildExtension = (publisher: name: ext: + vscode-utils.buildVscodeMarketplaceExtension { + # Generate publisher and name + # Replace hash with fake one if needed + mktplcRef = ext.info + // { inherit publisher name; } + // lib.optionalAttrs (ext.info.hash == "fake") { hash = lib.fakeHash; }; + + # Generate download page + # And convert SPDX license to license from lib + meta = ext.meta // { + downloadPage = marketplaceBaseURL + "${publisher}.${name}"; + license = lib.getLicenseFromSpdxId ext.meta.license; + }; + } + ); + + # Just calls buildExtension for each extension found in publisher.extensionName attrsets + transformExtensions = extensions: lib.mapAttrs (publisher: ext: lib.mapAttrs (buildExtension publisher) ext) extensions; +in +transformExtensions extensions diff --git a/packages/vscode-extensions/extensions.toml b/packages/vscode-extensions/extensions.toml new file mode 100644 index 0000000..5334a98 --- /dev/null +++ b/packages/vscode-extensions/extensions.toml @@ -0,0 +1,38 @@ +[LeonardSSH.vscord.info] +version = "5.2.12" +hash = "sha256-WGDEizYG6UAqe1jnhvjfFouXDA9Yr5P+BjxPahAIsTE=" + +[LeonardSSH.vscord.meta] +description = "Highly customizable Discord Rich Presence extension for Visual Studio Code" +homepage = "https://github.com/LeonardSSH/vscord" +license = "MIT" + + +[Catppuccin.catppuccin-vsc-icons.info] +version = "1.13.0" +hash = "sha256-4gsblUMcN7a7UgoklBjc+2uiaSERq1vmi0exLht+Xi0=" + +[Catppuccin.catppuccin-vsc-icons.meta] +description = "Catppuccin Icons for VSCode/VSCodium" +homepage = "https://github.com/catppuccin/vscode-icons.git" +license = "MIT" + + +[keifererikson.nightfox.info] +version = "0.0.14" +hash = "sha256-EZGKJMc/N+0V+9U/k12tUbzgfCNzWhdrouXRi7QOdyY=" + +[keifererikson.nightfox.meta] +description = "A foxy theme for Visual Studio Code" +homepage = "https://github.com/keifererikson/vscode-nightfox.git" +license = "MIT" + + +[willasm.comment-highlighter.info] +version = "2.0.0" +hash = "sha256-fBe0mYq0iWerxvBYF5jFS/dZizu65Nn1iHypo69Bb50=" + +[willasm.comment-highlighter.meta] +description = "Colorful Comment Highlighter for Visual Studio Code" +homepage = "https://github.com/willasm/comment-highlighter#readme" +license = "MIT" diff --git a/stackpkgs.nix b/stackpkgs.nix new file mode 100644 index 0000000..bfec974 --- /dev/null +++ b/stackpkgs.nix @@ -0,0 +1,6 @@ +{ callPackage }: + +{ + compileOptimized = callPackage ./packages/compileOptimized.nix {}; + vscode-extensions = callPackage ./packages/vscode-extensions.nix {}; +}