• 0 Posts
  • 3 Comments
Joined 11 months ago
cake
Cake day: October 17th, 2023

help-circle
  • I highly recommend nix-direnv and the emacs direnv package. For this example, I quickly threw together a flake using a minimal template,

    {
      description = "Python environment for plotting with Seaborn";
      inputs = {
        nixpkgs.url = github:nixos/nixpkgs/nixpkgs-23.05-darwin;
        flake-utils.url = github:numtide/flake-utils;
      };
    
      outputs = { self, nixpkgs, flake-utils }: 
        flake-utils.lib.eachDefaultSystem (system: 
          let pkgs = import nixpkgs { inherit system; };
              python = pkgs.python3.withPackages (ps: [
                ps.pandas
                ps.seaborn
              ]);
          in {
            devShell = pkgs.mkShell {
              buildInputs = [ python ];
            };
          }
        );
    }
    

    Then created a file .envrc with the contents use flake in the same directory as the flake.nix file, and ran direnv allow to allow use of it. I then used this org mode file to test,

    Example of plotting from this [[https://andykuszyk.github.io/2023-11-18-using-emacs-org-mode-as-a-jupyter-notebook.html][blog post]].
    
    Some data to work with,
    
    #+begin_src javascript :tangle data.njson
    {"name": "Spock", "editor": "Emacs"}
    {"name": "James Kirk", "editor": "Vim"}
    {"name": "Dr McCoy", "editor": "Vim"}
    {"name": "Scotty", "editor": "Emacs"}
    {"name": "Worf", "editor": "ed"}
    {"name": "Geordi LaForge", "editor": "Emacs"}
    {"name": "Data", "editor": "Emacs"}
    {"name": "Jean-luc Picard", "editor": "VS Code"}
    {"name": "Wesley Crusher", "editor": "VS Code"}
    {"name": "William Riker", "editor": "Vim"}
    #+end_src
    
    And now we plot,
    
    #+begin_src python :results output file :file usage.png
    import pandas as pd
    import seaborn as sns
    import sys
    
    df = pd.read_json("data.njson", lines=True)
    axes = sns.histplot(df, x="editor")
    axes.get_figure().savefig(sys.stdout.buffer)
    #+end_src
    
    #+RESULTS:
    [[file:usage.png]]
    

  • I highly recommend nix-direnv along with the direnv emacs package. I do everything with flakes, so I’d have a flake.nix that defines a shell with the inputs I need, then I’d have a .envrc with the contents use flake in the same directory. With those in place, you may need to run direnv allow in that directory, and then you can edit a .org file in the same directory as the flake and the python environment will have what you need.

    Here’s a flake I quickly made using a minimal template.

    {
      description = "Python environment for plotting with Seaborn";
      inputs = {
        nixpkgs.url = github:nixos/nixpkgs/nixpkgs-23.05-darwin;
        flake-utils.url = github:numtide/flake-utils;
      };
    
      outputs = { self, nixpkgs, flake-utils }: 
        flake-utils.lib.eachDefaultSystem (system: 
          let pkgs = import nixpkgs { inherit system; };
              python = pkgs.python3.withPackages (ps: [
                ps.pandas
                ps.seaborn
              ]);
          in {
            devShell = pkgs.mkShell {
              buildInputs = [ python ];
            };
          }
        );
    }
    

    And then here’s the .org file I tested with,

    Example of plotting from this [[https://andykuszyk.github.io/2023-11-18-using-emacs-org-mode-as-a-jupyter-notebook.html][blog post]].
    
    Some data to work with,
    
    #+begin_src javascript :tangle data.njson
    {"name": "Spock", "editor": "Emacs"}
    {"name": "James Kirk", "editor": "Vim"}
    {"name": "Dr McCoy", "editor": "Vim"}
    {"name": "Scotty", "editor": "Emacs"}
    {"name": "Worf", "editor": "ed"}
    {"name": "Geordi LaForge", "editor": "Emacs"}
    {"name": "Data", "editor": "Emacs"}
    {"name": "Jean-luc Picard", "editor": "VS Code"}
    {"name": "Wesley Crusher", "editor": "VS Code"}
    {"name": "William Riker", "editor": "Vim"}
    #+end_src
    
    And now we plot,
    
    #+begin_src python :results output file :file usage.png
    import pandas as pd
    import seaborn as sns
    import sys
    
    df = pd.read_json("data.njson", lines=True)
    axes = sns.histplot(df, x="editor")
    axes.get_figure().savefig(sys.stdout.buffer)
    #+end_src
    
    #+RESULTS:
    [[file:usage.png]]
    

  • Thank you for sharing all these experiences! One thing is that I don’t understand the god-mode commentary. I’ve used it for years, and it works in the minibuffer and I’ve never noticed any oddities with search. A caveat with minibuffer usage is that my modeline indicator of modality is not accurate for the minibuffer.

    So, say I am editing a buffer in god-mode modality and I enter an interactive command. Now focus is in the minibuffer and my modeline still suggests I am in god-mode, but I am actually in normal mode (the modeline is attached to the buffer). If I switch modes, I can tell that I’m in god-mode by hitting a or e to navigate the line I’m editing in the minibuffer. Switch again to go back to normal mode editing in the minibuffer.