From 4984e0a3ed1d9795236b24f9db2e6c5e2cd347b5 Mon Sep 17 00:00:00 2001 From: Aner Zakobar Date: Mon, 18 Nov 2024 09:11:55 +0200 Subject: [PATCH] Just so there is a backup --- README.org | 14 + flake.nix | 3 +- modules/home-manager/suites/base/default.nix | 4 + .../suites/base/emacs/default.nix | 23 +- .../suites/base/emacs/el/azos-emacs-vterm.org | 20 - .../home-manager/suites/base/emacs/vterm.nix | 29 -- .../home-manager/suites/dev/emacs/default.nix | 5 +- .../home-manager/suites/editor/default.nix | 8 + .../suites/editor/emacs/default.nix | 4 +- modules/home-manager/suites/exwm/default.nix | 253 ++++++++++ .../suites/exwm/emacs/default.nix | 14 + .../home-manager/suites/station/default.nix | 17 +- .../suites/station/emacs/default.nix | 15 + .../suites/station/mail/default.nix | 24 + nixos/configuration-vm.nix | 5 + pkgs/azos-emacs-base.nix | 2 + pkgs/azos-emacs-dev.nix | 2 + pkgs/azos-emacs-editor.nix | 6 +- pkgs/azos-emacs-exwm.nix | 18 + pkgs/azos-emacs-station.nix | 20 + pkgs/azos-fetchmail.nix | 10 + pkgs/azos-tex.nix | 26 ++ pkgs/azos-trivial-org.nix | 45 -- pkgs/default.nix | 42 +- pkgs/elisp/azos-emacs-base.org | 435 +++++++++++++++++- pkgs/elisp/azos-emacs-dev.org | 31 ++ pkgs/elisp/azos-emacs-editor.org | 77 +++- pkgs/elisp/azos-emacs-exwm.org | 376 +++++++++++++++ pkgs/elisp/azos-emacs-station.org | 300 ++++++++++++ shells/debugTex/default.nix | 12 + shells/debugTex/test.org | 40 ++ shells/debugTex/test.tex | 94 ++++ shells/debugTex/tex2pdf.sh | 4 + shells/default.nix | 4 + 34 files changed, 1830 insertions(+), 152 deletions(-) delete mode 100644 modules/home-manager/suites/base/emacs/el/azos-emacs-vterm.org delete mode 100644 modules/home-manager/suites/base/emacs/vterm.nix create mode 100644 modules/home-manager/suites/exwm/default.nix create mode 100644 modules/home-manager/suites/exwm/emacs/default.nix create mode 100644 modules/home-manager/suites/station/emacs/default.nix create mode 100644 modules/home-manager/suites/station/mail/default.nix create mode 100644 pkgs/azos-emacs-exwm.nix create mode 100644 pkgs/azos-emacs-station.nix create mode 100644 pkgs/azos-fetchmail.nix create mode 100644 pkgs/azos-tex.nix delete mode 100644 pkgs/azos-trivial-org.nix create mode 100644 pkgs/elisp/azos-emacs-exwm.org create mode 100644 pkgs/elisp/azos-emacs-station.org create mode 100644 shells/debugTex/default.nix create mode 100644 shells/debugTex/test.org create mode 100644 shells/debugTex/test.tex create mode 100644 shells/debugTex/tex2pdf.sh create mode 100644 shells/default.nix diff --git a/README.org b/README.org index f0f2da3..0b34f03 100644 --- a/README.org +++ b/README.org @@ -62,3 +62,17 @@ inputs.nixpkgs.lib And stuff + +** Shell + +#+begin_src bash +nix develop .#shells.x86_64-linux.debugTexShell +#+end_src + +* Tasks + +** Station ORG +*** Move mail config +*** Add mail service +*** Verify package list +** EXWM Everything diff --git a/flake.nix b/flake.nix index 22fd4ce..c5aa179 100644 --- a/flake.nix +++ b/flake.nix @@ -75,7 +75,6 @@ ./nixos/configuration-vm.nix ]; }; - }; # Standalone home-manager configuration entrypoint @@ -91,5 +90,7 @@ ]; }; }; + + shells = forAllSystems (system: ((import ./shells) { pkgs= nixpkgs.legacyPackages.${system} // outputs.packages.${system};})); }; } diff --git a/modules/home-manager/suites/base/default.nix b/modules/home-manager/suites/base/default.nix index 9757025..6e572de 100644 --- a/modules/home-manager/suites/base/default.nix +++ b/modules/home-manager/suites/base/default.nix @@ -17,4 +17,8 @@ description = "Your full name."; }; + config.home.packages = [ + pkgs.liberation_ttf + pkgs.font-awesome + ]; } diff --git a/modules/home-manager/suites/base/emacs/default.nix b/modules/home-manager/suites/base/emacs/default.nix index beadcc4..fe952d7 100644 --- a/modules/home-manager/suites/base/emacs/default.nix +++ b/modules/home-manager/suites/base/emacs/default.nix @@ -3,7 +3,7 @@ let isEnabled = config.azos.emacs.enable && config.azos.suites.base.enable; emacspkgs = config.azos.emacs.emacspkg.pkgs; - localPkgName = "azos-emacs-base"; + # localPkgName = "azos-emacs-base"; in { options.azos.emacs.enable = (azos-utils.mkFeatureEnableOption { @@ -20,18 +20,18 @@ in description = "List of packages for Emacs."; }; - options.azos.emacs.enabledSuites = lib.mkOption{ - default = []; - description = "List of enabled suite names for Emacs. Used to enable the " + - "custom packages in init.el."; - }; + # options.azos.emacs.enabledSuites = lib.mkOption{ + # default = []; + # description = "List of enabled suite names for Emacs. Used to enable the " + + # "custom packages in init.el."; + # }; #Set config config = lib.mkIf isEnabled { #Base emacs suite definition azos.emacs.pkgs = [pkgs.azos.emacs.base]; - azos.emacs.enabledSuites = [localPkgName]; + # azos.emacs.enabledSuites = [localPkgName]; #Global instantiation of Emacs programs.emacs = { @@ -40,12 +40,9 @@ in ((pkgs.emacsPackagesFor config.azos.emacs.emacspkg).emacsWithPackages ( config.azos.emacs.pkgs )); - extraConfig = lib.strings.concatStringsSep "\n" - (builtins.map (s : "(require '" + s + ")\n") - config.azos.emacs.enabledSuites); + # extraConfig = lib.strings.concatStringsSep "\n" + # (builtins.map (s : "(require '" + s + ")\n") + # config.azos.emacs.enabledSuites); }; - }; - - # imports = [./vterm.nix]; } diff --git a/modules/home-manager/suites/base/emacs/el/azos-emacs-vterm.org b/modules/home-manager/suites/base/emacs/el/azos-emacs-vterm.org deleted file mode 100644 index f66076b..0000000 --- a/modules/home-manager/suites/base/emacs/el/azos-emacs-vterm.org +++ /dev/null @@ -1,20 +0,0 @@ -#+title: Aner's Emacs Vterm Configuration -#+property: header-args :results silent - -* Vterm - -#+begin_src emacs-lisp -(require 'azos-emacs-base) - -(use-package vterm - :if (member system-type '(gnu gnu/linux)) - :config - (add-hook 'vterm-mode-hook - (lambda () (setq-local global-hl-line-mode nil))) - - (evil-collection-define-key 'normal 'vterm-mode-map - (kbd "p") 'vterm-yank) - (setq vterm-timer-delay 0.01 - vterm-term-environment-variable "xterm-256color")) -#+end_src - diff --git a/modules/home-manager/suites/base/emacs/vterm.nix b/modules/home-manager/suites/base/emacs/vterm.nix deleted file mode 100644 index 8b3a72a..0000000 --- a/modules/home-manager/suites/base/emacs/vterm.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ lib, config, pkgs, azos-utils, ... }: -let - isEnabled = - config.azos.emacs.enable && config.azos.suites.editor.enable && - config.azos.emacs.vterm.enable; - emacspkgs = config.azos.emacs.emacspkg.pkgs; - localPkgName = "azos-emacs-vterm"; -in -{ - options.azos.emacs.vterm.enable = (azos-utils.mkFeatureEnableOption { - description = "Enables Emacs VTERM installation.";}); - - #Set config - config = lib.mkIf isEnabled { - - #Base emacs suite definition - azos.emacs.pkgs = [(emacspkgs.trivialBuild (azos-utils.trivialFromOrg { - pname = localPkgName; - version = "0.1.6"; - src = ./el/azos-emacs-vterm.org; - packageRequires = with emacspkgs; [ - vterm - ]; - }))]; - - azos.emacs.enabledSuites = [localPkgName]; - }; - -} diff --git a/modules/home-manager/suites/dev/emacs/default.nix b/modules/home-manager/suites/dev/emacs/default.nix index e1f40db..681c4aa 100644 --- a/modules/home-manager/suites/dev/emacs/default.nix +++ b/modules/home-manager/suites/dev/emacs/default.nix @@ -3,7 +3,7 @@ let isEnabled = config.azos.emacs.enable && config.azos.suites.dev.enable; emacspkgs = config.azos.emacs.emacspkg.pkgs; - localPkgName = "azos-emacs-dev"; + # localPkgName = "azos-emacs-dev"; in { #Set config @@ -12,7 +12,6 @@ in #Base emacs suite definition azos.emacs.pkgs = [pkgs.azos.emacs.dev]; - azos.emacs.enabledSuites = [localPkgName]; + # azos.emacs.enabledSuites = [localPkgName]; }; - } diff --git a/modules/home-manager/suites/editor/default.nix b/modules/home-manager/suites/editor/default.nix index 110ee5a..790f5c5 100644 --- a/modules/home-manager/suites/editor/default.nix +++ b/modules/home-manager/suites/editor/default.nix @@ -1,9 +1,17 @@ #https://xeiaso.net/talks/asg-2023-nixos/ example { lib, config, pkgs, options, azos-utils, ... }: +let + isEnabled = + config.azos.suites.editor.enable; +in { options.azos.suites.editor.enable = (azos-utils.mkSuiteEnableOption {}); imports = [ ./emacs ]; + + config = lib.mkIf isEnabled { + home.packages = [ pkgs.azos.tex ]; + }; } diff --git a/modules/home-manager/suites/editor/emacs/default.nix b/modules/home-manager/suites/editor/emacs/default.nix index c8a6928..7aad662 100644 --- a/modules/home-manager/suites/editor/emacs/default.nix +++ b/modules/home-manager/suites/editor/emacs/default.nix @@ -4,7 +4,7 @@ let config.azos.emacs.enable && config.azos.suites.dev.enable; emacspkgs = config.azos.emacs.emacspkg.pkgs; pythonpkgs = config.azos.python.pythonpkg.pkgs; - localPkgName = "azos-emacs-editor"; + # localPkgName = "azos-emacs-editor"; in { #Set config @@ -13,7 +13,7 @@ in #Base emacs suite definition azos.emacs.pkgs = [pkgs.azos.emacs.base]; - azos.emacs.enabledSuites = [localPkgName]; + # azos.emacs.enabledSuites = [localPkgName]; azos.python.pkgs = with pythonpkgs; [ graphviz pygments ]; }; diff --git a/modules/home-manager/suites/exwm/default.nix b/modules/home-manager/suites/exwm/default.nix new file mode 100644 index 0000000..b4ac516 --- /dev/null +++ b/modules/home-manager/suites/exwm/default.nix @@ -0,0 +1,253 @@ +#https://xeiaso.net/talks/asg-2023-nixos/ example +{ lib, config, pkgs, options, azos-utils, ... }: +let + isEnabled = + config.azos.suites.exwm.enable; +in +{ + options.azos.suites.exwm.enable = (azos-utils.mkSuiteEnableOption {}); + + imports = [ + ./emacs + ]; + + config = lib.mkIf isEnabled { + services.dunst = { + enable = true; + settings = { +[global] + ### Display ### + + monitor = 0 + follow = keyboard + geometry = "300x5-30+20" + + progress_bar = true + progress_bar_height = 10 + progress_bar_frame_width = 1 + progress_bar_min_width = 150 + progress_bar_max_width = 300 + + indicate_hidden = yes + shrink = no + transparency = 0 + + notification_height = 0 + separator_height = 1 + padding = 3 + horizontal_padding = 4 + text_icon_padding = 0 + + frame_width = 1 + + separator_color = frame + + background = "#cdcbb4" + + sort = yes + idle_threshold = 120 + + ### Text ### + + font = Iosevka Term 10 + line_height = 0 + + markup = full + + format = "%s\n%b" + + # Alignment of message text. + alignment = left + + # Vertical alignment of message text and icon. + # Possible values are "top", "center" and "bottom". + vertical_alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale small icons up to this size, set to 0 to disable. Helpful + # for e.g. small files or high-dpi screens. In case of conflict, + # max_icon_size takes precedence over this. + min_icon_size = 0 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Print a notification on startup. + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = false + + # Manage dunst's desire for talking + # Can be one of the following values: + # crit: Critical features. Dunst aborts + # warn: Only non-fatal warnings + # mesg: Important Messages + # info: all unimportant stuff + # debug: all less than unimportant stuff + verbosity = mesg + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 0 + + # Ignore the dbus closeNotification message. + # Useful to enforce the timeout set by dunst configuration. Without this + # parameter, an application may close the notification sent before the + # user defined timeout. + ignore_dbusclose = false + + ### Wayland ### + # These settings are Wayland-specific. They have no effect when using X11 + + # Uncomment this if you want to let notications appear under fullscreen + # applications (default: overlay) + # layer = top + + # Set this to true to use X11 output on Wayland. + force_xwayland = false + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines list of actions for each mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: If the notification has exactly one action, or one is marked as default, + # invoke it. If there are multiple and no default, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + # These values can be strung together for each mouse event, and + # will be executed in sequence. + mouse_left_click = close_current + mouse_middle_click = do_action, close_current + mouse_right_click = close_all + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + +# The internal keyboard shortcut support in dunst is now considered deprecated +# and should be replaced by dunstctl calls. You can use the configuration of your +# WM or DE to bind these to shortcuts of your choice. +# Check the dunstctl manual page for more info. +[shortcuts] + + # Shortcuts are specified as [modifier+][modifier+]...key + # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", + # "mod3" and "mod4" (windows-key). + # Xev might be helpful to find names for keys. + + # Close notification. Equivalent dunstctl command: + # dunstctl close + # close = ctrl+space + + # Close all notifications. Equivalent dunstctl command: + # dunstctl close-all + # close_all = ctrl+shift+space + + # Redisplay last message(s). Equivalent dunstctl command: + # dunstctl history-pop + # history = ctrl+grave + + # Context menu. Equivalent dunstctl command: + # dunstctl context + # context = ctrl+shift+period + +[urgency_low] + foreground = "#2f4f4f" + frame_color = "#cdcdb4" + timeout = 10 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + foreground = "#00cd00" + frame_color = "#9aff9a" + timeout = 10 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + foreground = "#cd0000" + frame_color = "#cd0000" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + + }; + } + }; +} diff --git a/modules/home-manager/suites/exwm/emacs/default.nix b/modules/home-manager/suites/exwm/emacs/default.nix new file mode 100644 index 0000000..ae2ed5a --- /dev/null +++ b/modules/home-manager/suites/exwm/emacs/default.nix @@ -0,0 +1,14 @@ +{ lib, config, pkgs, azos-utils, ... }: +let + isEnabled = + config.azos.emacs.enable && config.azos.suites.exwm.enable; + emacspkgs = config.azos.emacs.emacspkg.pkgs; +in +{ + #Set config + config = lib.mkIf isEnabled { + + #Base emacs suite definition + azos.emacs.pkgs = [pkgs.azos.emacs.exwm]; + }; +} diff --git a/modules/home-manager/suites/station/default.nix b/modules/home-manager/suites/station/default.nix index f27ee7a..fc91186 100644 --- a/modules/home-manager/suites/station/default.nix +++ b/modules/home-manager/suites/station/default.nix @@ -1,10 +1,23 @@ { lib, config, pkgs, options, azos-utils, ... }: let - cfg = config.azos.suites.base; + isEnabled = config.azos.suites.base.enable; in { options.azos.suites.station.enable = azos-utils.mkSuiteEnableOption {}; - config = lib.mkIf cfg.enable { + imports = [ + ./emacs + ]; + + config = lib.mkIf isEnabled { + home.packages = with pkgs; [ + flameshot + qutebrowser + mpv + upower + pass + dunst + lmms + ]; }; } diff --git a/modules/home-manager/suites/station/emacs/default.nix b/modules/home-manager/suites/station/emacs/default.nix new file mode 100644 index 0000000..94283cc --- /dev/null +++ b/modules/home-manager/suites/station/emacs/default.nix @@ -0,0 +1,15 @@ +{ lib, config, pkgs, azos-utils, ... }: +let + isEnabled = + config.azos.emacs.enable && config.azos.suites.station.enable; + emacspkgs = config.azos.emacs.emacspkg.pkgs; +in +{ + #Set config + config = lib.mkIf isEnabled { + + #Base emacs suite definition + azos.emacs.pkgs = [pkgs.azos.emacs.station]; + }; + +} diff --git a/modules/home-manager/suites/station/mail/default.nix b/modules/home-manager/suites/station/mail/default.nix new file mode 100644 index 0000000..3d1f391 --- /dev/null +++ b/modules/home-manager/suites/station/mail/default.nix @@ -0,0 +1,24 @@ +{ lib, config, pkgs, options, azos-utils, ... }: +let + isEnabled = config.azos.suites.station.enable && config.azos.mail.enable; +in +{ + options.azos.mail.enable = (azos-utils.mkFeatureEnableOption { + description = "Enables Mail installation.";}); + + options.azos.mail.accounts = lib.mkOption{ + default = []; + type = lib.types.list; + description = "List of accounts."; + }; + + + imports = [ + ]; + + config = lib.mkIf isEnabled { + home.packages = with pkgs; [pkgs pkgs]; + # home.packages = [#TODO THIS]; + }; + +} diff --git a/nixos/configuration-vm.nix b/nixos/configuration-vm.nix index 9f67269..daa2b9d 100644 --- a/nixos/configuration-vm.nix +++ b/nixos/configuration-vm.nix @@ -101,6 +101,11 @@ imports = [ }; }; + #Graphical environment + services.xserver.enable = true; + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.xfce.enable = true; + # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion system.stateVersion = "24.05"; } diff --git a/pkgs/azos-emacs-base.nix b/pkgs/azos-emacs-base.nix index fd27c21..e426901 100644 --- a/pkgs/azos-emacs-base.nix +++ b/pkgs/azos-emacs-base.nix @@ -26,5 +26,7 @@ orgTrivialBuild { company olivetti #FLYCHECK PANDOC dired-subtree + dashboard + vterm ]; } diff --git a/pkgs/azos-emacs-dev.nix b/pkgs/azos-emacs-dev.nix index 8c92ba9..3325854 100644 --- a/pkgs/azos-emacs-dev.nix +++ b/pkgs/azos-emacs-dev.nix @@ -11,10 +11,12 @@ orgTrivialBuild { flycheck cmake-mode yaml + yaml-mode nix-mode python rust-mode ein + ob-async pkgs.azos.emacs.base pkgs.azos.emacs.editor ]; diff --git a/pkgs/azos-emacs-editor.nix b/pkgs/azos-emacs-editor.nix index e3127cf..097cc92 100644 --- a/pkgs/azos-emacs-editor.nix +++ b/pkgs/azos-emacs-editor.nix @@ -8,8 +8,12 @@ orgTrivialBuild { version = "0.1.6"; src = ./elisp/azos-emacs-editor.org; packageRequires = with epkgs; [ + pkgs.azos.emacs.base + graphviz-dot-mode markdown-mode - pkgs.azos.emacs.base + markdown-toc + org-present + pdf-tools ]; } diff --git a/pkgs/azos-emacs-exwm.nix b/pkgs/azos-emacs-exwm.nix new file mode 100644 index 0000000..1d8d2f0 --- /dev/null +++ b/pkgs/azos-emacs-exwm.nix @@ -0,0 +1,18 @@ +{ + orgTrivialBuild, + epkgs, + pkgs +}: +orgTrivialBuild { + pname = "azos-emacs-exwm"; + version = "0.1.6"; + src = ./elisp/azos-emacs-exwm.org; + packageRequires = with epkgs; [ + pkgs.azos.emacs.base + pkgs.azos.station.base + + exwm + desktop-environment + bluetooth + ]; +} diff --git a/pkgs/azos-emacs-station.nix b/pkgs/azos-emacs-station.nix new file mode 100644 index 0000000..b299c91 --- /dev/null +++ b/pkgs/azos-emacs-station.nix @@ -0,0 +1,20 @@ +{ + orgTrivialBuild, + epkgs, + pkgs +}: +orgTrivialBuild { + pname = "azos-emacs-station"; + version = "0.1.6"; + src = ./elisp/azos-emacs-station.org; + packageRequires = with epkgs; [ + pkgs.azos.emacs.base + + notmuch #TODO CHECK, ALSO FOR THIS CONFIGURE ALL PACKAGES N STUFF + elfeed #PROBABLY ALSO BUILT IN + elfeed-tube + pass + scad-mode + kubernetes + ]; +} diff --git a/pkgs/azos-fetchmail.nix b/pkgs/azos-fetchmail.nix new file mode 100644 index 0000000..bb5ae10 --- /dev/null +++ b/pkgs/azos-fetchmail.nix @@ -0,0 +1,10 @@ +{ + pkgs, +}: +let + a = 2; +in +pkgs.writeShellScriptBin "my-script" '' + ATE="$(${pkgs.ddate}/bin/ddate +'the %e of %B%, %Y')" + ${pkgs.cowsay}/bin/cowsay Hello, world! Today is $DATE. +'' diff --git a/pkgs/azos-tex.nix b/pkgs/azos-tex.nix new file mode 100644 index 0000000..95cf1e9 --- /dev/null +++ b/pkgs/azos-tex.nix @@ -0,0 +1,26 @@ +{ + pkgs +}: +(pkgs.texlive.combine { + inherit (pkgs.texlive) + scheme-small + collection-binextra + collection-fontsextra + + #Org PDF stuff + dvisvgm dvipng # for preview and export as html + wrapfig amsmath ulem hyperref capt-of + + #Hebrew + bidi babel-hebrew cjhebrew hebrew-fonts + + #Others + zref #Page numbering + transparent #Transparency + + #Exporting + latexmk + minted braket + fontawesome + pygmentex; + }) diff --git a/pkgs/azos-trivial-org.nix b/pkgs/azos-trivial-org.nix deleted file mode 100644 index ab39e07..0000000 --- a/pkgs/azos-trivial-org.nix +++ /dev/null @@ -1,45 +0,0 @@ -# trivial builder for Emacs packages - -{ callPackage, lib, epkgs, ... }@envargs: - -let - libBuildHelper = epkgs.lib-build-helper; -in - -libBuildHelper.extendMkDerivation' epkgs.trivialBuild (finalAttrs: - -args: - -{ - preBuild = args.preBuild or '' - 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 = args.unpackCmd or '' - 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 - ''; -} - -) diff --git a/pkgs/default.nix b/pkgs/default.nix index 3e6a83b..31e2661 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -11,29 +11,21 @@ let 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 - ''; + unpackCmd = '' + case "$curSrc" in + *.el | *.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 + ''; })); localEmacsPkg = (src: pkgs.callPackage src { orgTrivialBuild = orgTrivialBuild; epkgs = epkgs; pkgs = pkgs; }); in @@ -41,4 +33,8 @@ in azos.emacs.base = localEmacsPkg ./azos-emacs-base.nix; azos.emacs.editor = localEmacsPkg ./azos-emacs-editor.nix; azos.emacs.dev = localEmacsPkg ./azos-emacs-dev.nix; + azos.emacs.station = localEmacsPkg ./azos-emacs-station.nix; + azos.emacs.exwm = localEmacsPkg ./azos-emacs-exwm.nix; + azos.tex = pkgs.callPackage ./azos-tex.nix { pkgs = pkgs; }; + # azos.fetchmail = pkgs.callPackage ./azos-fetchmail.nix { pkgs = pkgs; }; } diff --git a/pkgs/elisp/azos-emacs-base.org b/pkgs/elisp/azos-emacs-base.org index ba40e2f..49a12e8 100644 --- a/pkgs/elisp/azos-emacs-base.org +++ b/pkgs/elisp/azos-emacs-base.org @@ -4,20 +4,22 @@ * Base setup ** Bootstrapping -Partially based on [[https://stackoverflow.com/questions/151945/how-do-i-control-how-emacs-makes-backup-files][this post on StackOverflow]]. Setting backups, external custom file. - #+begin_src emacs-lisp (setq vc-follow-symlinks t ;Follow symlinks - ;Backup location TODO FIND IF RELEVANT FOR NIX - backup-directory-alist `(("." . "~/.cache/emacs-backups/")) - auto-save-file-name-transforms '((".*" "~/.cache/emacs-backups/" t)) + + ;Backups from https://www.emacswiki.org/emacs/BackupDirectory + backup-directory-alist `(("." . temporary-file-directory)) + auto-save-file-name-transforms '((".*" temporary-file-directory t)) backup-by-copying t ;Always copy never link delete-old-versions t ;Auto delete old backups kept-new-versions 6 ;Number of versions to keep kept-old-versions 2 version-control t ;Backups for files - gc-cons-threshold 100000000 ;Setting garbage collection to 100M. + + ;Garbage collection + gc-cons-threshold 100000000 + ;Set external cusotm file custom-file (expand-file-name "custom.el" user-emacs-directory) ) @@ -276,7 +278,7 @@ Disabling the toolbar, the splash-screen, the menu-bar and the scroll-bar While we don't actually want fringes (almost at all), some frames use them. #+begin_src emacs-lisp -(set-face-attribute 'fringe nil :background "LemonChiffon1") +;; (set-face-attribute 'fringe nil :background "LemonChiffon1") #+end_src *** Window dividers @@ -288,6 +290,218 @@ While we don't actually want fringes (almost at all), some frames use them. (window-divider-mode 1) #+end_src +*** Tab bar +*** Base + +Prettification of tab bar. We only use tab-bar if the version is greater than 27.1. +We also use this section to bind keys. + +#+begin_src emacs-lisp +;; If version greater than 27.1 + +(defun azos/new-tab-and-rename () + "Created for back compatibility with emacs 27" + (interactive) + (progn + (tab-bar-new-tab) + (call-interactively 'tab-bar-rename-tab))) + +(if (version<= "27.1" emacs-version) (progn + (tab-bar-mode 1) + + (set-face-attribute 'tab-bar nil + :box t + :background "LightYellow3" + :foreground "DarkSlateGrey" + :font "LiberationMono" + :height 90) + + (set-face-attribute 'tab-bar-tab nil + :box '(:color "DarkSlateGrey" :line-width -2) + :background "LightYellow3" + :weight 'bold) + + (set-face-attribute 'tab-bar-tab-inactive nil + :background "LightYellow3" + :inherit 'tab-bar) + + (define-key azos/global-minor-mode/keymap + (kbd "M-") 'tab-next) + (define-key azos/global-minor-mode/keymap + (kbd "M-'") 'tab-previous) + (define-key azos/global-minor-mode/keymap + (kbd "M-t r") 'tab-bar-rename-tab) + (define-key azos/global-minor-mode/keymap + (kbd "M-t n") 'tab-next) + (define-key azos/global-minor-mode/keymap + (kbd "M-t p") 'tab-previous) + (define-key azos/global-minor-mode/keymap + (kbd "M-t x") 'tab-bar-close-tab) + (define-key azos/global-minor-mode/keymap + (kbd "M-t c") 'azos/new-tab-and-rename) + (setq tab-bar-close-button-show nil + tab-bar-new-button-show nil + tab-bar-separator (propertize " ● " 'face + (list :foreground "LightYellow1" + :box '(:color "DarkSlateGrey"))) + ) + (add-hook 'emacs-startup-hook (lambda () (tab-bar-rename-tab "home" 1))) +)) +#+end_src + +*** Right Group Display + +#+begin_src emacs-lisp +(defvar azos/tab-bar/right-update-group '() + "Functions needed to run to update tab bar") + +(defvar azos/tab-bar/right-group '() + "A list of items to be displayed on the right of the tab-bar") + +(defun azos/tab-bar/right-group-func () + "Function that returns a string to be displayed on right of tab-bar" + (concat + tab-bar-separator + (mapconcat 'eval + (remove "" + (mapcar 'funcall azos/tab-bar/right-group)) + tab-bar-separator) + tab-bar-separator)) + +(defun azos/tab-bar/update-func () "Function to update the tab bar" + (progn + (mapc 'funcall azos/tab-bar/right-update-group) + (force-mode-line-update))) + +(if (version<= "28.1" emacs-version) (progn + (setq tab-bar-format + '( + tab-bar-format-history + tab-bar-format-tabs + tab-bar-separator + tab-bar-format-add-tab + tab-bar-format-align-right + azos/tab-bar/right-group-func) + tab-bar-auto-width nil) + (define-key azos/global-minor-mode/keymap + (kbd "M-n") 'tab-switch) + ;; (if (member system-type '(gnu gnu/linux)) + ;; (azos/run-timer 'tab-timer 'azos/tab-bar/update-func 5)) + ;; No auto-update, maybe some other way +)) +#+end_src + +Let's define a clock for the tab bar + +#+begin_src emacs-lisp +(defun azos/tab-bar/get-clock-string () "Get tab bar time string" + (propertize (format-time-string "%a, %b %d %H:%M") + 'face '(:background "LightYellow3" :foreground "DarkSlateGrey"))) + +(defun azos/tab-bar/enable-clock-display () + "Enables clock display in tab bar" + (cl-pushnew 'azos/tab-bar/get-clock-string + azos/tab-bar/right-group)) +#+end_src + +By default let's enable the clock display + +#+begin_src emacs-lisp +(azos/tab-bar/enable-clock-display) +#+end_src + +*** Tab bar addons +**** Battery status in tab bar + +#+begin_src emacs-lisp +(defun azos/bat/get-stats () "Gets battery statistics. First value returned +is battery percentage, second one is t if charging" + (let* ((commandout (string-clean-whitespace (shell-command-to-string + "upower -i /org/freedesktop/UPower/devices/DisplayDevice")))) + (list + (string-to-number (progn + (string-match "\\(?:percentage\\:\s+\\)\\([0-9]+\\)" commandout) + (match-string 1 commandout))) + (progn + (string-match "\\(?:state\\:\s+\\)\\([^\s]+\\)" commandout) + (match-string 1 commandout))) + )) + +(defvar azos/bat/status-string nil "Holds battery string") + +(defun azos/bat/set-status-string () "Sets battery-string" + (let* ((bat-stats (azos/bat/get-stats)) + (bat-charge-state (nth 1 bat-stats)) + (bat-percentage-number + (if (string= bat-charge-state "fully-charged") 100 + (nth 0 bat-stats))) + (bat-color (if (<= bat-percentage-number 10) "red3" + (if (<= bat-percentage-number 20) "DarkOrange" + "DarkSlateGrey"))) + (bat-weight (if (<= bat-percentage-number 20) 'bold 'normal)) + (bat-charge-symbol (if (string= bat-charge-state "charging") "↑" + (if (string= bat-charge-state "fully-charged") "◼" "↓")))) + (setq azos/bat/status-string + (concat + "⚡" bat-charge-symbol " " + (propertize (format "%3d" bat-percentage-number) + 'face (list :foreground bat-color + :box (list :color "DarkSlateGrey"))))))) + +(defun azos/bat/get-status-string () "Get battery string" + (if azos/bat/status-string azos/bat/status-string "")) + +(defun azos/bat/enable-tab-display () + "Enables battery display in tab bar" + (progn + (cl-pushnew 'azos/bat/get-status-string azos/tab-bar/right-group) + (cl-pushnew 'azos/bat/set-status-string azos/tab-bar/right-update-group) + )) +#+end_src + +**** Network status in tab bar + +Code to check for internet connection: + +https://emacs.stackexchange.com/questions/7653/elisp-code-to-check-for-internet-connection + +#+begin_src emacs-lisp +(defvar azos/network/status-string nil "Holds network status string") + +(defun azos/network/get-status-string () "Gets the network status string" + (if azos/network/status-string azos/network/status-string "")) + +(defun azos/network/set-status-string-sentinel (process event) + "Sets the network string based on proc run" + (setq azos/network/status-string + (concat + "↹ " + (if (= 0 (process-exit-status process)) + (propertize "✓" 'face + (list :foreground "green3" + :background "LightYellow3" + :box (list :color "DarkSlateGrey"))) + (propertize "X" 'face + (list :foreground "red3" + :background "LightYellow3" + :box (list :color "DarkSlateGrey"))))))) + +(defun azos/network/start-test-proc () "Tests whether internet" + (interactive) + (set-process-sentinel + (start-process "wget" nil "wget" "--spider" "--timeout=1" + "www.google.com") 'azos/network/set-status-string-sentinel)) + +(defun azos/network/enable-tab-display () + "Enables network display in tab bar" + (progn + (cl-pushnew 'azos/network/get-status-string + azos/tab-bar/right-group) + (cl-pushnew 'azos/network/start-test-proc + azos/tab-bar/right-update-group) + )) +#+end_src + *** Easy Prompt #+begin_src emacs-lisp @@ -898,9 +1112,216 @@ Taken from: https://github.com/emacs-evil/evil/issues/1288 :around #'azos/org/evil-org-insert-state-in-edit-buffer) #+end_src +*** Fonts + +Fonts + +#+begin_src emacs-lisp +;; (set-face-attribute 'org-document-title nil :height 200 :underline t) +#+end_src + +*** Inline images + +#+begin_src emacs-lisp +(setq org-startup-with-inline-images t) + +(defun azos/org/shk-fix-inline-images () + (when org-inline-image-overlays + (org-redisplay-inline-images))) + +(with-eval-after-load 'org + (add-hook 'org-babel-after-execute-hook 'azos/org/shk-fix-inline-images)) +#+end_src + +*** Snippets + +Want to create snippets for latex insertion. +There is one template for inline and one template for standalone latex snippets. +Each template is defind by two templates. One for other langauges and one for standard +input. This is done to toggle back to the original language once done with the +function toggle-input-method. + +#+begin_src emacs-lisp +(defun azos/org/toggle-input-method () + (if current-input-method (toggle-input-method)) +) +;Inline +(add-hook 'org-mode-hook (lambda () (progn + (yas-define-snippets 'org-mode (list (list + nil + "\$$1\$$0" + "ORG_LATEX_INLINE_SNIPPET_ENG" + '(not (eval current-input-method)) + nil + nil + nil + "C-l" + nil + nil + ))) + + (yas-define-snippets 'org-mode (list (list + nil + "\$$1\$$0" + "ORG_LATEX_INLINE_SNIPPET_OTHER_LANG" + '(eval current-input-method) + nil + '((unused (azos/org/toggle-input-method)) + (yas-after-exit-snippet-hook 'toggle-input-method)) + nil + "C-l" + nil + nil + ))) + + ;Not inline + (yas-define-snippets 'org-mode (list (list + nil + "\$\$$1\$\$$0" + "ORG_LATEX_OUTLINE_SNIPPET_ENG" + '(not (eval current-input-method)) + nil + nil + nil + "C-S-l" + nil + nil + ))) + (yas-define-snippets 'org-mode (list (list + nil + "\$\$$1\$\$$0" + "ORG_LATEX_OUTLINE_SNIPPET_OTHER_LANG" + '(eval current-input-method) + nil + '((unused (azos/org/toggle-input-method)) + (yas-after-exit-snippet-hook 'toggle-input-method)) + nil + "C-S-l" + nil + nil + ))) + ))) +#+end_src + +Snippet for src blocks + +#+begin_src emacs-lisp +(add-hook 'org-mode-hook (lambda () (progn + (yas-define-snippets 'org-mode (list (list + nil + "#+begin_src $1\n$0\n#+end_src" + "ORG_SRC_BLOCK" + nil + nil + nil + nil + "C-c i b" + nil + nil + ))) + + (yas-define-snippets 'org-mode (list (list + nil + (concat + "#+begin_export latex\n" + "\\begin{english}\n" + "#+end_export\n" + "#+begin_src $1\n" + "$0\n#+end_src\n" + "#+begin_export latex\n" + "\\end{english}\n" + "#+end_export") + "ORG_SRC_ENGLISH_BLOCK" + nil + nil + nil + nil + "C-c i B" + nil + nil + ))) +))) +#+end_src + +*** Imenu quirks + +#+begin_src emacs-lisp +(add-to-list 'org-show-context-detail '(isearch . tree)) +(add-to-list 'org-show-context-detail '(default . tree)) +#+end_src + +** Ibuffer + +#+begin_src emacs-lisp +(evil-collection-ibuffer-setup) +(define-key azos/global-minor-mode/keymap + (kbd "C-x C-b") 'ibuffer) +#+end_src + +** Dashboard + +#+begin_src emacs-lisp +(setq inhibit-startup-screen t) +(use-package dashboard + :config + (add-hook 'after-init-hook + (lambda () (dashboard-insert-startupify-lists))) + (add-hook 'emacs-startup-hook (lambda () + (switch-to-buffer dashboard-buffer-name) + (goto-char (point-min)) + (redisplay) + (run-hooks 'dashboard-after-initialize-hook))) + (add-to-list 'evil-emacs-state-modes 'dashboard-mode) + (setq dashboard-items '((recents . 5) + (bookmarks . 5) + (projects . 5)) + dashboard-center-content t + dashboard-banner-logo-title nil + dashboard-set-init-info nil + dashboard-set-footer nil + dashboard-startup-banner 'ascii + dashboard-banner-ascii "azos")) +#+end_src + +** VTerm + +#+begin_src emacs-lisp +;; (use-package xterm-color :ensure t) +;; (use-package eterm-256color :ensure t +;; :config +;; (add-hook 'term-mode-hook #'eterm-256color-mode) +;; (add-hook 'vterm-mode-hook #'eterm-256color-mode) +;; ) +#+end_src + +#+begin_src emacs-lisp +(use-package vterm + :if (member system-type '(gnu gnu/linux)) + :config + (add-hook 'vterm-mode-hook + (lambda () (setq-local global-hl-line-mode nil))) + + (evil-collection-define-key 'normal 'vterm-mode-map + (kbd "p") 'vterm-yank) + (setq vterm-timer-delay 0.01 + vterm-term-environment-variable "xterm-256color")) +#+end_src + +** Boomkark + +#+begin_src emacs-lisp +(use-package bookmark + :straight + (:type built-in) + :config + (evil-collection-bookmark-setup) +) +#+end_src + * Provide #+begin_src emacs-lisp (provide 'azos-emacs-base) +(add-hook 'after-init-hook (lambda () (require 'azos-emacs-base))) #+end_src diff --git a/pkgs/elisp/azos-emacs-dev.org b/pkgs/elisp/azos-emacs-dev.org index adc09ea..dded346 100644 --- a/pkgs/elisp/azos-emacs-dev.org +++ b/pkgs/elisp/azos-emacs-dev.org @@ -110,6 +110,12 @@ Integration with flycheck (kbd "r p") 'run-python) #+end_src +*** org src block + +#+begin_src emacs-lisp +(setq org-babel-python-command "python3") +#+end_src + ** Rust #+begin_src emacs-lisp @@ -127,8 +133,33 @@ Integration with flycheck (define-key ein:notebook-mode-map (kbd "C-c C-k") nil))))) #+end_src +** Python + +*** Python version for ORG + +#+begin_src emacs-lisp +(require 'ob) +(setq org-babel-python-command "python3") +#+end_src + +* ORG + +** Async blocks + +#+begin_src emacs-lisp +(use-package ob-async + :config + ;Setting command of async blocks to Python3 + (add-hook 'ob-async-pre-execute-src-block-hook + '(lambda () + (setq org-babel-python-command "python3") + )) +) +#+end_src + * Provide #+begin_src emacs-lisp (provide 'azos-emacs-dev) +(add-hook 'after-init-hook (lambda () (require 'azos-emacs-dev))) #+end_src diff --git a/pkgs/elisp/azos-emacs-editor.org b/pkgs/elisp/azos-emacs-editor.org index a9ee4e6..bec0cc5 100644 --- a/pkgs/elisp/azos-emacs-editor.org +++ b/pkgs/elisp/azos-emacs-editor.org @@ -28,7 +28,7 @@ Binding to startup is 'C-c /' ** Graphviz #+begin_src emacs-lisp -(use-package graphviz-dot) +(use-package graphviz-dot-mode) #+end_src ** Markdown @@ -86,20 +86,15 @@ Creating classes (defvar anerenv/latex-class-common-header "[DEFAULT-PACKAGES] \\usepackage{polyglossia} -\\usepackage{tabularx} \\usepackage[cache=false]{minted} \\usepackage{xcolor} -\\usepackage{indentfirst} \\usepackage{amsfonts} \\usepackage{transparent} \\usepackage{amsmath} -\\usepackage{braket} -\\usepackage{dsfont} \\definecolor{codebg}{rgb}{0.95,0.95,0.95} \\setdefaultlanguage{english} \\setlength{\\parindent}{0in} - \\DeclareMathOperator*{\\argmax}{arg\\,max} \\DeclareMathOperator*{\\argmin}{arg\\,min} \\newfontfamily\\hebrewfont{LiberationSans}[Script=Hebrew] @@ -174,8 +169,78 @@ Comments: (format-time-string "-%Y-%m-%d-%H%M%S") ".docx"))) #+end_src +** Latex previews + +We don't want to create ltximg directories all over the place. +Let's store all ltximg previews in tmp directory. + +Latex scaling from + +https://karthinks.com/software/scaling-latex-previews-in-emacs/ + +#+begin_src emacs-lisp +(setq org-format-latex-header + "\\documentclass{article} +\\usepackage[usenames]{color} +[PACKAGES] +[DEFAULT-PACKAGES] +\\pagestyle{empty} % do not remove +% The settings below are copied from fullpage.sty +\\setlength{\\textwidth}{\\paperwidth} +\\addtolength{\\textwidth}{-3cm} +\\setlength{\\oddsidemargin}{1.5cm} +\\addtolength{\\oddsidemargin}{-2.54cm} +\\setlength{\\evensidemargin}{\\oddsidemargin} +\\setlength{\\textheight}{\\paperheight} +\\addtolength{\\textheight}{-\\headheight} +\\addtolength{\\textheight}{-\\headsep} +\\addtolength{\\textheight}{-\\footskip} +\\addtolength{\\textheight}{-3cm} +\\setlength{\\topmargin}{1.5cm} +\\addtolength{\\topmargin}{-2.54cm} +\\DeclareMathOperator*{\\argmax}{arg\\,max} +\\DeclareMathOperator*{\\argmin}{arg\\,min}" + ) + +(setq org-preview-latex-image-directory (concat user-emacs-directory "ltximg/")) + +(setq org-latex-create-formula-image-program 'dvisvgm) + +(setq org-format-latex-options (plist-put org-format-latex-options :scale 1)) +#+end_src + +** Presentation + +#+begin_src emacs-lisp +(use-package org-present + :config + (add-hook 'org-present-mode-hook (lambda () + (evil-emacs-state) + (blink-cursor-mode 0) + (org-present-big) + (org-display-inline-images) + (org-present-read-only) + (setq-local global-hl-line-mode nil) + (org-present-hide-cursor) + (olivetti-mode 1) + (display-line-numbers-mode 0))) + + (add-hook 'org-present-mode-quit-hook (lambda () + (org-present-small) + (blink-cursor-mode 1) + (org-remove-inline-images) + (org-present-show-cursor) + (org-present-read-write) + (evil-normal-state) + (setq-local global-hl-line-mode 1) + (olivetti-mode 0) + (display-line-numbers-mode 1))) +) +#+end_src + * Provide #+begin_src emacs-lisp (provide 'azos-emacs-editor) +(add-hook 'after-init-hook (lambda () (require 'azos-emacs-editor))) #+end_src diff --git a/pkgs/elisp/azos-emacs-exwm.org b/pkgs/elisp/azos-emacs-exwm.org new file mode 100644 index 0000000..88e76fc --- /dev/null +++ b/pkgs/elisp/azos-emacs-exwm.org @@ -0,0 +1,376 @@ +#+title: Aner's Emacs EXWM Configuration +#+property: header-args :results silent + +* Base setup +** Require + +#+begin_src emacs-lisp +(require 'azos-emacs-station) +(require 'azos-emacs-base) +#+end_src + +* EXWM + +We execute the following code only if started with EXWM argument + +** EXWM Setup + +#+begin_src emacs-lisp +(defvar azos/exwm/load-hook nil "Load EXWM hook") + +(defun azos/exwm/load-exwm (switch) "Loads EXWM" + (use-package exwm + :ensure t + :config + (require 'exwm) + (require 'exwm-randr) + ;Workspaces + (setq exwm-workspace-number 4 + exwm-layout-show-all-buffers t + exwm-workspace-show-all-buffers t) + ;System tray + (require 'exwm-systemtray) + (setq exwm-systemtray-background-color "LightYellow3") + (exwm-systemtray-enable) + + ;In EXWM mode, no evil + (add-to-list 'evil-emacs-state-modes 'exwm-mode) + (run-hooks 'azos/exwm/load-hook) + + ;Enable + (exwm-randr-enable) + (exwm-enable) + )) +#+end_src + +** Smart buffer naming + +#+begin_src emacs-lisp +(add-hook 'azos/exwm/load-hook (lambda () (progn + +(add-hook 'exwm-update-class-hook + (lambda () + (unless (or (string-prefix-p "sun-awt-X11-" exwm-instance-name) + (string= "gimp" exwm-instance-name)) + (string-prefix-p "qute" exwm-instance-name) + (exwm-workspace-rename-buffer exwm-class-name)))) + +(add-hook 'exwm-update-title-hook + (lambda () + (when (or (not exwm-instance-name) + (string-prefix-p "sun-awt-X11-" exwm-instance-name) + (string-prefix-p "qute" exwm-instance-name) + (string= "gimp" exwm-instance-name)) + (exwm-workspace-rename-buffer exwm-title)))) + +(add-hook 'exwm-update-class-hook + (lambda () + (when (or (not exwm-instance-name) + (string-prefix-p "mpv" exwm-class-name)) + (exwm-workspace-rename-buffer (concat "mpv | " exwm-title))))) + +))) +#+end_src + +** Basic keybindings + +Global keybindings can be defined with `exwm-input-global-keys'. +Here are a few examples: +#+begin_src emacs-lisp +(add-hook 'azos/exwm/load-hook (lambda () + (setq exwm-input-global-keys + `( + ;; Bind "s-" to "slock", a simple X display locker. + ([s-f2] . (lambda () + (interactive) + (start-process "" nil "/usr/bin/slock"))) + ([s-] . persp-switch) + ;; Bind "s-r" to exit char-mode and fullscreen mode. + ([?\s-r] . exwm-reset) + ;; Bind "s-w" to switch workspace interactively. + ([?\s-w] . exwm-workspace-switch) + ;; Bind "s-0" to "s-9" to switch to a workspace by its index. + ,@(mapcar (lambda (i) + `(,(kbd (format "s-%d" i)) . + (lambda () + (interactive) + (exwm-workspace-switch-create ,i)))) + (number-sequence 0 9)) + ;; Bind "s-&" to launch applications ('M-&' also works if the output + ;; buffer does not bother you). + ([?\s-&] . (lambda (command) + (interactive (list (read-shell-command "$ "))) + (start-process-shell-command command nil command))) + )))) + +(defun azos/exwm/take-screenshot () + (interactive) + (shell-command "flameshot gui") +) + +(defun azos/exwm/start-qutebrowser () + (interactive) + (start-process "qutebrowser" nil "qutebrowser")) + +(add-hook 'azos/exwm/load-hook (lambda () (progn + (define-key azos/global-minor-mode/open-keymap + (kbd "q") 'azos/exwm/start-qutebrowser) + (define-key azos/global-minor-mode/keymap + (kbd "") 'azos/exwm/take-screenshot)))) +#+end_src + +** Better modeline + +This currently does nothing and I am not sure why. + +#+begin_src emacs-lisp +(defvar azos/exwm/modeline-hash-table (make-hash-table) + "Table to store relative face change cookies in") + +(defface azos/exwm/modeline-remap-style + (list (list t (list :background azos/evil-color-insert))) + "Make the backgrounds pop to green") + +(defun azos/exwm/input-mode-modeline () "Changes modeline based on input mode" + (let ((currbuff (current-buffer))) + (if (eq exwm--input-mode 'char-mode) + ;;line + (let ((remap-cookie (gethash currbuff + azos/exwm/modeline-hash-table))) + (if remap-cookie + (progn + (face-remap-remove-relative remap-cookie) + (remhash currbuff + azos/exwm/modeline-hash-table)))) + ;;char + (puthash + currbuff + (face-remap-add-relative 'mode-line + 'azos/exwm/modeline-remap-style) + azos/exwm/modeline-hash-table) + ))) +(add-hook 'exwm-input-input-mode-change-hook 'azos/exwm/input-mode-modeline) +;; (set-face-attribute 'mode-line nil :box nil :background "AliceBlue") +;; (set-face-attribute 'mode-line-inactive nil :box nil :background "LightYellow3") +#+end_src + +** RANDR screen settings + +Enabling randr. Automatic mapping of randr screens to workspaces. + +#+begin_src emacs-lisp +(defun azos/exwm/get-monitor-list () + (mapcar (lambda (x) (match-string (string-match "^[A-Za-z]+-*[0-9]+" x) x)) + (azos/re-seq "^[A-Za-z]+-*[0-9]+ connected" + (shell-command-to-string "xrandr")))) + +(defun azos/exwm/add-indexes (list) + (azos/exwm/add-indexes-i list 1) +) + +(defun azos/exwm/add-indexes-i (list i) + (if list + (cons i (cons (car list) (azos/exwm/add-indexes-i (cdr list) (+ i 1)))) + nil)) + +(defun azos/exwm/update-randr-monitor-plist () + (interactive) + (progn + (start-process + "xlayoutdisplay" nil "xlayoutdisplay") + (setq exwm-randr-workspace-monitor-plist + (azos/exwm/add-indexes (azos/exwm/get-monitor-list))) + (exwm-randr-refresh)) + ) + +(add-hook 'azos/exwm/load-hook (lambda () (progn + (add-hook 'exwm-randr-screen-change-hook + 'azos/exwm/update-randr-monitor-plist) + + (define-key azos/global-minor-mode/keymap + (kbd "s-x") 'azos/exwm/update-randr-monitor-plist)))) +#+end_src + +** Prefix keys + +Sending simulated keys to X windows +#+begin_src emacs-lisp +(add-hook 'azos/exwm/load-hook (lambda () (progn + (setq exwm-input-prefix-keys + '(?\C-x ?\C-u ?\C-h ?\M-x ?\M-& ?\M-: ?\s-d + ?\s-m ?\s-r ?\s-s ?\s-q ?\H-l ?\C-w))))) +#+end_src + +** Desktop environment + +#+begin_src emacs-lisp +(use-package desktop-environment :after exwm) +#+end_src + +** Bluetooth + +#+begin_src emacs-lisp +(use-package bluetooth :after exwm) +#+end_src + +** Pulse + +#+begin_src emacs-lisp +(use-package pulseaudio-control :after exwm) +#+end_src + +** TODO Dunst + +Used to have to run a service 'dunst'. Don't do that now, handled by OS. + +** TODO Flameshot + +Also Flameshot + +** Media keys + +https://gist.github.com/ajyoon/5323b999a01dce8db2d4456da1740fe3 + +#+begin_src emacs-lisp +(add-hook 'azos/exwm/load-hook (lambda () (progn + (dolist (k '(XF86AudioLowerVolume + XF86AudioRaiseVolume + XF86AudioPlay + XF86AudioStop + XF86AudioPrev + XF86AudioNext)) + (push k exwm-input-prefix-keys)) + +(exwm-input-set-key + (kbd "") + (lambda () + (interactive) (start-process + "pactl" nil "pactl" "set-sink-volume" "0" "+5%"))) +(exwm-input-set-key + (kbd "") + (lambda () + (interactive) (start-process + "pactl" nil "pactl" "set-sink-volume" "0" "-5%"))) + +(exwm-input-set-key + (kbd "") + (lambda () + (interactive) (start-process + "pactl" nil "pactl" "set-sink-mute" "0" "toggle"))) + +(exwm-input-set-key + (kbd "") + 'desktop-environment-toggle-music) + +(exwm-input-set-key + (kbd "") + 'desktop-environment-music-next) + +(exwm-input-set-key + (kbd "") + 'desktop-environment-music-previous) + +(exwm-input-set-key + (kbd "") + 'desktop-environment-music-stop) + +(exwm-input-set-key + (kbd "") + 'desktop-environment-toggle-music) + +(exwm-input-set-key + (kbd "") + (lambda () + (interactive) (start-process + "light" nil "light" "-A" "5"))) + +(exwm-input-set-key + (kbd "") + (lambda () + (interactive) (start-process + "light" nil "light" "-U" "5"))))) +#+end_src + +In the event =xbacklight= doesn't work, the following command can be run: + +#+begin_example +xrandr --output eDP1 --brightness 0.5 +#+end_example + +** TODO Input languages + +#+begin_src emacs-lisp +(defun azos/exwm/enable-heb () + (interactive) + (start-process-shell-command "heb" nil + "setxkbmap -layout us,il && setxkbmap -option 'grp:alt_shift_toggle'")) + ()) +(add-hook 'azos/exwm/load-hook 'azos/exwm/enable-heb) +#+end_src + +I think this can be handled by OS + +** Dedicated processes + +We'd want to be able to quickly map processes (Spotify, etc.) to +keybindings, and have dedicated buffers for them (so they don't reopen). + +We first define variables to be used later, and a function that checks, for each +new process, should it be displayed in a new buffer/tab. + +#+begin_src emacs-lisp +(defvar azos/exwm/startproc-regex-buffname-list nil + "Match between buffer and tab.") +(defun azos/exwm/startproc-check-for-buff-entry () + "On new buffer, check if requested to display differently" + (let ((entry (cdr (car (seq-filter + (lambda (e) (string-match (car e) (buffer-name))) + azos/exwm/startproc-regex-buffname-list + ))))) + (if entry + (let ((rn (nth 0 entry)) (tn (nth 1 entry)) (buff (current-buffer))) + ;; Too much complication for renaming + ;; (if requested-name (rename-buffer requested-name)) + (progn + (if tn (tab-bar-switch-to-tab tn)) + (switch-to-buffer buff) + ))))) + +(add-hook 'exwm-manage-finish-hook 'azos/exwm/startproc-check-for-buff-entry) +#+end_src + +#+begin_src emacs-lisp +(defun azos/exwm/start-proc-dedicated + (name tab-name procregex proc &rest args) + (let ((buff (car (seq-filter (lambda (b +) + (string-match procregex (buffer-name b))) + (buffer-list))))) + (if buff + ;; Found buffer, display + (progn + (if tab-name (tab-bar-switch-to-tab tab-name)) + (switch-to-buffer buff) + ) + ;;No known buffer, add entry to alist + (let ((new-entry `(,procregex ,tab-name ,name))) (progn + (add-to-list 'azos/exwm/startproc-regex-buffname-list + new-entry) + (apply 'start-process name nil proc + args)))))) +#+end_src + +** EXWM Ending + +End the execute only if EXWM block. + +#+begin_src emacs-lisp +(add-to-list 'command-switch-alist '("--start-exwm" . azos/exwm/load-exwm)) +#+end_src + +* Provide + +#+begin_src emacs-lisp +(provide 'azos-emacs-exwm) +(add-hook 'after-init-hook (lambda () (require 'azos-emacs-exwm))) +#+end_src diff --git a/pkgs/elisp/azos-emacs-station.org b/pkgs/elisp/azos-emacs-station.org new file mode 100644 index 0000000..6e6f4ba --- /dev/null +++ b/pkgs/elisp/azos-emacs-station.org @@ -0,0 +1,300 @@ +#+title: Aner's Emacs Station Configuration +#+property: header-args :results silent + +* Base setup +** Require + +#+begin_src emacs-lisp +(require 'azos-emacs-base) +#+end_src + +* Major modes + +** Mail + +*** General instructions + +Due to the fact that setting up email in general is complicated, I'll recap the process here. + +Before ANYTHING, setup pass. + +https://wiki.archlinux.org/title/Pass + +Initialize password + +Then for gmail, used + +#+begin_src bash :results none :exports code +pass init +pass insert gmail.com/ +#+end_src + +It prompted for password, I put it in. + +Then setup mbsync properly. The ansible files already take care of that. + +Then we setup ~/.mbsyncrc. This file is important and is not linked to repository for security reasons. + +https://wiki.archlinux.org/title/isync + +Wrote mbsyncrc + + +Created all directories + +Went into gmail settings to allow less secure things. + +https://notmuchmail.org/getting-started/ + +We then RUN notmuch, and notmuch setup for prompt. + +Adding emails can be done with notmuch new + +*** Config + +#+begin_src emacs-lisp +;; (defvar azos/mail/sync-list nil "List of functions with args to sync mail") + +;; (defun azos/mail/lieer-sync-func-str (maildir) +;; (concat "cd " maildir " && gmi sync -s")) + +;; (defun azos/mail/mbsync-func-str () +;; "mbsync -a") + +;; (defun azos/mail/pre-sync-func-str () +;; (concat (mapconcat 'eval (mapcar 'apply azos/mail/sync-list) " &\n") +;; "\nwait\n")) + +;; (defun azos/mail/sync-notify () (interactive) +;; (let ((command (concat (azos/mail/pre-sync-func-str) +;; "{ if [[ $(notmuch new | grep \"No new mail\") ]]; " +;; "then dunstify -u low \"Synced mail\" ; " +;; "else dunstify \"New mail!\" ; fi ; } || " +;; "dunstify -u critical \"Error syncing mail\""))) +;; (start-process-shell-command "mailsync" "*mailsync*" command))) + +;; (defun azos/mail/sync-n-notify () +;; (let ((command (concat (azos/mail/pre-sync-func-str) +;; "{ if [[ $(notmuch new | grep \"No new mail\") ]]; " +;; "then : ; " +;; "else dunstify \"New mail!\" ; fi ; } || " +;; "dunstify -u critical \"Error syncing mail\""))) +;; (start-process-shell-command "mailsync" "*mailsync*" command))) + +;; (defun azos/mail/set-sync-list (sync-list) +;; "Set list of mails and start timer" +;; (progn +;; (setq azos/mail/sync-list sync-list))) +;; ; (azos/run-timer 'mail-sync 'azos/mail/sync-n-notify (* 60 10)))) + +(use-package notmuch + :straight (:type built-in) + :init + (setq-default + notmuch-hello-sections + '(notmuch-hello-insert-saved-searches + notmuch-hello-insert-alltags) + notmuch-always-prompt-for-sender t + message-sendmail-envelope-from 'header) + :config + (evil-collection-notmuch-setup) + (add-hook 'notmuch-show-mode 'azos/default-variable-pitch) + (setq send-mail-function 'sendmail-send-it + notmuch-search-oldest-first nil + message-cite-style message-cite-style-gmail + message-citation-line-function + 'message-insert-formatted-citation-line) + (defun azos/notmuch-archive () "Archive a message" (interactive) + (progn + (evil-collection-notmuch-toggle-tag "arx" "search" 'ignore) + (evil-collection-notmuch-toggle-tag "inbox" "search" + 'notmuch-search-next-thread) + )) + (defun azos/notmuch-keep () "Mark important message for keeps" (interactive) + (progn + (evil-collection-notmuch-toggle-tag "keep" "search" + 'notmuch-search-next-thread))) + + (defun azos/notmuch-delete-gmail () "Delete a message, no inbox" + (interactive) + (progn + (evil-collection-notmuch-toggle-tag "deleted" "search" 'ignore) + (evil-collection-notmuch-toggle-tag "trash" "search" 'ignore) + (evil-collection-notmuch-toggle-tag "inbox" "search" + 'notmuch-search-next-thread))) + + (defun azos/notmuch-toggle-inbox () "Toggles inbox tag" (interactive) + (evil-collection-notmuch-toggle-tag "inbox" "search" 'ignore)) + + (dolist (state '(normal visual)) + (evil-collection-define-key state 'notmuch-search-mode-map + "d" 'azos/notmuch-delete-gmail + "I" 'azos/notmuch-toggle-inbox + "D" 'evil-collection-notmuch-search-toggle-delete + "A" 'azos/notmuch-archive + "K" 'azos/notmuch-keep)) + (evil-collection-define-key 'normal 'notmuch-show-mode-map + (kbd "M-j") nil + (kbd "K") nil + (kbd "M-k") nil) + + :bind + (:map azos/global-minor-mode/open-keymap + ("m" . notmuch)) +) +#+end_src + +Run this command to make sendmail use the right thing + +#+begin_src bash :results none :exports code +sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail +#+end_src + +Then we go to + +https://wiki.archlinux.org/title/isync + +We will do this manually. + +*** Signatures + +Taken from + +https://emacs.stackexchange.com/questions/27759/do-not-automatically-sign-emails-directed-to-mailing-lists-and-such + +Thanks to Dan of Stackoverflow. + +#+begin_src emacs-lisp +(defvar azos/mail/blacklist-addresses nil + "List of email addresses (as strings) to blacklist for + `mml-secure-message-sign'.") + +(defun azos/mail/secure-sign-maybe () + "Use `mml-secure-message-sign' unless the addressee is in the +`azos/mail/blacklist-addresses'." + (let ((addresses (mapcar (lambda (address) + (when (string-match + "\\( ]+\\)\\(>?\\)" + address) + (match-string 2 address))) + ;; (split-string (message-field-value "To") + ;; "," t "[[:blank:]]+")))) + (split-string (concat (message-field-value "To") + ", " + (message-field-value "Cc")) + "," t "[[:blank:]]+")))) + ;; skip secure signing when an address is blacklisted + (unless (delq nil (mapcar (lambda (address) + (car (member address azos/mail/blacklist-addresses))) + addresses)) + (mml-secure-message-sign)))) +#+end_src + +** Elfeed + +MPV from https://www.reddit.com/r/emacs/comments/7usz5q/youtube_subscriptions_using_elfeed_mpv_no_browser/ + +https://medium.com/emacs/using-elfeed-to-view-videos-6dfc798e51e6 + +#+begin_src emacs-lisp +(use-package elfeed + :init + (defun azos/elfeed/v-mpv (url) + "Watch a video from URL in MPV" + (start-process "mpv" nil "mpv" url)) + + (defun azos/elfeed/view-mpv (&optional use-generic-p) + "Youtube-feed link" + (interactive "P") + (let ((entries (elfeed-search-selected))) + (cl-loop for entry in entries + do (elfeed-untag entry 'unread) + when (elfeed-entry-link entry) + do (azos/elfeed/v-mpv it)) + (mapc #'elfeed-search-update-entry entries))) + + (defun slurp (f) + (with-temp-buffer + (insert-file-contents f) + (buffer-substring-no-properties + (point-min) + (point-max)))) + + (setq-default elfeed-search-filter "@3-days-ago") + :config + (evil-collection-elfeed-setup) +) +#+end_src + +*** Elfeed tube + +https://github.com/karthink/elfeed-tube + +#+begin_src emacs-lisp +(use-package elfeed-tube + :ensure t ;; or :straight t + :after elfeed + :demand t + :config + ;; (setq elfeed-tube-auto-save-p nil) ; default value + ;; (setq elfeed-tube-auto-fetch-p t) ; default value + (elfeed-tube-setup) + + :bind (:map elfeed-show-mode-map + ("F" . elfeed-tube-fetch) + ([remap save-buffer] . elfeed-tube-save) + :map elfeed-search-mode-map + ("F" . elfeed-tube-fetch) + ([remap save-buffer] . elfeed-tube-save))) + +(use-package elfeed-tube-mpv + :ensure t ;; or :straight t + :after elfeed-tube + :bind (:map elfeed-show-mode-map + ("C-c C-f" . elfeed-tube-mpv-follow-mode) + ("C-c C-w" . elfeed-tube-mpv-where))) +#+end_src + +** Pass + +#+begin_src emacs-lisp +(use-package pass + :bind + (:map azos/global-minor-mode/open-keymap + ("p" . 'password-store-copy))) +#+end_src + +** Calendar + +#+begin_src emacs-lisp +(evil-collection-calendar-setup) +#+end_src + +** OpenSCAD + +#+begin_src emacs-lisp +(use-package scad-mode) + +; Disabling for now +;; (use-package scad-preview +;; :straight '( +;; scad-preview +;; :type git +;; :host github +;; :repo "zk-phi/scad-preview")) +#+end_src + +** Kubernetes + +#+begin_src emacs-lisp +(use-package kubernetes + :ensure t + :commands (kubernetes-overview)) +#+end_src + +* Provide + +#+begin_src emacs-lisp +(provide 'azos-emacs-station) +(add-hook 'after-init-hook (lambda () (require 'azos-emacs-station))) +#+end_src diff --git a/shells/debugTex/default.nix b/shells/debugTex/default.nix new file mode 100644 index 0000000..0e57984 --- /dev/null +++ b/shells/debugTex/default.nix @@ -0,0 +1,12 @@ +{ pkgs } @ args : +let + testfile = builtins.readfile ./test.org; +in +pkgs.mkShell { + name = "tex-debug"; + buildInputs = [ + pkgs.azos.tex + # ((pkgs.emacsPackagesFor pkgs.emacs).emacsWithPackages ( + # pkgs.azos.emacs.editor)) + ]; +} diff --git a/shells/debugTex/test.org b/shells/debugTex/test.org new file mode 100644 index 0000000..b711bd6 --- /dev/null +++ b/shells/debugTex/test.org @@ -0,0 +1,40 @@ +# -*- org-export-babel-evaluate: nil -*- +#+Title: Test ORG file +#+Author: Aner Zakobar +#+latex_class: article +#+latex_header_extra: \setotherlanguage{hebrew} + +* Test equation + +$$\mathbb{E}[\max(X_i - \mathbb{E}(X_i))] \geq \frac{\sqrt{p}}{3}\sqrt{\frac{\log N}{n}}\cdot\left(1 - \frac{1}{e}\right)$$ + +* Header + +** Test code + +#+begin_src python :results output +def a(b): + print(b) + +a(3) +#+end_src + +#+RESULTS: +: 3 + +* Test Hebrew + +#+begin_export latex +\begin{hebrew} +#+end_export + +אני מקווה שזה עובד. + +#+begin_export latex +\end{hebrew} +#+end_export + +** More stuff + +Done! + diff --git a/shells/debugTex/test.tex b/shells/debugTex/test.tex new file mode 100644 index 0000000..436b764 --- /dev/null +++ b/shells/debugTex/test.tex @@ -0,0 +1,94 @@ +% Created 2024-09-09 Mon 10:39 +% Intended LaTeX compiler: pdflatex +\documentclass{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{graphicx} +\usepackage{longtable} +\usepackage{wrapfig} +\usepackage{rotating} +\usepackage[normalem]{ulem} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{capt-of} +\usepackage{hyperref} +\usepackage{polyglossia} +\usepackage{tabularx} +\usepackage[cache=false]{minted} +\usepackage{xcolor} +\usepackage{amsfonts} +\usepackage{transparent} +\usepackage{amsmath} +\definecolor{codebg}{rgb}{0.95,0.95,0.95} +\setdefaultlanguage{english} +\setlength{\parindent}{0in} + + +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} +\newfontfamily\hebrewfont{LiberationSans}[Script=Hebrew] +\newfontfamily\hebrewfonttt{LiberationSans}[Script=Hebrew] +\newfontfamily\hebrewfontsf{LiberationSans}[Script=Hebrew] +\setotherlanguage{hebrew} +\setminted{ + bgcolor=codebg, + breaklines=true, + mathescape, + fontsize=\scriptsize, + linenos=false, +} + + +\setotherlanguage{hebrew} +\author{Aner Zakobar} +\date{\today} +\title{Test ORG file} +\hypersetup{ + pdfauthor={Aner Zakobar}, + pdftitle={Test ORG file}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 29.4 (Org mode 9.6.15)}, + pdflang={English}} +\begin{document} + +\maketitle +\tableofcontents + + +\section{Test equation} +\label{sec:org99ed951} + +$$\mathbb{E}[\max(X_i - \mathbb{E}(X_i))] \geq \frac{\sqrt{p}}{3}\sqrt{\frac{\log N}{n}}\cdot\left(1 - \frac{1}{e}\right)$$ + +\section{Header} +\label{sec:orgc14cd1f} + +\subsection{Test code} +\label{sec:orgb6381b8} + +\begin{minted}[]{python} +def a(b): + print(b) + +a(3) +\end{minted} + +\begin{verbatim} +3 +\end{verbatim} + +\section{Test Hebrew} +\label{sec:org6df4d22} + +\begin{hebrew} + +אני מקווה שזה עובד. + +\end{hebrew} + +\subsection{More stuff} +\label{sec:org4700fe9} + +Done! +\end{document} diff --git a/shells/debugTex/tex2pdf.sh b/shells/debugTex/tex2pdf.sh new file mode 100644 index 0000000..abdffa8 --- /dev/null +++ b/shells/debugTex/tex2pdf.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# emacs --batch --eval "(progn (require 'azos-emacs-editor) (require 'ox-latex ))" +latexmk -xelatex -shell-escape -interaction=nonstopmode -output-directory=. test.tex; +latexmk -c test.tex; diff --git a/shells/default.nix b/shells/default.nix new file mode 100644 index 0000000..10f47b6 --- /dev/null +++ b/shells/default.nix @@ -0,0 +1,4 @@ +{ pkgs } @ args: +{ + debugTex = import ./debugTex args; +}