From 4a2dac411897e52d06c4eda50ce799d51b43a64c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Fri, 20 Feb 2026 15:10:12 +0100 Subject: [PATCH] feat: add initial modules --- lib/autoDir.nix | 15 +++++ lib/default.nix | 11 ++++ lib/mapDir.nix | 11 ++++ lib/mkHost.nix | 54 ++++++++++++++++++ modules/nixos/default.nix | 1 + modules/nixos/sway.nix | 55 ++++++++++++++++++ modules/nixos/yubikey.nix | 23 ++++++++ packages/ahab.nix | 29 ++++++++++ packages/ca-matheo-si.nix | 23 ++++++++ packages/default.nix | 1 + packages/ggman.nix | 36 ++++++++++++ packages/git-linearize.nix | 24 ++++++++ packages/releasectl.nix | 28 +++++++++ users/gorazd/home-manager.nix | 54 ++++++++++++++++++ users/matej/home-manager.nix | 103 ++++++++++++++++++++++++++++++++++ 15 files changed, 468 insertions(+) create mode 100644 lib/autoDir.nix create mode 100644 lib/default.nix create mode 100644 lib/mapDir.nix create mode 100644 lib/mkHost.nix create mode 100644 modules/nixos/default.nix create mode 100644 modules/nixos/sway.nix create mode 100644 modules/nixos/yubikey.nix create mode 100644 packages/ahab.nix create mode 100644 packages/ca-matheo-si.nix create mode 100644 packages/default.nix create mode 100644 packages/ggman.nix create mode 100644 packages/git-linearize.nix create mode 100644 packages/releasectl.nix create mode 100644 users/gorazd/home-manager.nix create mode 100644 users/matej/home-manager.nix diff --git a/lib/autoDir.nix b/lib/autoDir.nix new file mode 100644 index 0000000..8c6e332 --- /dev/null +++ b/lib/autoDir.nix @@ -0,0 +1,15 @@ +lib: + +# takes dir as an argument and creates an attribute set by importing all .nix files in that directory +dir: +let + readDir = builtins.readDir dir; + files = lib.attrNames ( + lib.filterAttrs ( + name: type: type == "regular" && lib.hasSuffix ".nix" name && name != "default.nix" + ) readDir + ); + + packages = builtins.map (name: lib.removeSuffix ".nix" name) files; +in +lib.genAttrs packages (name: import (dir + "/${name}.nix")) diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..b797a9c --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,11 @@ +{ lib }: + +let + mkHost = import ./mkHost.nix; + autoDir = import ./autoDir.nix lib; + mapDir = import ./mapDir.nix lib; +in + +{ + inherit mkHost autoDir mapDir; +} diff --git a/lib/mapDir.nix b/lib/mapDir.nix new file mode 100644 index 0000000..3d5b932 --- /dev/null +++ b/lib/mapDir.nix @@ -0,0 +1,11 @@ +lib: + +let + autoDir = import ./autoDir.nix lib; +in + +dir: args: +let + attrs = autoDir dir; +in +builtins.mapAttrs (_: f: f args) attrs diff --git a/lib/mkHost.nix b/lib/mkHost.nix new file mode 100644 index 0000000..0d50ef3 --- /dev/null +++ b/lib/mkHost.nix @@ -0,0 +1,54 @@ +{ + nixpkgs, + overlays, + inputs, +}: + +name: +{ + system, + users ? [ ], +}: + +let + hostConfig = ../hosts/${name}/configuration.nix; + hostHWConfig = ../hosts/${name}/hardware-configuration.nix; + + userHMConfigs = nixpkgs.lib.genAttrs users ( + user: import ../users/${user}/home-manager.nix { inherit inputs; } + ); + + gib_in_bytes = 1073741824; +in + +nixpkgs.lib.nixosSystem { + inherit system; + modules = [ + + { + nix.settings = { + download-buffer-size = 1 * gib_in_bytes; + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + } + + { nixpkgs.overlays = overlays; } + { nixpkgs.config.allowUnfree = true; } + + hostConfig + hostHWConfig + + inputs.home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users = userHMConfigs; + home-manager.extraSpecialArgs = { inherit inputs; }; + } + + ]; + specialArgs = { inherit inputs; }; +} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix new file mode 100644 index 0000000..70db651 --- /dev/null +++ b/modules/nixos/default.nix @@ -0,0 +1 @@ +{ lib, my-lib }: args: (my-lib.autoDir ./.) diff --git a/modules/nixos/sway.nix b/modules/nixos/sway.nix new file mode 100644 index 0000000..930b4f8 --- /dev/null +++ b/modules/nixos/sway.nix @@ -0,0 +1,55 @@ +{ + pkgs, + lib, + config, + ... +}: +{ + + options = { + sway = { + enable = lib.mkEnableOption "enable sway module"; + cmdFlags = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = "additional command line flags to pass to sway"; + }; + }; + }; + + config = lib.mkIf config.sway.enable { + programs.sway = { + enable = true; + package = pkgs.swayfx; + wrapperFeatures.gtk = true; + extraOptions = config.sway.cmdFlags; + extraSessionCommands = '' + # Fix for some Java AWT applications (e.g. Android Studio), + # use this if they aren't displayed properly: + export _JAVA_AWT_WM_NONREPARENTING=1 + ''; + }; + + environment.systemPackages = with pkgs; [ + # default extra packages + brightnessctl + foot + grim + pulseaudio + swayidle + # swaylock - use swaylock-effects instead + swaylock-effects + wmenu + # additional things i like + slurp + wofi + wl-clipboard + wob + pamixer + wlsunset + flameshot + waybar + wayland-pipewire-idle-inhibit + ]; + }; +} diff --git a/modules/nixos/yubikey.nix b/modules/nixos/yubikey.nix new file mode 100644 index 0000000..6fde5ac --- /dev/null +++ b/modules/nixos/yubikey.nix @@ -0,0 +1,23 @@ +{ + pkgs, + lib, + config, + ... +}: +{ + + options = { + yubikey = { + enable = lib.mkEnableOption "enable yubikey module"; + }; + }; + + config = lib.mkIf config.yubikey.enable { + environment.systemPackages = with pkgs; [ + yubikey-personalization + yubikey-manager + ]; + + services.pcscd.enable = true; + }; +} diff --git a/packages/ahab.nix b/packages/ahab.nix new file mode 100644 index 0000000..6e00454 --- /dev/null +++ b/packages/ahab.nix @@ -0,0 +1,29 @@ +{ nixpkgs, system, ... }: + +let + pkgs = import nixpkgs { inherit system; }; + version = "v0.3.2"; +in +pkgs.rustPlatform.buildRustPackage { + pname = "ahab"; + inherit version; + + src = pkgs.fetchFromGitea { + domain = "git.janezic.dev"; + owner = "janezicmatej"; + repo = "ahab"; + rev = version; + sha256 = "sha256-bL8LPpD5k97XPYftXhPr7V/LNOB71pcBlsfBjJUIeG8"; + }; + + cargoHash = "sha256-f8omNtjLF5gMJGgxdzWifStcs8d4fu++EegR2auObXE"; + + buildType = "debug"; + + meta = { + description = "ahab"; + homepage = "https://git.janezic.dev/janezicmatej/ahab"; + license = pkgs.lib.licenses.mit; + maintainers = [ ]; + }; +} diff --git a/packages/ca-matheo-si.nix b/packages/ca-matheo-si.nix new file mode 100644 index 0000000..eb817b7 --- /dev/null +++ b/packages/ca-matheo-si.nix @@ -0,0 +1,23 @@ +{ nixpkgs, system, ... }: + +let + pkgs = import nixpkgs { inherit system; }; + version = "C6r62em"; +in + +pkgs.stdenv.mkDerivation { + pname = "ca-matheo-si"; + version = version; + + src = pkgs.fetchurl { + url = "http://ipa2.matheo.si/ipa/config/ca.crt"; + sha256 = "sha256-C6r62emPyw1kxUZOTWhwABNyBEWTTLMEVX5Ma/2i9ls"; + }; + + dontUnpack = true; + + installPhase = '' + mkdir -p $out + cp $src $out/ca-matheo-si.cert + ''; +} diff --git a/packages/default.nix b/packages/default.nix new file mode 100644 index 0000000..fef7ade --- /dev/null +++ b/packages/default.nix @@ -0,0 +1 @@ +{ lib, my-lib }: args: my-lib.mapDir ./. args diff --git a/packages/ggman.nix b/packages/ggman.nix new file mode 100644 index 0000000..8430519 --- /dev/null +++ b/packages/ggman.nix @@ -0,0 +1,36 @@ +{ nixpkgs-master, system, ... }: + +let + nixpkgs = nixpkgs-master; + pkgs = import nixpkgs { inherit system; }; + version = "e24855c"; +in +pkgs.buildGoModule.override + { + go = pkgs.go_1_26; + } + { + pname = "ggman"; + inherit version; + + src = pkgs.fetchFromGitHub { + owner = "tkw1536"; + repo = "ggman"; + rev = version; + sha256 = "sha256-H78xtF7l5joX3/qDFaRIT4LyZpHmm6DMR4JIKzNO7c0="; + }; + + vendorHash = "sha256-w8NrOt0xtn+/gugJ4amzdJP70Y5KHe5DlhsEprycm3U="; + subPackages = [ "cmd/ggman" ]; + + ldflags = [ + "-X go.tkw01536.de/ggman.buildVersion=${version}" + ]; + + meta = { + description = "Manager for all your local git repositories"; + homepage = "https://github.com/tkw1536/ggman"; + license = pkgs.lib.licenses.mit; + maintainers = [ ]; + }; + } diff --git a/packages/git-linearize.nix b/packages/git-linearize.nix new file mode 100644 index 0000000..e9c1601 --- /dev/null +++ b/packages/git-linearize.nix @@ -0,0 +1,24 @@ +{ nixpkgs, system, ... }: + +let + pkgs = import nixpkgs { inherit system; }; + version = "main"; +in +pkgs.stdenv.mkDerivation { + pname = "git-linearize"; + inherit version; + + src = pkgs.fetchFromGitHub { + owner = "zegl"; + repo = "extremely-linear"; + rev = version; + sha256 = "sha256-aZGxX4B0hUrYWxViFAjbZ4dCWC2ujEBAlBKdx408KhA="; + }; + + propagatedBuildInputs = [ pkgs.lucky-commit ]; + + installPhase = '' + mkdir -p $out/bin + cp $src/git-linearize $src/shit $out/bin/ + ''; +} diff --git a/packages/releasectl.nix b/packages/releasectl.nix new file mode 100644 index 0000000..f3fd546 --- /dev/null +++ b/packages/releasectl.nix @@ -0,0 +1,28 @@ +{ nixpkgs-master, system, ... }: + +let + nixpkgs = nixpkgs-master; + pkgs = import nixpkgs { inherit system; }; + version = "v1.25.0"; + python = pkgs.python313; +in + +python.pkgs.buildPythonPackage rec { + pname = "releasectl"; + version = "1.2.0"; + + src = pkgs.fetchurl { + url = "https://gitlab.com/flarenetwork/infra-public/pipeliner/-/package_files/216813866/download"; + sha256 = "sha256-ScBG8BoOKDdOAHTFP+zwyk+Kfu31WoKQSRkutOvnJ5E"; + }; + + format = "wheel"; # if it uses poetry/PEP517, otherwise "setuptools" + # nativeBuildInputs = [ python.pkgs.setuptools python.pkgs.wheel ]; + # propagatedBuildInputs = with python.pkgs; [ + # # add runtime deps here if needed + # ]; + + # pyproject = true; + # build-system = [ pkgs.python313Packages.hatchling ]; + +} diff --git a/users/gorazd/home-manager.nix b/users/gorazd/home-manager.nix new file mode 100644 index 0000000..de5ae1b --- /dev/null +++ b/users/gorazd/home-manager.nix @@ -0,0 +1,54 @@ +{ inputs, ... }: + +{ + config, + lib, + pkgs, + inputs, + ... +}: + +let + packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}; +in + +{ + home.stateVersion = "24.11"; + + home.packages = [ + pkgs.git + ]; + + programs.neovim = { + enable = true; + vimAlias = true; + defaultEditor = true; + + package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default; + + extraPackages = with pkgs; [ + # runtime deps + fzf + ripgrep + gnumake + gcc + luajit + + lua-language-server + nil + nixd + + nixpkgs-fmt + stylua + + ]; + + extraWrapperArgs = [ + "--suffix" + "LD_LIBRARY_PATH" + ":" + "${lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}" + ]; + + }; +} diff --git a/users/matej/home-manager.nix b/users/matej/home-manager.nix new file mode 100644 index 0000000..6917baf --- /dev/null +++ b/users/matej/home-manager.nix @@ -0,0 +1,103 @@ +{ inputs, ... }: + +{ + config, + lib, + pkgs, + inputs, + ... +}: + +let + packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}; +in + +{ + home.stateVersion = "24.11"; + + # TODO:(janezicmatej) do i need this here? + services.dunst.enable = true; + + home.packages = [ + pkgs.bibata-cursors + pkgs.pinentry-curses + + pkgs.starship + + # git and co + pkgs.git + packages.git-linearize + packages.ggman + + # cli utils + packages.ahab + pkgs.fzf + pkgs.htop + pkgs.jc + pkgs.jq + pkgs.openssl + pkgs.pv + pkgs.python3 + pkgs.ripgrep + pkgs.fd + pkgs.tmux + pkgs.osc + pkgs.just + + # compilers, toolchains, ... + pkgs.go + # pkgs.gcc + # pkgs.clang + + # need for gcp stuff + pkgs.google-cloud-sdk + pkgs.google-cloud-sql-proxy + ]; + + home.file.".assets".source = "${inputs.self}/assets"; + + stylix.targets.neovim.enable = false; + programs.neovim = { + enable = true; + vimAlias = true; + defaultEditor = true; + + package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default; + + extraPackages = with pkgs; [ + # runtime deps + gcc + luajit + nodejs_22 # copilot + + # treesitter + tree-sitter + + # lua_fzf + fd + ripgrep + bat + gnumake + delta + + # language server + pyright + typescript-language-server + lua-language-server + gopls + nil + nixd + + # formatters + nixpkgs-fmt + stylua + ]; + + extraWrapperArgs = [ + "--suffix" + "LD_LIBRARY_PATH" + ":" + "${lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}" + ]; + }; +}