diff --git a/README.org b/README.org index 413f834..f0f2da3 100644 --- a/README.org +++ b/README.org @@ -54,4 +54,11 @@ Then in this directory: :lf . #+end_src -You'll get acces to 'lib' and such. (It evals here) +Then you can tpye: + +#+begin_src nix +inputs.nixpkgs.lib +#+end_src + +And stuff + diff --git a/home-manager/base/default.nix b/home-manager/base/default.nix deleted file mode 100644 index 744e635..0000000 --- a/home-manager/base/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -#https://xeiaso.net/talks/asg-2023-nixos/ example -{ lib, config, pkgs, ... }:{ - imports = [./gpg-agent.nix - ./name.nix]; - - #Global suite options - options.azos.name = lib.mkOption{ - default = "YOUR NAME HERE"; - type = lib.types.str; - description = "Your full name."; - }; - -} diff --git a/home-manager/base/gpg-agent.nix b/home-manager/base/gpg-agent.nix deleted file mode 100644 index 06f5ba3..0000000 --- a/home-manager/base/gpg-agent.nix +++ /dev/null @@ -1,13 +0,0 @@ -#https://xeiaso.net/talks/asg-2023-nixos/ example -{ lib, config, pkgs, ... }: -let - cfg = config.azos.gpgagent; -in -{ - options.azos.gpgagent.enable = lib.mkEnableOption "Enables AZOS GPG agent"; - - config = lib.mkIf cfg.enable { - home.packages = [ pkgs.gnupg ]; - home.file.".gnupg/gpg-agent.conf".source = ./gpg-agent.conf; - }; -} diff --git a/home-manager/home.nix b/home-manager/home.nix index 15c72ec..29ea276 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -8,8 +8,10 @@ pkgs, ... }: { + _module.args.azos-utils = import ./utils.nix { lib = lib; }; + imports = [ - ./base + ./suites ]; nixpkgs = { @@ -25,7 +27,7 @@ }; }; - azos.gpgagent.enable = true; + azos.suites.base.enable = true; azos.name = "Aner Zakobar"; # TODO: Set your username @@ -36,7 +38,6 @@ home.packages = with pkgs; [ # steam - emacs pandoc offlineimap #emailing liberation_ttf #fonts diff --git a/home-manager/suites/base/default.nix b/home-manager/suites/base/default.nix new file mode 100644 index 0000000..4fb2eef --- /dev/null +++ b/home-manager/suites/base/default.nix @@ -0,0 +1,33 @@ +#https://xeiaso.net/talks/asg-2023-nixos/ example +{ lib, config, pkgs, options, azos-utils, ... }: +{ + options.azos.suites.base.enable = (azos-utils.mkSuiteEnableOption {}); + + options.azos.suites.face.enable = lib.mkOption { + type = lib.types.bool; + default = true; + }; + + + imports = [ + ./emacs + ./gpg-agent + ./name.nix + ]; + + options.azos.python.pkgs = lib.mkOption{ + default = []; + type = lib.types.list; + description = "List of packages for python."; + }; + + options.azos.name = lib.mkOption{ + default = "YOUR NAME HERE"; + type = lib.types.str; + description = "Your full name."; + }; + + # config = lib.mkIf cfg.enable { + # # Global suite options + # }; +} diff --git a/home-manager/suites/base/emacs/default.nix b/home-manager/suites/base/emacs/default.nix new file mode 100644 index 0000000..b241e4b --- /dev/null +++ b/home-manager/suites/base/emacs/default.nix @@ -0,0 +1,40 @@ +{ lib, config, pkgs, azos-utils, ... }: +let + isEnabled = + config.azos.emacs.enable && config.azos.suites.base.enable; + emacspkgs = config.azos.emacs.emacspkg.pkgs; +in +{ + options.azos.emacs.enable = (azos-utils.mkFeatureEnableOption {}); + + options.azos.emacs.emacspkg = lib.mkOption{ + type = lib.types.package; + default = pkgs.emacs; + }; + + options.azos.emacs.pkgs = lib.mkOption{ + default = []; + description = "List of packages for emacs."; + }; + + config = lib.mkIf isEnabled { + azos.emacs.pkgs = [(emacspkgs.trivialBuild (azos-utils.trivialFromOrg { + pname = "azos-emacs-base"; + version = "0.1.6"; + src = ./el/azos-emacs-base.org; + packageRequires = [ + emacspkgs.evil + emacspkgs.magit + emacspkgs.vterm + ]; + }))]; + + home.packages = with pkgs; + [((emacsPackagesFor config.azos.emacs.emacspkg).emacsWithPackages ( + config.azos.emacs.pkgs + )) ]; + }; + + imports = [ + ]; +} diff --git a/home-manager/suites/base/emacs/el/azos-emacs-base.org b/home-manager/suites/base/emacs/el/azos-emacs-base.org new file mode 100644 index 0000000..4a9f032 --- /dev/null +++ b/home-manager/suites/base/emacs/el/azos-emacs-base.org @@ -0,0 +1,12 @@ +Hello! + +#+begin_src emacs-lisp +(use-package evil + :init + :ensure t + :config + (setq evil-want-C-i-jump nil) + (evil-mode 1)) + +(provide 'azos-emacs-base) +#+end_src diff --git a/home-manager/suites/base/gpg-agent/default.nix b/home-manager/suites/base/gpg-agent/default.nix new file mode 100644 index 0000000..c67784c --- /dev/null +++ b/home-manager/suites/base/gpg-agent/default.nix @@ -0,0 +1,14 @@ +{ lib, config, pkgs, azos-utils, ... }: +let + isEnabled = + config.azos.gpgagent.enable && + config.azos.suites.base.enable; +in +{ + options.azos.gpgagent.enable = (azos-utils.mkFeatureEnableOption {}); + + config = lib.mkIf isEnabled { + home.packages = [ pkgs.gnupg ]; + home.file.".gnupg/gpg-agent.conf".source = ./gpg-agent.conf; + }; +} diff --git a/home-manager/base/gpg-agent.conf b/home-manager/suites/base/gpg-agent/gpg-agent.conf similarity index 100% rename from home-manager/base/gpg-agent.conf rename to home-manager/suites/base/gpg-agent/gpg-agent.conf diff --git a/home-manager/base/name.nix b/home-manager/suites/base/name.nix similarity index 100% rename from home-manager/base/name.nix rename to home-manager/suites/base/name.nix diff --git a/home-manager/suites/default.nix b/home-manager/suites/default.nix new file mode 100644 index 0000000..186eb78 --- /dev/null +++ b/home-manager/suites/default.nix @@ -0,0 +1,16 @@ +#https://xeiaso.net/talks/asg-2023-nixos/ example +{ lib, config, pkgs, options, azos-utils, ... }: +{ + # options.azos.suites.base.enable = azos-utils.mkSuiteEnableOption { + # suiteDependents = ["station"]; + # }; + + # options.azos.suites.station.enable = azos-utils.mkSuiteEnableOption { + # suiteDependents = []; + # }; + + imports = [ + ./base + ./station + ]; +} diff --git a/home-manager/suites/station/default.nix b/home-manager/suites/station/default.nix new file mode 100644 index 0000000..f27ee7a --- /dev/null +++ b/home-manager/suites/station/default.nix @@ -0,0 +1,10 @@ +{ lib, config, pkgs, options, azos-utils, ... }: +let + cfg = config.azos.suites.base; +in +{ + options.azos.suites.station.enable = azos-utils.mkSuiteEnableOption {}; + + config = lib.mkIf cfg.enable { + }; +} diff --git a/home-manager/utils.nix b/home-manager/utils.nix new file mode 100644 index 0000000..6817232 --- /dev/null +++ b/home-manager/utils.nix @@ -0,0 +1,73 @@ +{ lib, ... }: +{ + # mkFeatureEnableOption = { suiteEnable, ...} @ attrs : + # lib.mkOption (builtins.removeAttrs (lib.mergeAttrs attrs { + # default = true; + # example = true; + # type = lib.types.bool; + # apply = old: suiteEnable && old; + # }) ["suiteEnable"]); + + # mkDependentFeatureEnableOption = { suiteEnable, otherOption, ...} @ attrs : + # lib.mkOption (builtins.removeAttrs (lib.mergeAttrs attrs { + # default = true; + # example = true; + # type = lib.types.bool; + # apply = old: suiteEnable && otherOption && old; + # }) ["suiteEnable" "otherOption"]); + + # mkSuiteEnableOption = { suiteDependents, ... } @ attrs : + # lib.mkOption lib.mergeAttrs attrs { + # default = []; + # example = []; + # type = lib.types.list; + # apply = old: old || lib.lists.any suiteEnabledPred suiteDependents; + # }; + + mkFeatureEnableOption = { ... } @ attrs : + lib.mkOption (lib.mergeAttrs attrs { + default = true; + example = true; + type = lib.types.bool; + }); + + mkSuiteEnableOption = { ... } @ attrs : + lib.mkOption (lib.mergeAttrs attrs { + default = false; + example = true; + type = lib.types.bool; + }); + + trivialFromOrg = { ... } @ attrs : ( + lib.mergeAttrs attrs { + preBuild = '' + for file in ./*.org + do + emacs --batch --eval "(require 'org)" --eval "(org-babel-tangle-file \"$file\" (concat (file-name-sans-extension \"$file\") \".el\") \"emacs-lisp\")" + done + ''; + unpackCmd = '' + case "$curSrc" in + *.el) + # keep original source filename without the hash + local filename=$(basename "$curSrc") + filename="''${filename:33}" + cp $curSrc $filename + chmod +w $filename + sourceRoot="." + ;; + *.org) + # keep original source filename without the hash + local filename=$(basename "$curSrc") + filename="''${filename:33}" + cp $curSrc $filename + chmod +w $filename + sourceRoot="." + ;; + *) + _defaultUnpack "$curSrc" + ;; + esac + ''; + }); +}