diff options
-rw-r--r-- | flake/nixosConfigurations/common.nix | 1 | ||||
-rw-r--r-- | modules/by-name/at/atuin/module.nix | 92 | ||||
-rw-r--r-- | modules/by-name/at/atuin/secrets/encryption_key.age | 42 | ||||
-rw-r--r-- | pkgs/by-name/at/atuin/package.nix | 94 | ||||
-rw-r--r-- | pkgs/by-name/at/atuin/set-dvorak-keybindings.patch | 37 | ||||
-rw-r--r-- | secrets.nix | 2 |
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]; |