about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 23:23:56 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 23:23:56 +0200
commite7fdb3737774b4d7a5549d6d282944b6f468ab55 (patch)
tree0282a704fbdbc95764810eb029875051f2238993
parentfix(modules/legacy/conf): Remove outdated imports of migrated modules (diff)
downloadnixos-config-e7fdb3737774b4d7a5549d6d282944b6f468ab55.tar.gz
nixos-config-e7fdb3737774b4d7a5549d6d282944b6f468ab55.zip
feat(modules/atuin): Init
-rw-r--r--flake/nixosConfigurations/common.nix1
-rw-r--r--modules/by-name/at/atuin/module.nix92
-rw-r--r--modules/by-name/at/atuin/secrets/encryption_key.age42
-rw-r--r--pkgs/by-name/at/atuin/package.nix94
-rw-r--r--pkgs/by-name/at/atuin/set-dvorak-keybindings.patch37
-rw-r--r--secrets.nix2
6 files changed, 268 insertions, 0 deletions
diff --git a/flake/nixosConfigurations/common.nix b/flake/nixosConfigurations/common.nix
index cc191ea9..bdf65a35 100644
--- a/flake/nixosConfigurations/common.nix
+++ b/flake/nixosConfigurations/common.nix
@@ -31,6 +31,7 @@
     };
 
     programs = {
+      atuin.enable = true;
       imv.enable = true;
       lf.enable = true;
       zathura.enable = true;
diff --git a/modules/by-name/at/atuin/module.nix b/modules/by-name/at/atuin/module.nix
new file mode 100644
index 00000000..7adc34e1
--- /dev/null
+++ b/modules/by-name/at/atuin/module.nix
@@ -0,0 +1,92 @@
+{
+  config,
+  lib,
+  ...
+}: let
+  cfg = config.soispha.programs.atuin;
+in {
+  options.soispha.programs.atuin = {
+    enable = lib.mkEnableOption "atuin";
+  };
+
+  config = lib.mkIf cfg.enable {
+    age.secrets.atuin_encryption_key = {
+      file = ./secrets/encryption_key.age;
+      mode = "700";
+      owner = "soispha";
+      group = "users";
+    };
+
+    home-manager.users.soispha = {
+      programs.atuin = {
+        enable = true;
+        enableZshIntegration = config.soispha.programs.zsh.enable;
+        settings = {
+          key_path = "${config.age.secrets.atuin_encryption_key.path}";
+
+          # TODO: Setup a self-hosted sync server. <2024-10-18>
+          session_path = "";
+          auto_sync = false;
+          sync_address = "";
+
+          # Use the rather reasonable syntax of `skim` to search.
+          search_mode = "skim";
+
+          # Filter by files in a git directory, when in one.
+          # The filtermode can still be changed with `<Ctrl-r>` later.
+          workspaces = true;
+
+          # Save some space, by setting the mode to 'compact' and the height to 1 (meaning
+          # `atuin` may only use 1 line in the terminal).
+          style = "compact";
+          inline_height = 1;
+
+          # 'k' and 'j' to move up and down.
+          keymap_mode = "vim-normal";
+          keymap_cursor = {
+            emacs = "blink-underline";
+            vim_insert = "blink-block";
+            vim_normal = "blink-bar";
+          };
+
+          # Who wants software, that automatically calls home?!
+          update_check = false;
+
+          stats = {
+            # Commands with subcommands
+            # This list contains the defaults plus `nix`
+            common_subcommands = [
+              "apt"
+              "cargo"
+              "composer"
+              "dnf"
+              "docker"
+              "git"
+              "go"
+              "ip"
+              "kubectl"
+              "nix"
+              "nix"
+              "nmcli"
+              "npm"
+              "pecl"
+              "pnpm"
+              "podman"
+              "port"
+              "systemctl"
+              "tmux"
+              "yarn"
+            ];
+
+            # This overrides the default value.
+            ignored_commands = [];
+          };
+
+          # I currently don't want a sync deamon or a dotfiles manager running.
+          deamon.enable = false;
+          dotfiles.enable = false;
+        };
+      };
+    };
+  };
+}
diff --git a/modules/by-name/at/atuin/secrets/encryption_key.age b/modules/by-name/at/atuin/secrets/encryption_key.age
new file mode 100644
index 00000000..d801b0e0
--- /dev/null
+++ b/modules/by-name/at/atuin/secrets/encryption_key.age
@@ -0,0 +1,42 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBY3djUkVkbUhTZjFWS29F
+MFV5NkdCa3kxZTRjTFQ0N2cwekt4TVVhVTNZClN1ZE9ZSTdhaUtXWDZ2bjhEeVhZ
+V3RPRTAybU8zeWJZdW9VTFdWSVlWYUEKLT4gc3NoLWVkMjU1MTkgelpFb25nIHlH
+N2ZraXp0UGZFNFkzVVdiQTNnQ2RsSmsyWmJheFd3TC82R2RESmEzSFkKY2JEMzV2
+a05hYlJzU3lqbi9zbXR1SFp2VXhKTnhoSFFMTmR3Y0E4Q2VpawotPiBzc2gtZWQy
+NTUxOSA3SGZGVXcgdEtLd08ydks0SGdUWTA1ZlBqeWo5ZWt3dHZ0cXBoMHFzVW10
+ZHZ3cHdWawp2dnpERHV1RU9TUTBuSnJ0TTdXVEVZOFEyblgzKzFEV2txTUZwODNv
+dFlNCi0+IFItZ3JlYXNlIH1fSmMoMlFUIHB0OVR1egpObzZ1MWRIU2tNQ1lBV28K
+LS0tICtJd3hZUVNFdHVlYXpkdUdHZE43YXFpdlZmMmZONVp5d3hKMUdoTVdaNXcK
+YaR4U/tPURDQy/YZzs0KDV74OT5A/6AsSthrrOEf3wyKqf1kzQ2r1DghEwwy7kZD
+oKvgGNV9QgjwqI+yFbH7dHoeQJ/vOouDiC1buwqHGfr0f923VLWphLyAhtOgw6B5
+hDwEY5Kl5rXRbYqv00CFSMjkm8hBdH0/w4viUHjjq6zV4rUifWsshvFsSfsukqjJ
+ldUBuAHTG8D/pHdAe0C01D2wy1upozRTcmR9Pa93Sfojz50H5nX9+WNTFodsWFCA
+C4qdz1Zum4O5GzVG5DROHcdsr54FGhkJQzsWmHkfpazxbIpAfwODUquFPvDSKFdS
+MJVRteeA7qko4BPher2scaAKfy/poBcv1Xwkk1ATlzc3/Lh6gvwfxyB1Uav6FF6Z
+k5FwrNe/FQ99EQLZQrSZeIsiTvgIJuvclSwCxLziR7krTn3xmvOGNhKGgpvg0s6V
+M2azDyIHHdzncY9YlrSwtfyH2lXvDsm9DWllhD3oR1e+ElIxfLWrIxriIse14Bf9
+xacmd/JPQzpupYcmpovkP+RSmKhh5bQHOLn4mxCdkWV/gosYRiE9B5I245l2eMgn
+JGSG9+7Opvg+VX/ZEDmrP7oh7+j5E2w9gnuJvdrZSksWvWQFBhjGVZRf995SlZvu
+aA4jwwRaKukfGOcYp8n02y1YKFFs84melszo2ZkuTAme5zeuw0jANQCeuc0OmEIf
+x0oBYuhT+ZDfD8TOQ3pETFMd71vXsYDzg9iqtgCXD9qvidwGMkDI+RBd32KjHSev
+3aXuriIuP70P7ZbqqwhVhE8V2eSZSNsYzlX3ivzpBLKFEzHNE87o8SqosTExYJUy
+rx4bal+I8POSMTWT37WaUM1+i2Fj6hBJOWSY8oZS3lQ7cVAY0l19BcymIk9GP9CJ
+5IXzDAqf3zb/BaG/yE+9ta/ShwTlSkfthnsylfibbxs+XtqA1ACeUx3XBDFHBboO
+GnOV7/zixcAGWiZevz1qHHdJM9KMRPUL72lsu6RbEqBW4joK5rwvFKLVYZb8WRvO
+9ossUjSnMx7KB6G+3sWg9jdnLnJ0qPhVWVBRUoZ2/Cb41lR3natMThbh1dB/3Apg
+8OvZUnpu709ou6qQVpOw6HNH24VSjqsK/pqYgy1EndjhDZBdXO+OL6skAsBX2+PV
+crmWveUgQag3LeBpKZQGBVW4bV+9vNOW8+kWvAvn4XAhilj4iAMe9swDwHQSpTUf
+Nai78k3jX9qpUan+FjPf4rV8KPlHfkuBZ2Kk2QdyL99766pKPmwPjSTp2LwE49iY
+OfcaPC/IffnNDgbdxr/XO3th6/s/gwj5+80fjMVSho8Nev/anvR1M4jOQq/SSO7j
+4EoqlGrlLX9sAPOmuwGdzu3xKtZ6DAa5fpqTPxg4uOYu1f68zKUYnjHov5PfgS7T
+dNAd1VpVdOu994GyPMEK7sqP2Ii7Ksqc1l+1Tn9fzA9/p7ATgDEhKCXFutT6YzG4
+q0SfDdy21HDcjmhlTHlYsGQ/C2v5Ql25fEhndbbTUq7TtD+U9PpHJGtr77Ro+W6d
+e53MIkJ/KU6UXdq3UhhC8HDnctP0g4PXlimzn4JEhxNpkqXb/RWbuyrrBxUKLcLf
+2DCr3IB51gse+xlrqMIDz1LWAJAZvaaHgOy5XUDYjADHm7hAysm6yFs8ISxyAj8k
+tdFJrS3RwzAp3utmGZh3bSFYP5dalpW/cok+ZVVlk9L2UR+P7sRhkBfwHJMw4g4P
+tDS3V+7n9/DgDd8RwuFK4yRchzKUl0I88lBYwzmDA96OeayhrTfIgi5Tw5kmmZ5J
+GTP2q6T9BhotkAg5enMi0gM5n8zhGRgr4MIJHexQkX143RqBiOs+yjynGdi6eas7
+aiZ5M3H6+GoDVGIZOFDSheO45UPcIcK7W3qTxNCZYuW5/NCoaA0na0ugOcVDc5so
+vr3PxCxixf43e2kT6jVWAlYCf5gWUVNUXG/7SR0u+Q==
+-----END AGE ENCRYPTED FILE-----
diff --git a/pkgs/by-name/at/atuin/package.nix b/pkgs/by-name/at/atuin/package.nix
new file mode 100644
index 00000000..7f58697a
--- /dev/null
+++ b/pkgs/by-name/at/atuin/package.nix
@@ -0,0 +1,94 @@
+# This has been taken from nixpkgs at:
+# https://github.com/NixOS/nixpkgs/blob/5785b6bb5eaae44e627d541023034e1601455827/pkgs/by-name/at/atuin/package.nix
+# I have just removed some features and added a patch for dvorak input.
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  installShellFiles,
+  rustPlatform,
+  libiconv,
+  buildPackages,
+  darwin,
+  nixosTests,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "atuin";
+  version = "18.3.0";
+
+  src = fetchFromGitHub {
+    owner = "atuinsh";
+    repo = "atuin";
+    rev = "v${version}";
+    hash = "sha256-Q3UI1IUD5Jz2O4xj3mFM7DqY3lTy3WhWYPa8QjJHTKE=";
+  };
+
+  # TODO: unify this to one hash because updater do not support this
+  cargoHash =
+    if stdenv.hostPlatform.isLinux
+    then "sha256-K4Vw/d0ZOROWujWr76I3QvfKefLhXLeFufUrgStAyjQ="
+    else "sha256-8NAfE7cGFT64ntNXK9RT0D/MbDJweN7vvsG/KlrY4K4=";
+
+  patches = [
+    ./set-dvorak-keybindings.patch
+  ];
+
+  # atuin's default features include 'check-updates', which do not make sense
+  # for distribution builds. List all other default features.
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "client"
+    # "sync"
+    # "server"
+    "clipboard"
+    # "daemon"
+  ];
+
+  nativeBuildInputs = [installShellFiles];
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
+    libiconv
+    darwin.apple_sdk_11_0.frameworks.AppKit
+    darwin.apple_sdk_11_0.frameworks.Security
+    darwin.apple_sdk_11_0.frameworks.SystemConfiguration
+  ];
+
+  preBuild = ''
+    export PROTOC=${buildPackages.protobuf}/bin/protoc
+    export PROTOC_INCLUDE="${buildPackages.protobuf}/include";
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd atuin \
+      --bash <($out/bin/atuin gen-completions -s bash) \
+      --fish <($out/bin/atuin gen-completions -s fish) \
+      --zsh <($out/bin/atuin gen-completions -s zsh)
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) atuin;
+  };
+
+  # The checks don't compile without the `server` feature
+  doCheck = false;
+  checkFlags = [
+    # tries to make a network access
+    "--skip=registration"
+    # No such file or directory (os error 2)
+    "--skip=sync"
+    # PermissionDenied (Operation not permitted)
+    "--skip=change_password"
+    "--skip=multi_user_test"
+    "--skip=store::var::tests::build_vars"
+    # Tries to touch files
+    "--skip=build_aliases"
+  ];
+
+  meta = with lib; {
+    description = "Replacement for a shell history which records additional commands context with optional encrypted synchronization between machines";
+    homepage = "https://github.com/atuinsh/atuin";
+    license = licenses.mit;
+    maintainers = with maintainers; [SuperSandro2000 sciencentistguy _0x4A6F];
+    mainProgram = "atuin";
+  };
+}
diff --git a/pkgs/by-name/at/atuin/set-dvorak-keybindings.patch b/pkgs/by-name/at/atuin/set-dvorak-keybindings.patch
new file mode 100644
index 00000000..9ab3700a
--- /dev/null
+++ b/pkgs/by-name/at/atuin/set-dvorak-keybindings.patch
@@ -0,0 +1,37 @@
+From f763aef8094c12293570119d9ff0922356dd8c79 Mon Sep 17 00:00:00 2001
+From: Benedikt Peetz <benedikt.peetz@b-peetz.de>
+Date: Fri, 18 Oct 2024 23:03:01 +0200
+Subject: [PATCH] fix(client): Change the keymaps to support dvorka vim keys
+
+---
+ crates/atuin/src/command/client/search/interactive.rs | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/crates/atuin/src/command/client/search/interactive.rs b/crates/atuin/src/command/client/search/interactive.rs
+index c87fff1c..19e965fe 100644
+--- a/crates/atuin/src/command/client/search/interactive.rs
++++ b/crates/atuin/src/command/client/search/interactive.rs
+@@ -322,17 +322,17 @@ impl State {
+                     self.keymap_mode = KeymapMode::VimInsert;
+                     return InputAction::Continue;
+                 }
+-                KeyCode::Char('j') if !ctrl => {
++                KeyCode::Char('t') if !ctrl => {
+                     return self.handle_search_down(settings, true);
+                 }
+-                KeyCode::Char('k') if !ctrl => {
++                KeyCode::Char('n') if !ctrl => {
+                     return self.handle_search_up(settings, true);
+                 }
+                 KeyCode::Char('h') if !ctrl => {
+                     self.search.input.left();
+                     return InputAction::Continue;
+                 }
+-                KeyCode::Char('l') if !ctrl => {
++                KeyCode::Char('s') if !ctrl => {
+                     self.search.input.right();
+                     return InputAction::Continue;
+                 }
+-- 
+2.46.0
+
diff --git a/secrets.nix b/secrets.nix
index 3e16473d..02e07728 100644
--- a/secrets.nix
+++ b/secrets.nix
@@ -6,6 +6,8 @@ let
 in {
   "modules/by-name/lf/lf/secrets/cd_paths.age".publicKeys = [soispha tiamat apzu];
 
+  "modules/by-name/at/atuin/secrets/encryption_key.age".publicKeys = [soispha tiamat apzu];
+
   "modules/by-name/se/serverphone/private_keys/ca.key".publicKeys = [soispha tiamat apzu];
   "modules/by-name/se/serverphone/private_keys/server.key".publicKeys = [soispha tiamat apzu];