From 1241c82bd78ec3b19ffeb67651e52e70d1a8a08c Mon Sep 17 00:00:00 2001 From: Joakim Repomaa Date: Wed, 29 Jan 2025 13:58:39 +0200 Subject: [PATCH] add home manager configs --- flake.lock | 158 +- flake.nix | 35 +- radish/default.nix | 1 + radish/home/Makefile | 2 + radish/home/assets/profile-pictures/jokke.png | Bin 0 -> 1117 bytes radish/home/assets/profile-pictures/moco.png | Bin 0 -> 6009 bytes radish/home/common/default.nix | 417 ++++ radish/home/common/dotfiles/tmux/tmux.conf | 69 + radish/home/common/dotfiles/zsh/.zcompdump | 1953 +++++++++++++++++ radish/home/common/dotfiles/zsh/completion | 30 + radish/home/common/dotfiles/zsh/functions | 64 + radish/home/common/dotfiles/zsh/init | 79 + radish/home/common/neovim/default.nix | 433 ++++ radish/home/common/neovim/formatters.lua | 46 + .../neovim/luasnippets/typescriptreact.lua | 83 + .../home/common/neovim/snippets/ruby.snippets | 33 + .../neovim/snippets/typescriptreact.snippets | 1 + .../custom-pkgs/commander-nvim/default.nix | 1 + radish/home/custom-pkgs/crystal/default.nix | 1 + radish/home/custom-pkgs/crystal/package.nix | 16 + radish/home/custom-pkgs/default.nix | 9 + radish/home/custom-pkgs/fb-client/default.nix | 1 + radish/home/custom-pkgs/fb-client/package.nix | 22 + radish/home/custom-pkgs/flameshot/default.nix | 1 + radish/home/custom-pkgs/flameshot/package.nix | 6 + radish/home/custom-pkgs/gen-nvim/default.nix | 1 + radish/home/custom-pkgs/otp/default.nix | 1 + radish/home/custom-pkgs/otp/package.nix | 17 + radish/home/custom-pkgs/util.nix | 16 + .../home/custom-pkgs/vimpeccable/default.nix | 1 + .../custom-pkgs/windline-nvim/default.nix | 1 + .../home/custom-pkgs/wl-copy-both/default.nix | 1 + .../home/custom-pkgs/wl-copy-both/package.nix | 14 + radish/home/custom-programs/default.nix | 10 + .../custom-programs/fb-client/default.nix | 30 + radish/home/default.nix | 5 + radish/home/gnome/default.nix | 123 ++ radish/home/gnome/extensions/default.nix | 10 + .../home/gnome/extensions/freon/default.nix | 24 + .../home/gnome/extensions/paperwm/default.nix | 48 + radish/home/jokke/default.nix | 103 + radish/home/moco/default.nix | 206 ++ radish/home/modules/neovim/default.nix | 392 ++++ radish/home/modules/neovim/lsp-config.lua | 89 + 44 files changed, 4542 insertions(+), 11 deletions(-) create mode 100644 radish/home/Makefile create mode 100644 radish/home/assets/profile-pictures/jokke.png create mode 100644 radish/home/assets/profile-pictures/moco.png create mode 100644 radish/home/common/default.nix create mode 100644 radish/home/common/dotfiles/tmux/tmux.conf create mode 100644 radish/home/common/dotfiles/zsh/.zcompdump create mode 100644 radish/home/common/dotfiles/zsh/completion create mode 100644 radish/home/common/dotfiles/zsh/functions create mode 100644 radish/home/common/dotfiles/zsh/init create mode 100644 radish/home/common/neovim/default.nix create mode 100644 radish/home/common/neovim/formatters.lua create mode 100644 radish/home/common/neovim/luasnippets/typescriptreact.lua create mode 100644 radish/home/common/neovim/snippets/ruby.snippets create mode 100644 radish/home/common/neovim/snippets/typescriptreact.snippets create mode 100644 radish/home/custom-pkgs/commander-nvim/default.nix create mode 100644 radish/home/custom-pkgs/crystal/default.nix create mode 100644 radish/home/custom-pkgs/crystal/package.nix create mode 100644 radish/home/custom-pkgs/default.nix create mode 100644 radish/home/custom-pkgs/fb-client/default.nix create mode 100644 radish/home/custom-pkgs/fb-client/package.nix create mode 100644 radish/home/custom-pkgs/flameshot/default.nix create mode 100644 radish/home/custom-pkgs/flameshot/package.nix create mode 100644 radish/home/custom-pkgs/gen-nvim/default.nix create mode 100644 radish/home/custom-pkgs/otp/default.nix create mode 100644 radish/home/custom-pkgs/otp/package.nix create mode 100644 radish/home/custom-pkgs/util.nix create mode 100644 radish/home/custom-pkgs/vimpeccable/default.nix create mode 100644 radish/home/custom-pkgs/windline-nvim/default.nix create mode 100644 radish/home/custom-pkgs/wl-copy-both/default.nix create mode 100644 radish/home/custom-pkgs/wl-copy-both/package.nix create mode 100644 radish/home/custom-programs/default.nix create mode 100644 radish/home/custom-programs/fb-client/default.nix create mode 100644 radish/home/default.nix create mode 100644 radish/home/gnome/default.nix create mode 100644 radish/home/gnome/extensions/default.nix create mode 100644 radish/home/gnome/extensions/freon/default.nix create mode 100644 radish/home/gnome/extensions/paperwm/default.nix create mode 100644 radish/home/jokke/default.nix create mode 100644 radish/home/moco/default.nix create mode 100644 radish/home/modules/neovim/default.nix create mode 100644 radish/home/modules/neovim/lsp-config.lua diff --git a/flake.lock b/flake.lock index e4829ea..1405485 100644 --- a/flake.lock +++ b/flake.lock @@ -20,6 +20,22 @@ "type": "github" } }, + "commander-nvim": { + "flake": false, + "locked": { + "lastModified": 1717816527, + "narHash": "sha256-eXOHR+lwHVJze6jvFuDlvcUtFSpV8EJqlWvXLRWeCNI=", + "owner": "FeiyouG", + "repo": "commander.nvim", + "rev": "84101e8eb1613a72bbdec655b734f891d8a00694", + "type": "github" + }, + "original": { + "owner": "FeiyouG", + "repo": "commander.nvim", + "type": "github" + } + }, "crane": { "locked": { "lastModified": 1731098351, @@ -126,6 +142,24 @@ "type": "github" } }, + "flake-utils_4": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "frontend": { "inputs": { "flake-utils": "flake-utils_2", @@ -146,6 +180,22 @@ "type": "github" } }, + "gen-nvim": { + "flake": false, + "locked": { + "lastModified": 1735503365, + "narHash": "sha256-s3Ky2uhRviKAaKF3iCF2uHctzk+kFV7BnqyxAGwqhbo=", + "owner": "David-Kunz", + "repo": "gen.nvim", + "rev": "e09a8dbffa139ad60d5b47998fcc8669ead1ebf4", + "type": "github" + }, + "original": { + "owner": "David-Kunz", + "repo": "gen.nvim", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -191,6 +241,47 @@ "type": "github" } }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1738145391, + "narHash": "sha256-/9mfbWYN9HDQbKa2HdAe2T5e3FfY8e4eqc1FIvAyvLg=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "1b4f2a48168b3d90e11365552d1e7e601a4be6b6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "ketchup": { + "inputs": { + "flake-utils": "flake-utils_4", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1718020591, + "narHash": "sha256-nNkMX4Fifj4Z1n2ldWAeu1AujaW41ugsEokPrKioNy0=", + "owner": "repomaa", + "repo": "ketchup", + "rev": "7cbff916ad4ebfd983402842569730e63d105de9", + "type": "github" + }, + "original": { + "owner": "repomaa", + "repo": "ketchup", + "type": "github" + } + }, "keycloak-realms": { "locked": { "lastModified": 1721562747, @@ -320,11 +411,11 @@ }, "nixpkgs-small": { "locked": { - "lastModified": 1737795611, - "narHash": "sha256-0kGPO515JdDt6gPcR25QTGyNJnT1UFtH1tdkR2QdLAY=", + "lastModified": 1738133703, + "narHash": "sha256-wYgv4GjKKehMuPrROaKS003JEeSvSufgJ17fg6L1srI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ed45d51fb4c860e70760a042dd9ff99bd016497e", + "rev": "11c8e6aebf3a42be1f824200c98250b00f854814", "type": "github" }, "original": { @@ -399,11 +490,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1737632463, - "narHash": "sha256-38J9QfeGSej341ouwzqf77WIHAScihAKCt8PQJ+NH28=", + "lastModified": 1737885589, + "narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0aa475546ed21629c4f5bbf90e38c846a99ec9e9", + "rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8", "type": "github" }, "original": { @@ -462,13 +553,19 @@ "root": { "inputs": { "auto-cpufreq": "auto-cpufreq", + "commander-nvim": "commander-nvim", + "gen-nvim": "gen-nvim", "gtrackmap": "gtrackmap", + "home-manager": "home-manager", + "ketchup": "ketchup", "ksoloti-pr": "ksoloti-pr", "lanzaboote": "lanzaboote", "nextcloud": "nextcloud", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_5", - "nixpkgs-small": "nixpkgs-small" + "nixpkgs-small": "nixpkgs-small", + "vimpeccable": "vimpeccable", + "windline-nvim": "windline-nvim" } }, "rust-overlay": { @@ -536,6 +633,53 @@ "repo": "default", "type": "github" } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "vimpeccable": { + "flake": false, + "locked": { + "lastModified": 1640723263, + "narHash": "sha256-MnEOCb/0wvvcYnTOROmVO8HUge3dWmuweAXdpx1zbXE=", + "owner": "svermeulen", + "repo": "vimpeccable", + "rev": "bd19b2a86a3d4a0ee184412aa3edb7ed57025d56", + "type": "github" + }, + "original": { + "owner": "svermeulen", + "repo": "vimpeccable", + "type": "github" + } + }, + "windline-nvim": { + "flake": false, + "locked": { + "lastModified": 1720754740, + "narHash": "sha256-vvekmr4ApAyvsxC/pdqupLBCqkHr9JZ8+jSjYRb+iYM=", + "owner": "windwp", + "repo": "windline.nvim", + "rev": "bef735787bef64697036774eca6418e7a786100b", + "type": "github" + }, + "original": { + "owner": "windwp", + "repo": "windline.nvim", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c36f579..22daf89 100644 --- a/flake.nix +++ b/flake.nix @@ -12,16 +12,42 @@ }; lanzaboote.url = "github:nix-community/lanzaboote"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; - ksoloti-pr.url = "github:repomaa/nixpkgs/pkg/ksoloti"; auto-cpufreq = { url = "github:AdnanHodzic/auto-cpufreq"; inputs.nixpkgs.follows = "nixpkgs"; }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; + commander-nvim = { + url = "github:FeiyouG/commander.nvim"; + flake = false; + }; + vimpeccable = { + url = "github:svermeulen/vimpeccable"; + flake = false; + }; + windline-nvim = { + url = "github:windwp/windline.nvim"; + flake = false; + }; + gen-nvim = { + url = "github:David-Kunz/gen.nvim"; + flake = false; + }; + ketchup = { + url = "github:repomaa/ketchup"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + ksoloti-pr.url = "github:repomaa/nixpkgs/pkg/ksoloti"; }; - outputs = { nixpkgs, nixpkgs-small, gtrackmap, ksoloti-pr, lanzaboote, nixos-hardware, auto-cpufreq, ... }@attrs: { + outputs = { nixpkgs, nixpkgs-small, gtrackmap, ksoloti-pr, lanzaboote, nixos-hardware, auto-cpufreq, home-manager, ... }@inputs: { nixosConfigurations.freun-dev = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; - specialArgs = attrs; + specialArgs = inputs; modules = [ ./freun.dev gtrackmap.nixosModules.x86_64-linux.default @@ -33,13 +59,14 @@ specialArgs = { pkgs-small = import nixpkgs-small { inherit system; }; ksoloti-pr = import ksoloti-pr { inherit system; }; - inherit attrs system; + inherit inputs system; }; modules = [ ./radish lanzaboote.nixosModules.lanzaboote nixos-hardware.nixosModules.framework-13-7040-amd auto-cpufreq.nixosModules.default + home-manager.nixosModules.home-manager ]; }; }; diff --git a/radish/default.nix b/radish/default.nix index 672f69a..5140c84 100644 --- a/radish/default.nix +++ b/radish/default.nix @@ -9,5 +9,6 @@ ./containers.nix ./desktop.nix ./users.nix + ./home ]; } diff --git a/radish/home/Makefile b/radish/home/Makefile new file mode 100644 index 0000000..8c17234 --- /dev/null +++ b/radish/home/Makefile @@ -0,0 +1,2 @@ +switch: + home-manager switch diff --git a/radish/home/assets/profile-pictures/jokke.png b/radish/home/assets/profile-pictures/jokke.png new file mode 100644 index 0000000000000000000000000000000000000000..ab696579c7cd277b13a1a4be09e40e60e851536e GIT binary patch literal 1117 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 b{xjY<8Q8k(NBay01_lOCS3j3^P6Down" "j" ]; + move-left = [ "Left" "h" ]; + move-right = [ "Right" "l" ]; + move-up = [ "Up" "k" ]; + switch-down = [ "Down" "j" ]; + switch-left = [ "Left" "h" ]; + switch-right = [ "Right" "l" ]; + switch-up = [ "Up" "k" ]; + }; + }; + freon = { + enable = true; + }; + }; + nightLight.enable = true; + }; + + fonts.fontconfig.enable = true; + targets.genericLinux.enable = true; + xdg.mime.enable = true; + + xdg = { + enable = true; + configFile = { + tmux.source = dotfiles/tmux; + zsh.source = dotfiles/zsh; + "fd/ignore".text = '' + /.git/ + ''; + "vivaldi/NativeMessagingHosts/ff2mpv.json".text = builtins.toJSON { + name = "ff2mpv"; + description = "ff2mpv's external manifest"; + path = "${pkgs.ff2mpv-rust}/bin/ff2mpv-rust"; + type = "stdio"; + allowed_origins = [ + "chrome-extension://ephjcajbkgplkjmelpglennepbpmdpjg/" + ]; + }; + }; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. If you don't want to manage your shell through Home + # Manager then you have to manually source 'hm-session-vars.sh' located at + # either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/jokke/etc/profile.d/hm-session-vars.sh + # + systemd.user.sessionVariables = { + NIXOS_OZONE_WL = 1; + NVIM_LISTEN_ADDRESS = "$XDG_RUNTIME_DIR/nvimsocket"; + PAGER = "bat --paging=always --style=plain"; + MANPAGER = "sh -c 'col -bx | bat -l man -p'"; + MANROFFOPT = "-c"; + DO_NOT_TRACK = 1; + }; + + home.shellAliases = { + _ = "sudo"; + icr = "crystal i"; + hm = "home-manager"; + chat = "ssh root@ipv4.jokke.space pkill mosh; mosh weechat@ipv4.jokke.space"; + wget = " wget --content-disposition"; + pj = "jq | bat -l json"; + ls = "ls --color=auto"; + }; + + services.gpg-agent = with pkgs; { + enable = true; + enableSshSupport = true; + pinentryPackage = pinentry-gnome3; + }; + + programs.gpg.scdaemonSettings = { + disable-ccid = true; + }; + + xdg.configFile."autostart/gnome-keyring-ssh.desktop".text = lib.strings.concatLines [ + (builtins.readFile "${pkgs.gnome-keyring}/etc/xdg/autostart/gnome-keyring-ssh.desktop") + "X-GNOME-Autostart-enabled=false" + ]; + + gnome.automaticTimeZone = true; +} diff --git a/radish/home/common/dotfiles/tmux/tmux.conf b/radish/home/common/dotfiles/tmux/tmux.conf new file mode 100644 index 0000000..ae8cfd8 --- /dev/null +++ b/radish/home/common/dotfiles/tmux/tmux.conf @@ -0,0 +1,69 @@ +# vim: ft=tmux +# original from bl1nk +# Styles +setw -g mode-style "fg=yellow,bg=default,bright" +setw -g window-status-style "fg=default,bg=default,dim" +setw -g window-status-current-style "fg=yellow,bg=default,dim" +set -g message-style "fg=red,bg=default,bright" +set -g status-style "fg=default,bg=black,bright" +set -g pane-active-border-style "fg=blue,bg=black" +set -g allow-passthrough 1 +set-option -g set-titles on +set-option -g focus-events on +# set set-titles-string "#{session_name}" + +# Options +set -g bell-action any +set -g history-limit 50000 +set -g status on +#set -g status-keys vi +#set -g status-utf8 on +set -g set-titles on + +set -g default-terminal "tmux-256color" +set -as terminal-features ",foot*:RGB,alacritty*:RGB,gnome*:RGB" +set -g set-titles-string "tmux:#I [ #W ]" +set -g base-index 1 +set -g pane-base-index 1 +set -g @plugin 'base16-project/base16-tmux' + +set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY BASE16_SHELL" + +set -g status-left-length 30 +set -g status-left '[#[fg=white]#S]#[fg=black,bright] #[default]' +set -sg escape-time 0 + +#setw -g utf8 on +setw -g automatic-rename on +setw -g clock-mode-style 24 +#setw -g mode-keys vi +setw -g mouse on + +bind-key q confirm kill-pane +bind-key Q confirm kill-session +bind-key Tab next-window + +bind-key > switchc -n +bind-key > switchc -p + +bind-key C-n new-window -c "#{pane_current_path}" +bind-key C-t new-window -c "#{pane_current_path}" "~/bin/share-tty $(tmux display -p '#S')" + +bind-key u run tmux-url-select + +bind-key o split-window -h -c '#{pane_current_path}' +bind-key u split-window -v -c '#{pane_current_path}' +bind-key C-o split-window -h -c '#{pane_current_path}' +bind-key C-u split-window -v -c '#{pane_current_path}' + +bind-key -r C-h select-pane -L +bind-key -r C-j select-pane -D +bind-key -r C-k select-pane -U +bind-key -r C-l select-pane -R + +bind-key f resize-pane -Z +bind-key r source-file ~/.config/tmux/tmux.conf + +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -i" +bind -T root MouseDown2Pane select-pane -t =\; run -b "xclip -o | tmux load-buffer - && tmux paste-buffer -s ' '" +run '~/.tmux/plugins/tpm/tpm' diff --git a/radish/home/common/dotfiles/zsh/.zcompdump b/radish/home/common/dotfiles/zsh/.zcompdump new file mode 100644 index 0000000..3913b6f --- /dev/null +++ b/radish/home/common/dotfiles/zsh/.zcompdump @@ -0,0 +1,1953 @@ +#files: 865 version: 5.9 + +_comps=( +'-' '_precommand' +'.' '_source' +'5g' '_go' +'5l' '_go' +'6g' '_go' +'6l' '_go' +'8g' '_go' +'8l' '_go' +'a2ps' '_a2ps' +'aaaa' '_hosts' +'aap' '_aap' +'abcde' '_abcde' +'ack' '_ack' +'ack2' '_ack' +'ack-grep' '_ack' +'ack-standalone' '_ack' +'acpi' '_acpi' +'acpitool' '_acpitool' +'acroread' '_acroread' +'adb' '_adb' +'add-zle-hook-widget' '_add-zle-hook-widget' +'add-zsh-hook' '_add-zsh-hook' +'admin' '_sccs' +'alacritty' '_alacritty' +'ali' '_mh' +'alias' '_alias' +'amaya' '_webbrowser' +'analyseplugin' '_analyseplugin' +'animate' '_imagemagick' +'anno' '_mh' +'ansible' '_ansible' +'ansible-config' '_ansible' +'ansible-console' '_ansible' +'ansible-doc' '_ansible' +'ansible-galaxy' '_ansible' +'ansible-inventory' '_ansible' +'ansible-playbook' '_ansible' +'ansible-pull' '_ansible' +'ansible-vault' '_ansible' +'ant' '_ant' +'antiword' '_antiword' +'aodh' '_openstack' +'aoss' '_precommand' +'apache2ctl' '_apachectl' +'apachectl' '_apachectl' +'aplay' '_alsa-utils' +'apm' '_apm' +'appletviewer' '_java' +'apropos' '_man' +'apvlv' '_pdf' +'archbuild' '_devtools' +'arch-chroot' '_archinstallscripts' +'arch-nspawn' '_devtools' +'archrelease' '_devtools' +'arduino-ctags' '_ctags' +'arecord' '_alsa-utils' +'arena' '_webbrowser' +'_arguments' '__arguments' +'arp' '_arp' +'arping' '_arping' +'-array-value-' '_value' +'asciidoctor' '_asciidoctor' +'asciinema' '_asciinema' +'ash' '_sh' +'-assign-parameter-' '_assign' +'at' '_at' +'atq' '_at' +'atrm' '_at' +'attr' '_attr' +'augtool' '_augeas' +'aur' '_aur' +'autoload' '_typeset' +'avahi-browse' '_avahi' +'avahi-browse-domains' '_avahi' +'avahi-resolve' '_avahi' +'avahi-resolve-address' '_avahi' +'avahi-resolve-host-name' '_avahi' +'awk' '_awk' +'b2sum' '_md5sum' +'barbican' '_openstack' +'base32' '_base64' +'base64' '_base64' +'basename' '_basename' +'basenc' '_basenc' +'bash' '_bash' +'bat' '_bat' +'batch' '_at' +'baz' '_baz' +'beep' '_beep' +'bg' '_jobs_bg' +'bibtex' '_bibtex' +'bindkey' '_bindkey' +'bison' '_bison' +'bmake' '_make' +'bogofilter' '_bogofilter' +'bogotune' '_bogofilter' +'bogoutil' '_bogofilter' +'bootctl' '_bootctl' +'borg' '_borg' +'borgfs' '_borg' +'bpython' '_bpython' +'bpython2' '_bpython' +'bpython2-gtk' '_bpython' +'bpython2-urwid' '_bpython' +'bpython3' '_bpython' +'bpython3-gtk' '_bpython' +'bpython3-urwid' '_bpython' +'bpython-gtk' '_bpython' +'bpython-urwid' '_bpython' +'-brace-parameter-' '_brace_parameter' +'brctl' '_brctl' +'bsdgrep' '_grep' +'bsdtar' '_tar' +'btdownloadcurses' '_bittorrent' +'btdownloadgui' '_bittorrent' +'btdownloadheadless' '_bittorrent' +'btlaunchmany' '_bittorrent' +'btlaunchmanycurses' '_bittorrent' +'btmakemetafile' '_bittorrent' +'btreannounce' '_bittorrent' +'btrename' '_bittorrent' +'btrfs' '_btrfs' +'btshowmetainfo' '_bittorrent' +'bttrack' '_bittorrent' +'buildhash' '_ispell' +'builtin' '_builtin' +'bun' '_bun' +'bunzip2' '_bzip2' +'burst' '_mh' +'busctl' '_busctl' +'_bw' '_bw' +'bw' '_bw' +'bwrap' '_bwrap' +'bzcat' '_bzip2' +'bzegrep' '_grep' +'bzfgrep' '_grep' +'bzgrep' '_grep' +'bzip2' '_bzip2' +'bzip2recover' '_bzip2' +'bzr' '_bzr' +'c++' '_gcc' +'cabal' '_cabal' +'caddy' '_caddy' +'cal' '_cal' +'calendar' '_calendar' +'calibre' '_calibre' +'calibredb' '_calibre' +'calibre-debug' '_calibre' +'calibre-server' '_calibre' +'calibre-smtp' '_calibre' +'cargo' '_cargo' +'cat' '_cat' +'catchsegv' '_precommand' +'cc' '_gcc' +'ccal' '_ccal' +'cd' '_cd' +'cdc' '_sccs' +'cdcd' '_cdcd' +'cdr' '_cdr' +'cdrdao' '_cdrdao' +'cdrecord' '_cdrecord' +'ceilometer' '_openstack' +'certtool' '_gnutls' +'cftp' '_twisted' +'chage' '_users' +'chattr' '_chattr' +'chcon' '_chcon' +'chdir' '_cd' +'checkpkg' '_devtools' +'checkupdates' '_checkupdates' +'chezmoi' '_chezmoi' +'chfn' '_users' +'chg' '_hg' +'chgrp' '_chown' +'chimera' '_webbrowser' +'chkconfig' '_chkconfig' +'chkstow' '_stow' +'chmod' '_chmod' +'choom' '_choom' +'chown' '_chown' +'chpass' '_chsh' +'chroot' '_chroot' +'chrt' '_chrt' +'chsh' '_chsh' +'ci' '_rcs' +'cifsiostat' '_sysstat' +'cinder' '_openstack' +'ckeygen' '_twisted' +'cksum' '_cksum' +'clang' '_gcc' +'clang++' '_gcc' +'clay' '_clay' +'clear' '_nothing' +'cloudkitty' '_openstack' +'clusterdb' '_postgresql' +'cmp' '_cmp' +'co' '_rcs' +'code' '_code' +'column' '_column' +'comb' '_sccs' +'combine' '_imagemagick' +'combinediff' '_patchutils' +'comm' '_comm' +'-command-' '_autocd' +'command' '_command' +'-command-line-' '_normal' +'commitpkg' '_devtools' +'communitypkg' '_devtools' +'community-stagingpkg' '_devtools' +'community-testingpkg' '_devtools' +'comp' '_mh' +'compadd' '_compadd' +'compdef' '_compdef' +'composer' '_composer' +'composer.phar' '_composer' +'composite' '_imagemagick' +'compress' '_compress' +'conch' '_twisted' +'-condition-' '_condition' +'config.status' '_configure' +'configure' '_configure' +'convert' '_imagemagick' +'coredumpctl' '_coredumpctl' +'corepkg' '_devtools' +'cowsay' '_cowsay' +'cowthink' '_cowsay' +'cp' '_cp' +'cpio' '_cpio' +'cplay' '_cplay' +'cpupower' '_cpupower' +'createdb' '_postgresql' +'createuser' '_postgresql' +'crontab' '_crontab' +'crsh' '_cssh' +'cryptsetup' '_cryptsetup' +'crystal' '_crystal' +'cscope' '_cscope' +'csh' '_sh' +'csplit' '_csplit' +'cssh' '_cssh' +'ctags' '_ctags' +'ctags-exuberant' '_ctags' +'ctags-universal' '_ctags' +'curl' '_curl' +'cut' '_cut' +'cvs' '_cvs' +'darcs' '_darcs' +'dash' '_sh' +'date' '_date' +'dbus-launch' '_dbus' +'dbus-monitor' '_dbus' +'dbus-send' '_dbus' +'dconf' '_dconf' +'dcop' '_dcop' +'dcopclient' '_dcop' +'dcopfind' '_dcop' +'dcopobject' '_dcop' +'dcopref' '_dcop' +'dcopstart' '_dcop' +'dd' '_dd' +'declare' '_typeset' +'-default-' '_default' +'delta' '_sccs' +'deno' '_deno' +'dephell' '_dephell' +'designate' '_openstack' +'devtodo' '_devtodo' +'df' '_df' +'dhclient' '_dhclient' +'dhclient3' '_dhclient' +'dict' '_dict' +'diff' '_diff' +'diff3' '_diff3' +'diffpkg' '_devtools' +'diffstat' '_diffstat' +'dig' '_dig' +'dillo' '_webbrowser' +'dircmp' '_directories' +'dirs' '_dirs' +'disable' '_disable' +'disown' '_jobs_fg' +'display' '_imagemagick' +'dist' '_mh' +'django-admin' '_django' +'django-admin.py' '_django' +'dkms' '_dkms' +'dmake' '_make' +'dmesg' '_dmesg' +'dmidecode' '_dmidecode' +'doas' '_doas' +'docker' '_docker' +'domainname' '_yp' +'dos2unix' '_dos2unix' +'dotnet' '_dotnet' +'downgrade' '_downgrade' +'drill' '_drill' +'dropbox' '_dropbox' +'dropdb' '_postgresql' +'dropuser' '_postgresql' +'dsh' '_dsh' +'dtruss' '_dtruss' +'du' '_du' +'dvibook' '_dvi' +'dviconcat' '_dvi' +'dvicopy' '_dvi' +'dvidvi' '_dvi' +'dvipdf' '_dvi' +'dvips' '_dvi' +'dviselect' '_dvi' +'dvitodvi' '_dvi' +'dvitype' '_dvi' +'dwb' '_webbrowser' +'e2label' '_e2label' +'eatmydata' '_precommand' +'ebook-convert' '_calibre' +'ebook-edit' '_calibre' +'ebook-meta' '_calibre' +'ebook-polish' '_calibre' +'ebook-viewer' '_calibre' +'ecasound' '_ecasound' +'echotc' '_echotc' +'echoti' '_echoti' +'ed' '_ed' +'egrep' '_grep' +'elfdump' '_elfdump' +'elinks' '_elinks' +'emulate' '_emulate' +'enable' '_enable' +'enscript' '_enscript' +'entr' '_entr' +'env' '_env' +'eog' '_eog' +'epdfview' '_pdf' +'epsffit' '_psutils' +'-equal-' '_equal' +'erb' '_ruby' +'espeak' '_espeak' +'etags' '_etags' +'ethtool' '_ethtool' +'eu-nm' '_nm' +'eu-objdump' '_objdump' +'eu-readelf' '_readelf' +'eu-strings' '_strings' +'eval' '_precommand' +'eview' '_vim' +'evim' '_vim' +'evince' '_evince' +'ex' '_vi' +'exec' '_exec' +'expand' '_unexpand' +'export' '_typeset' +'express' '_webbrowser' +'extcheck' '_java' +'extractres' '_psutils' +'extrapkg' '_devtools' +'extra-x86_64-build' '_devtools' +'fakeroot' '_fakeroot' +'false' '_nothing' +'fc' '_fc' +'fc-list' '_xft_fonts' +'fc-match' '_xft_fonts' +'fd' '_fd' +'feh' '_feh' +'fetch-ebook-metadata' '_calibre' +'fetchmail' '_fetchmail' +'ffmpeg' '_ffmpeg' +'fg' '_jobs_fg' +'fgrep' '_grep' +'figlet' '_figlet' +'filterdiff' '_patchutils' +'find' '_find' +'findaffix' '_ispell' +'finddeps' '_devtools' +'findmnt' '_findmnt' +'finger' '_finger' +'firefox' '_mozilla' +'-first-' '_first' +'fixdlsrps' '_psutils' +'fixfmps' '_psutils' +'fixmacps' '_psutils' +'fixpsditps' '_psutils' +'fixpspps' '_psutils' +'fixscribeps' '_psutils' +'fixtpps' '_psutils' +'fixwfwps' '_psutils' +'fixwpps' '_psutils' +'fixwwps' '_psutils' +'flac' '_flac' +'flatpak' '_flatpak' +'flex' '_flex' +'flex++' '_flex' +'flipdiff' '_patchutils' +'flist' '_mh' +'flists' '_mh' +'float' '_typeset' +'fmt' '_fmt' +'fmttest' '_mh' +'fned' '_zed' +'fnext' '_mh' +'fold' '_fold' +'folder' '_mh' +'folders' '_mh' +'foot' '_foot' +'footclient' '_footclient' +'fortune' '_fortune' +'forw' '_mh' +'fprev' '_mh' +'free' '_free' +'freebsd-make' '_make' +'freezer' '_openstack' +'fsh' '_fsh' +'ftp' '_hosts' +'functions' '_typeset' +'fuser' '_fuser' +'fusermount' '_fusermount' +'fwhois' '_whois' +'g++' '_gcc' +'galeon' '_webbrowser' +'gawk' '_awk' +'gb2sum' '_md5sum' +'gbase32' '_base64' +'gbase64' '_base64' +'gbasename' '_basename' +'gcat' '_cat' +'gcc' '_gcc' +'gccgo' '_go' +'gchgrp' '_chown' +'gchmod' '_chmod' +'gchown' '_chown' +'gchroot' '_chroot' +'gcksum' '_cksum' +'gcmp' '_cmp' +'gcomm' '_comm' +'gcore' '_gcore' +'gcp' '_cp' +'gcut' '_cut' +'gdate' '_date' +'gdb' '_gdb' +'gdd' '_dd' +'gdf' '_df' +'gdiff' '_diff' +'gdu' '_du' +'geany' '_geany' +'gegrep' '_grep' +'gem' '_gem' +'genfstab' '_archinstallscripts' +'genisoimage' '_genisoimage' +'genv' '_env' +'get' '_sccs' +'getafm' '_psutils' +'getconf' '_getconf' +'getent' '_getent' +'getfacl' '_getfacl' +'getfacl.exe' '_getfacl' +'getfattr' '_attr' +'getmail' '_getmail' +'getopt' '_getopt' +'getopts' '_vars' +'gex' '_vim' +'gexpand' '_unexpand' +'gfgrep' '_grep' +'gfind' '_find' +'gfmt' '_fmt' +'gfold' '_fold' +'ggetopt' '_getopt' +'ggrep' '_grep' +'ggv' '_gnome-gv' +'gh' '_gh' +'ghead' '_head' +'ghostscript' '_ghostscript' +'ghostview' '_pspdf' +'gid' '_id' +'ginstall' '_install' +'git' '_git' +'git-cvsserver' '_git' +'gitk' '_git' +'git-receive-pack' '_git' +'git-shell' '_git' +'git-upload-archive' '_git' +'git-upload-pack' '_git' +'gjoin' '_join' +'glance' '_openstack' +'gln' '_ln' +'global' '_global' +'glocate' '_locate' +'gls' '_ls' +'gm' '_graphicsmagick' +'gmake' '_make' +'gmd5sum' '_md5sum' +'gmkdir' '_mkdir' +'gmkfifo' '_mkfifo' +'gmknod' '_mknod' +'gmktemp' '_mktemp' +'gmplayer' '_mplayer' +'gmv' '_mv' +'gnl' '_nl' +'gnocchi' '_openstack' +'gnome-gv' '_gnome-gv' +'gnome-unstable-x86_64-build' '_devtools' +'gnumfmt' '_numfmt' +'gnupod_addsong' '_gnupod' +'gnupod_addsong.pl' '_gnupod' +'gnupod_check' '_gnupod' +'gnupod_check.pl' '_gnupod' +'gnupod_INIT' '_gnupod' +'gnupod_INIT.pl' '_gnupod' +'gnupod_search' '_gnupod' +'gnupod_search.pl' '_gnupod' +'gnutls-cli' '_gnutls' +'gnutls-cli-debug' '_gnutls' +'gnutls-serv' '_gnutls' +'god' '_od' +'gofmt' '_go' +'gpasswd' '_gpasswd' +'gpaste' '_paste' +'gpaste-client' '_gpaste-client' +'gpatch' '_patch' +'gpg' '_gpg' +'gpg2' '_gpg' +'gpgv' '_gpg' +'gpg-zip' '_gpg' +'gphoto2' '_gphoto2' +'gprintenv' '_printenv' +'gprof' '_gprof' +'gqview' '_gqview' +'gradle' '_gradle' +'gradlew' '_gradle' +'grail' '_webbrowser' +'greadlink' '_readlink' +'grep' '_grep' +'grepdiff' '_patchutils' +'grm' '_rm' +'grmdir' '_rmdir' +'groff' '_groff' +'groupadd' '_user_admin' +'groupdel' '_groups' +'groupmod' '_user_admin' +'groups' '_users' +'growisofs' '_growisofs' +'gs' '_ghostscript' +'gsbj' '_pspdf' +'gsdj' '_pspdf' +'gsdj500' '_pspdf' +'gsed' '_sed' +'gseq' '_seq' +'gsettings' '_gsettings' +'gsha1sum' '_md5sum' +'gsha224sum' '_md5sum' +'gsha256sum' '_md5sum' +'gsha384sum' '_md5sum' +'gsha512sum' '_md5sum' +'gshred' '_shred' +'gshuf' '_shuf' +'gslj' '_pspdf' +'gslp' '_pspdf' +'gsnd' '_pspdf' +'gsort' '_sort' +'gsplit' '_split' +'gstat' '_stat' +'gstdbuf' '_stdbuf' +'gstrings' '_strings' +'gstty' '_stty' +'gsum' '_cksum' +'gtac' '_tac' +'gtail' '_tail' +'gtar' '_tar' +'gtee' '_tee' +'gtimeout' '_timeout' +'gtouch' '_touch' +'gtr' '_tr' +'gtty' '_tty' +'guilt' '_guilt' +'guilt-add' '_guilt' +'guilt-applied' '_guilt' +'guilt-delete' '_guilt' +'guilt-files' '_guilt' +'guilt-fold' '_guilt' +'guilt-fork' '_guilt' +'guilt-header' '_guilt' +'guilt-help' '_guilt' +'guilt-import' '_guilt' +'guilt-import-commit' '_guilt' +'guilt-init' '_guilt' +'guilt-new' '_guilt' +'guilt-next' '_guilt' +'guilt-patchbomb' '_guilt' +'guilt-pop' '_guilt' +'guilt-prev' '_guilt' +'guilt-push' '_guilt' +'guilt-rebase' '_guilt' +'guilt-refresh' '_guilt' +'guilt-rm' '_guilt' +'guilt-series' '_guilt' +'guilt-status' '_guilt' +'guilt-top' '_guilt' +'guilt-unapplied' '_guilt' +'guname' '_uname' +'gunexpand' '_unexpand' +'guniq' '_uniq' +'gunzip' '_gzip' +'guptime' '_uptime' +'gv' '_gv' +'gview' '_vim' +'gvim' '_vim' +'gvimdiff' '_vim' +'gwc' '_wc' +'gwho' '_who' +'gxargs' '_xargs' +'gzcat' '_gzip' +'gzegrep' '_grep' +'gzfgrep' '_grep' +'gzgrep' '_grep' +'gzilla' '_webbrowser' +'gzip' '_gzip' +'hash' '_hash' +'hd' '_hexdump' +'head' '_head' +'heat' '_openstack' +'_helix' '_helix' +'helix' '_helix' +'help' '_sccs' +'hexdump' '_hexdump' +'hg' '_hg' +'hilite' '_precommand' +'histed' '_zed' +'history' '_fc' +'host' '_host' +'hostname' '_hostname' +'hostnamectl' '_hostnamectl' +'hotjava' '_webbrowser' +'htop' '_htop' +'hub' '_hub' +'iceweasel' '_mozilla' +'icombine' '_ispell' +'iconv' '_iconv' +'iconvconfig' '_iconvconfig' +'id' '_id' +'identify' '_imagemagick' +'ifconfig' '_ifconfig' +'ifdown' '_net_interfaces' +'iftop' '_iftop' +'ifup' '_net_interfaces' +'ijoin' '_ispell' +'import' '_imagemagick' +'inc' '_mh' +'includeres' '_psutils' +'info' '_texinfo' +'infocmp' '_terminals' +'initctl' '_initctl' +'initdb' '_postgresql' +'insmod' '_modutils' +'install' '_install' +'install-info' '_texinfo' +'integer' '_typeset' +'interdiff' '_patchutils' +'ionice' '_ionice' +'iostat' '_iostat' +'ip' '_ip' +'ip6tables' '_iptables' +'ip6tables-restore' '_iptables' +'ip6tables-save' '_iptables' +'ipkg' '_opkg' +'ipsec' '_ipsec' +'ipset' '_ipset' +'iptables' '_iptables' +'iptables-restore' '_iptables' +'iptables-save' '_iptables' +'irb' '_ruby' +'ironic' '_openstack' +'irssi' '_irssi' +'isag' '_sysstat' +'ispell' '_ispell' +'iwconfig' '_iwconfig' +'jadetex' '_tex' +'jar' '_java' +'jarsigner' '_java' +'java' '_java' +'javac' '_java' +'javadoc' '_java' +'javah' '_java' +'javap' '_java' +'jdb' '_java' +'jobs' '_jobs_builtin' +'joe' '_joe' +'join' '_join' +'journalctl' '_journalctl' +'jq' '_jq' +'kdeconnect-cli' '_kdeconnect' +'kde-unstable-x86_64-build' '_devtools' +'kernel-install' '_kernel-install' +'keystone' '_openstack' +'keytool' '_java' +'kfmclient' '_kfmclient' +'kill' '_kill' +'killall' '_killall' +'killall5' '_killall' +'kioclient' '_kfmclient' +'knock' '_knock' +'konqueror' '_webbrowser' +'kpartx' '_kpartx' +'kpdf' '_pdf' +'ksh' '_sh' +'ksh88' '_sh' +'ksh93' '_sh' +'kvno' '_kvno' +'last' '_last' +'lastb' '_last' +'latex' '_tex' +'latexmk' '_tex' +'ldconfig' '_ldconfig' +'ldconfig.real' '_ldconfig' +'ldd' '_ldd' +'less' '_less' +'let' '_math' +'lftp' '_ncftp' +'lha' '_lha' +'libinput' '_libinput' +'light' '_webbrowser' +'limit' '_limit' +'links' '_links' +'links2' '_links' +'linux' '_uml' +'lldb' '_lldb' +'llvm-g++' '_gcc' +'llvm-gcc' '_gcc' +'llvm-objdump' '_objdump' +'ln' '_ln' +'loadkeys' '_loadkeys' +'local' '_typeset' +'locale' '_locale' +'localectl' '_localectl' +'localedef' '_localedef' +'locate' '_locate' +'log' '_nothing' +'logger' '_logger' +'loginctl' '_loginctl' +'logname' '_nothing' +'look' '_look' +'losetup' '_losetup' +'lp' '_lp' +'lpadmin' '_lp' +'lpinfo' '_lp' +'lpoptions' '_lp' +'lpq' '_lp' +'lpr' '_lp' +'lprm' '_lp' +'lpstat' '_lp' +'lrf2lrs' '_calibre' +'lrfviewer' '_calibre' +'ls' '_ls' +'lsattr' '_lsattr' +'lsblk' '_lsblk' +'lsdiff' '_patchutils' +'lsinitcpio' '_mkinitcpio' +'lsmod' '_modutils' +'lsns' '_lsns' +'lsof' '_lsof' +'lsusb' '_lsusb' +'ltrace' '_ltrace' +'lua' '_lua' +'luarocks' '_luarocks' +'lynx' '_lynx' +'lz4' '_lz4' +'lz4c' '_lz4' +'lz4c32' '_lz4' +'lz4cat' '_lz4' +'lzcat' '_xz' +'lzma' '_xz' +'lzop' '_lzop' +'mac2unix' '_dos2unix' +'machinectl' '_machinectl' +'magnum' '_openstack' +'mail' '_mail' +'Mail' '_mail' +'mailx' '_mail' +'make' '_make' +'makechrootpkg' '_devtools' +'makeinfo' '_texinfo' +'makepkg' '_pacman' +'makerepropkg' '_devtools' +'man' '_man' +'manage.py' '_django' +'manila' '_openstack' +'mark' '_mh' +'mat' '_mat' +'mat2' '_mat2' +'-math-' '_math' +'matlab' '_matlab' +'mattrib' '_mtools' +'mcd' '_mtools' +'mcopy' '_mtools' +'md2' '_cksum' +'md4' '_cksum' +'md5' '_cksum' +'md5sum' '_md5sum' +'mdadm' '_mdadm' +'mdel' '_mtools' +'mdeltree' '_mtools' +'mdir' '_mtools' +'mdu' '_mtools' +'mencal' '_mencal' +'mere' '_mere' +'merge' '_rcs' +'metaflac' '_flac' +'mformat' '_mtools' +'mgv' '_pspdf' +'mhfixmsg' '_mh' +'mhlist' '_mh' +'mhmail' '_mh' +'mhn' '_mh' +'mhparam' '_mh' +'mhpath' '_mh' +'mhshow' '_mh' +'mhstore' '_mh' +'mii-tool' '_mii-tool' +'mistral' '_openstack' +'mkarchroot' '_devtools' +'mkdir' '_mkdir' +'mkfifo' '_mkfifo' +'mkinitcpio' '_mkinitcpio' +'mkisofs' '_growisofs' +'mknod' '_mknod' +'mksh' '_sh' +'mktemp' '_mktemp' +'mktunes' '_gnupod' +'mktunes.pl' '_gnupod' +'mlabel' '_mtools' +'mlocate' '_locate' +'mmd' '_mtools' +'mmm' '_webbrowser' +'mmount' '_mtools' +'mmove' '_mtools' +'modinfo' '_modutils' +'modprobe' '_modutils' +'module' '_module' +'mogrify' '_imagemagick' +'monasca' '_openstack' +'mondoarchive' '_mondo' +'montage' '_imagemagick' +'moosic' '_moosic' +'Mosaic' '_webbrowser' +'mosh' '_mosh' +'mount' '_mount' +'mozilla' '_mozilla' +'mozilla-firefox' '_mozilla' +'mozilla-xremote-client' '_mozilla' +'mpc' '_mpc' +'mplayer' '_mplayer' +'mpstat' '_sysstat' +'mpv' '_mpv' +'mr' '_myrepos' +'mrd' '_mtools' +'mread' '_mtools' +'mren' '_mtools' +'msgchk' '_mh' +'mt' '_mt' +'mtn' '_monotone' +'mtoolstest' '_mtools' +'mtr' '_mtr' +'mtype' '_mtools' +'multilib-build' '_devtools' +'multilibpkg' '_devtools' +'multilib-staging-build' '_devtools' +'multilib-testing-build' '_devtools' +'multilib-testingpkg' '_devtools' +'munchlist' '_ispell' +'mupdf' '_mupdf' +'murano' '_openstack' +'mush' '_mail' +'mutt' '_mutt' +'mv' '_mv' +'mvim' '_vim' +'mx' '_hosts' +'mysql' '_mysql_utils' +'mysqladmin' '_mysql_utils' +'mysqldiff' '_mysqldiff' +'mysqldump' '_mysql_utils' +'mysqlimport' '_mysql_utils' +'mysqlshow' '_mysql_utils' +'nail' '_mail' +'native2ascii' '_java' +'nautilus' '_nautilus' +'nawk' '_awk' +'nc' '_netcat' +'ncal' '_cal' +'ncftp' '_ncftp' +'ncl' '_nedit' +'nedit' '_nedit' +'nedit-nc' '_nedit' +'netcat' '_netcat' +'netrik' '_webbrowser' +'netscape' '_netscape' +'netstat' '_netstat' +'networkctl' '_networkctl' +'neutron' '_openstack' +'new' '_mh' +'newgrp' '_groups' +'next' '_mh' +'nginx' '_nginx' +'ngrep' '_ngrep' +'ngrok' '_ngrok' +'nice' '_nice' +'ninja' '_ninja' +'nix' '_nix' +'nkf' '_nkf' +'nl' '_nl' +'nm' '_nm' +'nmap' '_nmap' +'nmblookup' '_samba' +'nmcli' '_networkmanager' +'nocorrect' '_precommand' +'noglob' '_precommand' +'nohup' '_precommand' +'nova' '_openstack' +'npm' '_npm' +'ns' '_hosts' +'nsenter' '_nsenter' +'nslookup' '_nslookup' +'ntalk' '_other_accounts' +'numfmt' '_numfmt' +'nvim' '_vim' +'objdump' '_objdump' +'od' '_od' +'offload-build' '_devtools' +'ogg123' '_vorbis' +'oggdec' '_vorbis' +'oggenc' '_vorbis' +'ogginfo' '_vorbis' +'oksh' '_sh' +'okular' '_okular' +'oomctl' '_oomctl' +'openstack' '_openstack' +'opera' '_webbrowser' +'opera-next' '_webbrowser' +'opkg' '_opkg' +'opusdec' '_opustools' +'opusenc' '_opustools' +'opusinfo' '_opustools' +'p4' '_perforce' +'p4d' '_perforce' +'pacat' '_pulseaudio' +'paccache' '_paccache' +'pacdiff' '_pacdiff' +'pacignore' '_pacignore' +'pack' '_pack' +'packf' '_mh' +'paclist' '_paclist' +'paclog-pkglist' '_paclog-pkglist' +'pacman' '_pacman' +'pacman-conf' '_pacman' +'pacman-key' '_pacman' +'pacman.static' '_pacman' +'pacmd' '_pulseaudio' +'pacscripts' '_pacscripts' +'pacsearch' '_pacsearch' +'pacsort' '_pacsort' +'pacstrap' '_archinstallscripts' +'pactl' '_pulseaudio' +'pactree' '_pactree' +'padsp' '_pulseaudio' +'pandoc' '_pandoc' +'paplay' '_pulseaudio' +'parallel' '_parallel' +'-parameter-' '_parameter' +'parec' '_pulseaudio' +'parecord' '_pulseaudio' +'pass' '_pass' +'passwd' '_users' +'paste' '_paste' +'pasuspender' '_pulseaudio' +'patch' '_patch' +'pax' '_pax' +'pcat' '_pack' +'pcp-htop' '_htop' +'pcred' '_pids' +'pdf2dsc' '_pdf' +'pdf2ps' '_pdf' +'pdffonts' '_pdf' +'pdfimages' '_pdf' +'pdfinfo' '_pdf' +'pdfjadetex' '_tex' +'pdflatex' '_tex' +'pdfopt' '_pdf' +'pdftex' '_tex' +'pdftexi2dvi' '_texinfo' +'pdftk' '_pdftk' +'pdftopbm' '_pdf' +'pdftops' '_pdf' +'pdftotext' '_pdf' +'pdksh' '_sh' +'perf' '_perf' +'perl' '_perl' +'perldoc' '_perldoc' +'pfiles' '_pids' +'pflags' '_pids' +'pg_config' '_postgresql' +'pg_ctl' '_postgresql' +'pg_dump' '_postgresql' +'pg_dumpall' '_postgresql' +'pg_isready' '_postgresql' +'pgrep' '_pgrep' +'pg_restore' '_postgresql' +'pg_upgrade' '_postgresql' +'php' '_php' +'pick' '_mh' +'picocom' '_picocom' +'pidof' '_pidof' +'pidstat' '_sysstat' +'pigz' '_gzip' +'pine' '_pine' +'pinef' '_pine' +'pinfo' '_texinfo' +'ping' '_ping' +'ping6' '_ping' +'pkgadd' '_pkgadd' +'pkg-config' '_pkg-config' +'pkgctl' '_devtools' +'pkgfile' '_pkgfile' +'pkginfo' '_pkginfo' +'pkgrm' '_pkgrm' +'pkill' '_pgrep' +'pldd' '_pids' +'pmake' '_make' +'pman' '_perl_modules' +'pmap' '_pmap' +'pmcat' '_perl_modules' +'pmdesc' '_perl_modules' +'pmeth' '_perl_modules' +'pmexp' '_perl_modules' +'pmfunc' '_perl_modules' +'pmload' '_perl_modules' +'pmls' '_perl_modules' +'pmpath' '_perl_modules' +'pmvers' '_perl_modules' +'podgrep' '_perl_modules' +'podman' '_podman' +'podman-remote' '_podman-remote' +'podpath' '_perl_modules' +'podtoc' '_perl_modules' +'poff' '_pon' +'policytool' '_java' +'pon' '_pon' +'popd' '_directory_stack' +'postconf' '_postfix' +'postgres' '_postgresql' +'postmaster' '_postgresql' +'postqueue' '_postfix' +'postsuper' '_postfix' +'pr' '_pr' +'prev' '_mh' +'print' '_print' +'printenv' '_printenv' +'printf' '_print' +'prompt' '_prompt' +'prove' '_prove' +'prs' '_sccs' +'prt' '_sccs' +'prun' '_pids' +'ps' '_ps' +'ps2ascii' '_pspdf' +'ps2epsi' '_postscript' +'ps2pdf' '_postscript' +'ps2pdf12' '_postscript' +'ps2pdf13' '_postscript' +'ps2pdf14' '_postscript' +'ps2pdfwr' '_postscript' +'ps2ps' '_postscript' +'psbook' '_psutils' +'psed' '_sed' +'psig' '_pids' +'psmerge' '_psutils' +'psmulti' '_postscript' +'psnup' '_psutils' +'psql' '_postgresql' +'psresize' '_psutils' +'psselect' '_psutils' +'pstack' '_pids' +'pstoedit' '_pspdf' +'pstop' '_pids' +'pstops' '_psutils' +'pstotgif' '_pspdf' +'pswrap' '_postscript' +'ptx' '_ptx' +'pulseaudio' '_pulseaudio' +'pump' '_pump' +'pushd' '_cd' +'pv' '_pv' +'pwait' '_pids' +'pwdx' '_pids' +'pwgen' '_pwgen' +'pyhtmlizer' '_twisted' +'qdbus' '_qdbus' +'qiv' '_qiv' +'qpdf' '_qpdf' +'quilt' '_quilt' +'r' '_fc' +'rake' '_rake' +'rankmirrors' '_rankmirrors' +'ranlib' '_ranlib' +'rar' '_rar' +'rc' '_sh' +'rclone' '_rclone' +'rcp' '_rlogin' +'rcs' '_rcs' +'rcsdiff' '_rcs' +'rdesktop' '_rdesktop' +'read' '_read' +'readelf' '_readelf' +'readlink' '_readlink' +'readonly' '_typeset' +'-redirect-' '_redirect' +'-redirect-,<,bunzip2' '_bzip2' +'-redirect-,<,bzip2' '_bzip2' +'-redirect-,>,bzip2' '_bzip2' +'-redirect-,<,compress' '_compress' +'-redirect-,>,compress' '_compress' +'-redirect-,-default-,-default-' '_files' +'-redirect-,<,gunzip' '_gzip' +'-redirect-,<,gzip' '_gzip' +'-redirect-,>,gzip' '_gzip' +'-redirect-,<,uncompress' '_compress' +'-redirect-,<,unxz' '_xz' +'-redirect-,<,xz' '_xz' +'-redirect-,>,xz' '_xz' +'refile' '_mh' +'rehash' '_hash' +'reindexdb' '_postgresql' +'reload' '_initctl' +'remsh' '_rlogin' +'renice' '_renice' +'repl' '_mh' +'resolvectl' '_resolvectl' +'restart' '_initctl' +'restic' '_restic' +'retawq' '_webbrowser' +'rg' '_rg' +'rgrep' '_grep' +'rgview' '_vim' +'rgvim' '_vim' +'ri' '_ri' +'rlogin' '_rlogin' +'rm' '_rm' +'rmd160' '_cksum' +'rmdel' '_sccs' +'rmdir' '_rmdir' +'rmf' '_mh' +'rmic' '_java' +'rmid' '_java' +'rmiregistry' '_java' +'rmm' '_mh' +'rmmod' '_modutils' +'route' '_route' +'rrdtool' '_rrdtool' +'rsh' '_rlogin' +'rsync' '_rsync' +'rtin' '_tin' +'rubber' '_rubber' +'rubber-info' '_rubber' +'rubber-pipe' '_rubber' +'ruby' '_ruby' +'ruby-mri' '_ruby' +'run-help' '_run-help' +'rup' '_hosts' +'rusage' '_precommand' +'rustup' '_rustup' +'rview' '_vim' +'rvim' '_vim' +'rwho' '_hosts' +'rxvt' '_urxvt' +'s2p' '_sed' +'sact' '_sccs' +'sadf' '_sysstat' +'sahara' '_openstack' +'sar' '_sysstat' +'scan' '_mh' +'sccs' '_sccs' +'sccsdiff' '_sccs' +'sched' '_sched' +'schedtool' '_schedtool' +'scons' '_scons' +'scp' '_ssh' +'screen' '_screen' +'script' '_script' +'scriptreplay' '_script' +'seaf-cli' '_seafile' +'sed' '_sed' +'senlin' '_openstack' +'seq' '_seq' +'serialver' '_java' +'service' '_service' +'set' '_set' +'setfacl' '_setfacl' +'setfacl.exe' '_setfacl' +'setfattr' '_attr' +'setopt' '_setopt' +'setpriv' '_setpriv' +'setsid' '_setsid' +'setxkbmap' '_setxkbmap' +'sftp' '_ssh' +'sh' '_sh' +'sha1' '_cksum' +'sha1sum' '_md5sum' +'sha224sum' '_md5sum' +'sha256' '_cksum' +'sha256sum' '_md5sum' +'sha384' '_cksum' +'sha384sum' '_md5sum' +'sha512' '_cksum' +'sha512sum' '_md5sum' +'sha512t256' '_cksum' +'shasum' '_shasum' +'shift' '_arrays' +'show' '_mh' +'showchar' '_psutils' +'showmount' '_showmount' +'shred' '_shred' +'shuf' '_shuf' +'shutdown' '_shutdown' +'sisu' '_sisu' +'skein1024' '_cksum' +'skein256' '_cksum' +'skein512' '_cksum' +'skipstone' '_webbrowser' +'slabtop' '_slabtop' +'slitex' '_tex' +'slocate' '_locate' +'slogin' '_ssh' +'slrn' '_slrn' +'smartctl' '_smartmontools' +'smbclient' '_samba' +'smbcontrol' '_samba' +'smbstatus' '_samba' +'snapper' '_snapper' +'soa' '_hosts' +'socket' '_socket' +'sogrep' '_devtools' +'sort' '_sort' +'sortm' '_mh' +'source' '_source' +'spamassassin' '_spamassassin' +'split' '_split' +'splitdiff' '_patchutils' +'spt' '_spt' +'sqlite' '_sqlite' +'sqlite3' '_sqlite' +'sqsh' '_sqsh' +'sr' '_surfraw' +'srptool' '_gnutls' +'ss' '_ss' +'ssh' '_ssh' +'ssh-add' '_ssh' +'ssh-agent' '_ssh' +'ssh-copy-id' '_ssh' +'sshfs' '_sshfs' +'ssh-keygen' '_ssh' +'ssh-keyscan' '_ssh' +'stagingpkg' '_devtools' +'staging-x86_64-build' '_devtools' +'star' '_tar' +'start' '_initctl' +'stat' '_stat' +'status' '_initctl' +'stdbuf' '_stdbuf' +'stg' '_stgit' +'stop' '_initctl' +'stow' '_stow' +'strace' '_strace' +'strace64' '_strace' +'strftime' '_strftime' +'strings' '_strings' +'strip' '_strip' +'strongswan' '_ipsec' +'stty' '_stty' +'su' '_su' +'subl' '_sublimetext' +'-subscript-' '_subscript' +'sudo' '_sudo' +'sudoedit' '_sudo' +'sum' '_cksum' +'surfraw' '_surfraw' +'sv' '_runit' +'svn' '_subversion' +'svnadmin' '_subversion' +'svnadmin-static' '_subversion' +'svnlite' '_subversion' +'svnliteadmin' '_subversion' +'swaks' '_swaks' +'swanctl' '_swanctl' +'swift' '_swift' +'swiftc' '_swift' +'sync' '_nothing' +'sysctl' '_sysctl' +'systemctl' '_systemctl' +'systemd-analyze' '_systemd-analyze' +'systemd-ask-password' '_systemd' +'systemd-cat' '_systemd' +'systemd-cgls' '_systemd' +'systemd-cgtop' '_systemd' +'systemd-delta' '_systemd-delta' +'systemd-detect-virt' '_systemd' +'systemd-inhibit' '_systemd-inhibit' +'systemd-machine-id-setup' '_systemd' +'systemd-notify' '_systemd' +'systemd-nspawn' '_systemd-nspawn' +'systemd-path' '_systemd-path' +'systemd-resolve' '_resolvectl' +'systemd-run' '_systemd-run' +'systemd-tmpfiles' '_systemd-tmpfiles' +'systemd-tty-ask-password-agent' '_systemd' +'tac' '_tac' +'tacker' '_openstack' +'tail' '_tail' +'talk' '_other_accounts' +'tar' '_tar' +'tardy' '_tardy' +'tcpdump' '_tcpdump' +'tcp_open' '_tcpsys' +'tcptraceroute' '_tcptraceroute' +'tcsh' '_sh' +'tda' '_devtodo' +'tdd' '_devtodo' +'tde' '_devtodo' +'tdr' '_devtodo' +'tee' '_tee' +'telnet' '_telnet' +'testingpkg' '_devtools' +'testing-x86_64-build' '_devtools' +'tex' '_tex' +'texi2any' '_texinfo' +'texi2dvi' '_texinfo' +'texi2pdf' '_texinfo' +'texindex' '_texinfo' +'tg' '_topgit' +'tidy' '_tidy' +'tig' '_git' +'-tilde-' '_tilde' +'time' '_precommand' +'timedatectl' '_timedatectl' +'timeout' '_timeout' +'times' '_nothing' +'tin' '_tin' +'tkconch' '_twisted' +'tkinfo' '_texinfo' +'tla' '_tla' +'tload' '_tload' +'tmux' '_tmux' +'todo' '_devtodo' +'todo.sh' '_todo.sh' +'toilet' '_toilet' +'top' '_top' +'totdconfig' '_totd' +'touch' '_touch' +'tpb' '_tpb' +'tput' '_tput' +'tr' '_tr' +'tracepath' '_tracepath' +'tracepath6' '_tracepath' +'traceroute' '_hosts' +'transmission-remote' '_transmission' +'trap' '_trap' +'tree' '_tree' +'trial' '_twisted' +'trove' '_openstack' +'true' '_nothing' +'truncate' '_truncate' +'truss' '_truss' +'tryaffix' '_ispell' +'tty' '_tty' +'ttyctl' '_ttyctl' +'tunctl' '_uml' +'tune2fs' '_tune2fs' +'tunes2pod' '_gnupod' +'tunes2pod.pl' '_gnupod' +'twidge' '_twidge' +'twist' '_twisted' +'twistd' '_twisted' +'txt' '_hosts' +'type' '_which' +'typeset' '_typeset' +'udevadm' '_udevadm' +'udisksctl' '_udisks2' +'ulimit' '_ulimit' +'uml_mconsole' '_uml' +'uml_moo' '_uml' +'uml_switch' '_uml' +'umount' '_mount' +'unace' '_unace' +'unalias' '_aliases' +'uname' '_uname' +'uncompress' '_compress' +'unexpand' '_unexpand' +'unfunction' '_functions' +'unget' '_sccs' +'unhash' '_unhash' +'uniq' '_uniq' +'unison' '_unison' +'units' '_units' +'unix2dos' '_dos2unix' +'unix2mac' '_dos2unix' +'unlimit' '_limits' +'unlz4' '_lz4' +'unlzma' '_xz' +'unpack' '_pack' +'unpigz' '_gzip' +'unrar' '_rar' +'unset' '_vars' +'unsetopt' '_setopt' +'unshare' '_unshare' +'unwrapdiff' '_patchutils' +'unxz' '_xz' +'unzip' '_zip' +'updpkgsums' '_updpkgsums' +'uptime' '_uptime' +'urxvt' '_urxvt' +'urxvt256c' '_urxvt' +'urxvt256cc' '_urxvt' +'urxvt256c-ml' '_urxvt' +'urxvt256c-mlc' '_urxvt' +'urxvtc' '_urxvt' +'useradd' '_user_admin' +'userdel' '_users' +'usermod' '_user_admin' +'vacuumdb' '_postgresql' +'val' '_sccs' +'valgrind' '_valgrind' +'-value-' '_value' +'-value-,ADB_TRACE,-default-' '_adb' +'-value-,ANDROID_LOG_TAGS,-default-' '_adb' +'-value-,ANDROID_SERIAL,-default-' '_adb' +'-value-,ANSIBLE_INVENTORY_ENABLED,-default-' '_ansible' +'-value-,ANSIBLE_STDOUT_CALLBACK,-default-' '_ansible' +'-value-,ANT_ARGS,-default-' '_ant' +'-value-,CFLAGS,-default-' '_gcc' +'-value-,CPPFLAGS,-default-' '_gcc' +'-value-,CXXFLAGS,-default-' '_gcc' +'-value-,-default-,-command-' '_zargs' +'-value-,-default-,-default-' '_value' +'-value-,DISPLAY,-default-' '_x_display' +'-value-,GREP_OPTIONS,-default-' '_grep' +'-value-,GZIP,-default-' '_gzip' +'-value-,LANG,-default-' '_locales' +'-value-,LANGUAGE,-default-' '_locales' +'-value-,LD_DEBUG,-default-' '_ld_debug' +'-value-,LDFLAGS,-default-' '_gcc' +'-value-,LESSCHARSET,-default-' '_less' +'-value-,LESS,-default-' '_less' +'-value-,LOOPDEV_DEBUG,-default-' '_losetup' +'-value-,LPDEST,-default-' '_printers' +'-value-,MPD_HOST,-default' '_mpc' +'-value-,P4CLIENT,-default-' '_perforce' +'-value-,P4MERGE,-default-' '_perforce' +'-value-,P4PORT,-default-' '_perforce' +'-value-,P4USER,-default-' '_perforce' +'-value-,PERLDOC,-default-' '_perldoc' +'-value-,PRINTER,-default-' '_printers' +'-value-,PROMPT2,-default-' '_ps1234' +'-value-,PROMPT3,-default-' '_ps1234' +'-value-,PROMPT4,-default-' '_ps1234' +'-value-,PROMPT,-default-' '_ps1234' +'-value-,PS1,-default-' '_ps1234' +'-value-,PS2,-default-' '_ps1234' +'-value-,PS3,-default-' '_ps1234' +'-value-,PS4,-default-' '_ps1234' +'-value-,RPROMPT2,-default-' '_ps1234' +'-value-,RPROMPT,-default-' '_ps1234' +'-value-,RPS1,-default-' '_ps1234' +'-value-,RPS2,-default-' '_ps1234' +'-value-,SPROMPT,-default-' '_ps1234' +'-value-,TERM,-default-' '_terminals' +'-value-,TERMINFO_DIRS,-default-' '_dir_list' +'-value-,TZ,-default-' '_time_zone' +'-value-,VALGRIND_OPTS,-default-' '_valgrind' +'-value-,WWW_HOME,-default-' '_urls' +'-value-,XML_CATALOG_FILES,-default-' '_xmlsoft' +'-value-,XZ_DEFAULTS,-default-' '_xz' +'-value-,XZ_OPT,-default-' '_xz' +'-vared-' '_in_vared' +'vared' '_vared' +'vcs_info_hookadd' '_vcs_info' +'vcs_info_hookdel' '_vcs_info' +'vi' '_vi' +'view' '_vi' +'vifm' '_vifm' +'vim' '_vim' +'vimdiff' '_vim' +'virsh' '_libvirt' +'virt-admin' '_libvirt' +'virt-host-validate' '_libvirt' +'virt-pki-validate' '_libvirt' +'virt-xml-validate' '_libvirt' +'visudo' '_visudo' +'vitrage' '_openstack' +'vmstat' '_vmstat' +'vncserver' '_vnc' +'vncviewer' '_vnc' +'vorbiscomment' '_vorbis' +'vpnc' '_vpnc' +'vpnc-connect' '_vpnc' +'vserver' '_vserver' +'w' '_w' +'w3m' '_w3m' +'wait' '_wait' +'watch' '_watch' +'watcher' '_openstack' +'watchexec' '_watchexec' +'wc' '_wc' +'wget' '_wget' +'what' '_sccs' +'whatis' '_man' +'whence' '_which' +'where' '_which' +'whereis' '_whereis' +'which' '_which' +'who' '_who' +'whoami' '_nothing' +'whois' '_whois' +'whom' '_mh' +'wiggle' '_wiggle' +'wipefs' '_wipefs' +'wl-copy' '_wl-copy' +'wl-paste' '_wl-paste' +'wodim' '_cdrecord' +'wpa_cli' '_wpa_cli' +'wpctl' '_wpctl' +'write' '_users_on' +'www' '_webbrowser' +'xargs' '_xargs' +'xattr' '_attr' +'xauth' '_xauth' +'xautolock' '_xautolock' +'xclip' '_xclip' +'xdpyinfo' '_x_utils' +'xdvi' '_xdvi' +'xelatex' '_tex' +'xetex' '_tex' +'xev' '_x_utils' +'xfd' '_x_utils' +'xfig' '_xfig' +'xfontsel' '_x_utils' +'xfreerdp' '_rdesktop' +'xhost' '_x_utils' +'xinput' '_xinput' +'xkill' '_x_utils' +'xli' '_xloadimage' +'xloadimage' '_xloadimage' +'xlsatoms' '_x_utils' +'xlsclients' '_x_utils' +'xml' '_xmlstarlet' +'xmllint' '_xmlsoft' +'xmlstarlet' '_xmlstarlet' +'xmms2' '_xmms2' +'xmodmap' '_xmodmap' +'xmosaic' '_webbrowser' +'xon' '_x_utils' +'xournal' '_xournal' +'xpdf' '_xpdf' +'xping' '_hosts' +'xprop' '_x_utils' +'xrandr' '_xrandr' +'xrdb' '_x_utils' +'xscreensaver-command' '_xscreensaver' +'xset' '_xset' +'xsetbg' '_xloadimage' +'xsetroot' '_x_utils' +'xsltproc' '_xmlsoft' +'xterm' '_xterm' +'xtightvncviewer' '_vnc' +'xtp' '_imagemagick' +'xv' '_xv' +'xview' '_xloadimage' +'xvnc4viewer' '_vnc' +'xvncviewer' '_vnc' +'xwd' '_x_utils' +'xwininfo' '_x_utils' +'xwit' '_xwit' +'xwud' '_x_utils' +'xxd' '_xxd' +'xz' '_xz' +'xzcat' '_xz' +'yafc' '_yafc' +'yash' '_sh' +'ykman' '_ykman' +'youtube-dl' '_youtube-dl' +'ypbind' '_yp' +'ypcat' '_yp' +'ypmatch' '_yp' +'yppasswd' '_yp' +'yppoll' '_yp' +'yppush' '_yp' +'ypserv' '_yp' +'ypset' '_yp' +'ypwhich' '_yp' +'ypxfr' '_yp' +'ytalk' '_other_accounts' +'yt-dlp' '_yt-dlp' +'zargs' '_zargs' +'zcalc' '_zcalc' +'-zcalc-line-' '_zcalc_line' +'zcat' '_zcat' +'zcompile' '_zcompile' +'zcp' '_zmv' +'zdb' '_zfs' +'zdelattr' '_zattr' +'zdump' '_zdump' +'zeal' '_zeal' +'zed' '_zed' +'zegrep' '_grep' +'zen' '_webbrowser' +'zf_chgrp' '_chown' +'zf_chmod' '_chmod' +'zf_chown' '_chown' +'zfgrep' '_grep' +'zf_ln' '_ln' +'zf_mkdir' '_mkdir' +'zf_mv' '_mv' +'zf_rm' '_rm' +'zf_rmdir' '_rmdir' +'zfs' '_zfs' +'zgetattr' '_zattr' +'zgrep' '_grep' +'zip' '_zip' +'zipinfo' '_zip' +'zle' '_zle' +'zlistattr' '_zattr' +'zln' '_zmv' +'zmail' '_mail' +'zmodload' '_zmodload' +'zmv' '_zmv' +'zone' '_hosts' +'zparseopts' '_zparseopts' +'zpool' '_zfs' +'zpty' '_zpty' +'zsetattr' '_zattr' +'zsh' '_zsh' +'zsh-mime-handler' '_zsh-mime-handler' +'zsocket' '_zsocket' +'zstat' '_stat' +'zstyle' '_zstyle' +'ztodo' '_ztodo' +'zun' '_openstack' +'zxpdf' '_xpdf' +) + +_services=( +'bzcat' 'bunzip2' +'communitypkg' 'commitpkg' +'community-stagingpkg' 'commitpkg' +'community-testingpkg' 'commitpkg' +'corepkg' 'commitpkg' +'extrapkg' 'commitpkg' +'extra-x86_64-build' 'archbuild' +'gchgrp' 'chgrp' +'gchown' 'chown' +'gnome-unstable-x86_64-build' 'archbuild' +'gnupod_addsong.pl' 'gnupod_addsong' +'gnupod_check.pl' 'gnupod_check' +'gnupod_INIT.pl' 'gnupod_INIT' +'gnupod_search.pl' 'gnupod_search' +'gpg2' 'gpg' +'gzcat' 'gunzip' +'iceweasel' 'firefox' +'kde-unstable-x86_64-build' 'archbuild' +'lzcat' 'unxz' +'lzma' 'xz' +'Mail' 'mail' +'mailx' 'mail' +'mktunes.pl' 'mktunes' +'multilib-build' 'archbuild' +'multilibpkg' 'commitpkg' +'multilib-staging-build' 'archbuild' +'multilib-testing-build' 'archbuild' +'multilib-testingpkg' 'commitpkg' +'nail' 'mail' +'ncl' 'nc' +'nedit-nc' 'nc' +'pacman.static' 'pacman' +'pcat' 'unpack' +'-redirect-,<,bunzip2' 'bunzip2' +'-redirect-,<,bzip2' 'bzip2' +'-redirect-,>,bzip2' 'bunzip2' +'-redirect-,<,compress' 'compress' +'-redirect-,>,compress' 'uncompress' +'-redirect-,<,gunzip' 'gunzip' +'-redirect-,<,gzip' 'gzip' +'-redirect-,>,gzip' 'gunzip' +'-redirect-,<,uncompress' 'uncompress' +'-redirect-,<,unxz' 'unxz' +'-redirect-,<,xz' 'xz' +'-redirect-,>,xz' 'unxz' +'remsh' 'rsh' +'slogin' 'ssh' +'stagingpkg' 'commitpkg' +'staging-x86_64-build' 'archbuild' +'svnadmin-static' 'svnadmin' +'svnlite' 'svn' +'svnliteadmin' 'svnadmin' +'testingpkg' 'commitpkg' +'testing-x86_64-build' 'archbuild' +'tunes2pod.pl' 'tunes2pod' +'unlzma' 'unxz' +'xelatex' 'latex' +'xetex' 'tex' +'xzcat' 'unxz' +'zf_chgrp' 'chgrp' +'zf_chown' 'chown' +) + +_patcomps=( +'*/(init|rc[0-9S]#).d/*' '_init_d' +) + +_postpatcomps=( +'_*' '_compadd' +'c++-*' '_gcc' +'g++-*' '_gcc' +'gcc-*' '_gcc' +'gem[0-9.]#' '_gem' +'lua[0-9.-]##' '_lua' +'(p[bgpn]m*|*top[bgpn]m)' '_pbm' +'php[0-9.-]' '_php' +'pydoc[0-9.]#' '_pydoc' +'python[0-9.]#' '_python' +'qemu(|-system-*)' '_qemu' +'(ruby|[ei]rb)[0-9.]#' '_ruby' +'shasum(|5).*' '_shasum' +'(texi(2*|ndex))' '_texi' +'(tiff*|*2tiff|pal2rgb)' '_tiff' +'-value-,BORG_*,-default-' '_borg' +'-value-,(ftp|http(|s))_proxy,-default-' '_urls' +'-value-,LC_*,-default-' '_locales' +'-value-,*path,-default-' '_directories' +'-value-,*PATH,-default-' '_dir_list' +'-value-,RUBY(LIB|OPT|PATH),-default-' '_ruby' +'*/X11(|R<4->)/*' '_x_arguments' +'yodl(|2*)' '_yodl' +'zf*' '_zftp' +) + +_compautos=( +'_call_program' '+X' +) + +zle -C _bash_complete-word .complete-word _bash_completions +zle -C _bash_list-choices .list-choices _bash_completions +zle -C _complete_debug .complete-word _complete_debug +zle -C _complete_help .complete-word _complete_help +zle -C _complete_tag .complete-word _complete_tag +zle -C _correct_filename .complete-word _correct_filename +zle -C _correct_word .complete-word _correct_word +zle -C _expand_alias .complete-word _expand_alias +zle -C _expand_word .complete-word _expand_word +zle -C _history-complete-newer .complete-word _history_complete_word +zle -C _history-complete-older .complete-word _history_complete_word +zle -C _list_expansions .list-choices _expand_word +zle -C _most_recent_file .complete-word _most_recent_file +zle -C _next_tags .list-choices _next_tags +zle -C _read_comp .complete-word _read_comp +bindkey '^X^R' _read_comp +bindkey '^X?' _complete_debug +bindkey '^XC' _correct_filename +bindkey '^Xa' _expand_alias +bindkey '^Xc' _correct_word +bindkey '^Xd' _list_expansions +bindkey '^Xe' _expand_word +bindkey '^Xh' _complete_help +bindkey '^Xm' _most_recent_file +bindkey '^Xn' _next_tags +bindkey '^Xt' _complete_tag +bindkey '^X~' _bash_list-choices +bindkey '^[,' _history-complete-newer +bindkey '^[/' _history-complete-older +bindkey '^[~' _bash_complete-word + +autoload -Uz _alacritty _archinstallscripts _aur _aur_local_packages _aur_packages \ + _aur_repositories _bat _bootctl _borg _bun \ + _busctl _bw _bwrap _caddy _calibre \ + _cargo _checkupdates _chezmoi _coredumpctl _crystal \ + _curl _deno _dephell _devtools _docker \ + _dotnet _downgrade _fd _flatpak _foot \ + _footclient _gh _gpaste-client _helix _hg \ + _hostnamectl _hub _journalctl _kernel-install _libinput \ + _localectl _loginctl _machinectl _mkinitcpio _mpv \ + _networkctl _ngrok _ninja _nix _oomctl \ + _paccache _pacdiff _pacignore _paclist _paclog-pkglist \ + _pacman _pacscripts _pacsearch _pacsort _pactree \ + _parallel _pass _pkgfile _podman _podman-remote \ + _pulseaudio _qpdf _rankmirrors _resolvectl _restic \ + _rg _rustup _sd_hosts_or_user_at_host _sd_machines _sd_outputmodes \ + _sd_unit_files _snapper _spt _systemctl _systemd \ + _systemd-analyze _systemd-delta _systemd-inhibit _systemd-nspawn _systemd-path \ + _systemd-run _systemd-tmpfiles _timedatectl _udevadm _udisks2 \ + _updpkgsums _vifm _watchexec _wl-copy _wl-paste \ + _wpctl _ykman _youtube-dl _yt-dlp _cdr \ + _all_labels _all_matches _alternative _approximate _arg_compile \ + _arguments _bash_completions _cache_invalid _call_function _combination \ + _complete _complete_debug _complete_help _complete_help_generic _complete_tag \ + _comp_locale _correct _correct_filename _correct_word _describe \ + _description _dispatch _expand _expand_alias _expand_word \ + _extensions _external_pwds _generic _guard _history \ + _history_complete_word _ignored _list _main_complete _match \ + _menu _message _most_recent_file _multi_parts _next_label \ + _next_tags _normal _nothing _numbers _oldlist \ + _pick_variant _prefix _read_comp _regex_arguments _regex_words \ + _requested _retrieve_cache _sep_parts _sequence _set_command \ + _setup _store_cache _sub_commands _tags _user_expand \ + _values _wanted _acpi _acpitool _alsa-utils \ + _analyseplugin _basenc _brctl _btrfs _capabilities \ + _chattr _chcon _choom _chrt _cpupower \ + _cryptsetup _dkms _e2label _ethtool _findmnt \ + _free _fuse_arguments _fusermount _fuse_values _gpasswd \ + _htop _iconvconfig _ionice _ipset _iptables \ + _iwconfig _kpartx _losetup _lsattr _lsblk \ + _lsns _lsusb _ltrace _mat _mat2 \ + _mdadm _mii-tool _modutils _mondo _networkmanager \ + _nsenter _opkg _perf _pidof _pmap \ + _qdbus _schedtool _selinux_contexts _selinux_roles _selinux_types \ + _selinux_users _setpriv _setsid _slabtop _ss \ + _sshfs _strace _sysstat _tload _tpb \ + _tracepath _tune2fs _uml _unshare _valgrind \ + _vserver _wakeup_capable_devices _wipefs _wpa_cli _a2ps \ + _aap _abcde _absolute_command_paths _ack _adb \ + _ansible _ant _antiword _apachectl _apm \ + _arch_archives _arch_namespace _arp _arping _asciidoctor \ + _asciinema _at _attr _augeas _avahi \ + _awk _base64 _basename _bash _baudrates \ + _baz _beep _bibtex _bind_addresses _bison \ + _bittorrent _bogofilter _bpf_filters _bpython _bzip2 \ + _bzr _cabal _cal _calendar _canonical_paths \ + _cat _ccal _cdcd _cdrdao _cdrecord \ + _chkconfig _chmod _chown _chroot _chsh \ + _cksum _clay _cmdambivalent _cmdstring _cmp \ + _column _comm _composer _compress _configure \ + _cowsay _cp _cpio _cplay _crontab \ + _cscope _csplit _cssh _ctags _ctags_tags \ + _curl _cut _cvs _darcs _date \ + _date_formats _dates _dbus _dconf _dd \ + _devtodo _df _dhclient _dict _dict_words \ + _diff _diff3 _diff_options _diffstat _dig \ + _directories _dir_list _django _dmesg _dmidecode \ + _dns_types _doas _domains _dos2unix _drill \ + _dropbox _dsh _dtruss _du _dvi \ + _ecasound _ed _elfdump _elinks _email_addresses \ + _enscript _entr _env _espeak _etags \ + _fakeroot _feh _fetchmail _ffmpeg _figlet \ + _file_modes _files _file_systems _find _find_net_interfaces \ + _finger _flac _flex _fmt _fold \ + _fortune _fsh _fuser _gcc _gcore \ + _gdb _gem _genisoimage _getconf _getent \ + _getfacl _getmail _getopt _ghostscript _git \ + _global _global_tags _gnu_generic _gnupod _gnutls \ + _go _gpg _gphoto2 _gprof _gradle \ + _graphicsmagick _grep _groff _groups _growisofs \ + _gsettings _guilt _gzip _have_glob_qual _head \ + _hexdump _host _hostname _hosts _iconv \ + _id _ifconfig _iftop _imagemagick _initctl \ + _init_d _install _iostat _ip _ipsec \ + _irssi _ispell _java _java_class _joe \ + _join _jq _killall _knock _kvno \ + _last _ldconfig _ldd _ld_debug _less \ + _lha _libvirt _links _list_files _lldb \ + _ln _loadkeys _locale _localedef _locales \ + _locate _logger _look _lp _ls \ + _lsof _lua _luarocks _lynx _lz4 \ + _lzop _mail _mailboxes _make _man \ + _md5sum _mencal _mh _mime_types _mkdir \ + _mkfifo _mknod _mktemp _module _monotone \ + _moosic _mosh _mount _mpc _mt \ + _mtools _mtr _mutt _mv _my_accounts \ + _myrepos _mysqldiff _mysql_utils _ncftp _netcat \ + _net_interfaces _netstat _newsgroups _nginx _ngrep \ + _nice _nkf _nl _nm _nmap \ + _npm _nslookup _numfmt _objdump _object_files \ + _od _openstack _opustools _other_accounts _pack \ + _pandoc _paste _patch _patchutils _path_commands \ + _path_files _pax _pbm _pdf _perforce \ + _perl _perl_basepods _perldoc _perl_modules _pgids \ + _pgrep _php _picocom _pids _pine \ + _ping _pkgadd _pkg-config _pkginfo _pkg_instance \ + _pkgrm _pon _ports _postfix _postgresql \ + _postscript _pr _printenv _printers _process_names \ + _prove _ps _pspdf _psutils _ptx \ + _pump _pv _pwgen _pydoc _python \ + _python_modules _qemu _quilt _rake _ranlib \ + _rar _rclone _rcs _readelf _readlink \ + _remote_files _renice _ri _rlogin _rm \ + _rmdir _route _rrdtool _rsync _rubber \ + _ruby _runit _samba _sccs _scons \ + _screen _script _seafile _sed _seq \ + _service _services _setfacl _sh _shasum \ + _showmount _shred _shuf _shutdown _signals \ + _sisu _slrn _smartmontools _socket _sort \ + _spamassassin _split _sqlite _sqsh _ssh \ + _ssh_hosts _stat _stdbuf _stgit _stow \ + _strings _strip _stty _su _subversion \ + _sudo _surfraw _swaks _swanctl _swift \ + _sys_calls _sysctl _tac _tail _tar \ + _tar_archive _tardy _tcpdump _tcptraceroute _tee \ + _telnet _terminals _tex _texi _texinfo \ + _tidy _tiff _tilde_files _timeout _time_zone \ + _tin _tla _tmux _todo.sh _toilet \ + _top _topgit _totd _touch _tput \ + _tr _transmission _tree _truncate _truss \ + _tty _ttys _twidge _twisted _umountable \ + _unace _uname _unexpand _uniq _unison \ + _units _uptime _urls _user_admin _user_at_host \ + _users _users_on _vi _vim _visudo \ + _vmstat _vorbis _vpnc _w _w3m \ + _watch _wc _webbrowser _wget _whereis \ + _who _whois _wiggle _xargs _xmlsoft \ + _xmlstarlet _xmms2 _xxd _xz _yafc \ + _yodl _yp _zcat _zdump _zfs \ + _zfs_dataset _zfs_pool _zip _zsh _acroread \ + _code _dcop _eog _evince _geany \ + _gnome-gv _gqview _gv _kdeconnect _kfmclient \ + _matlab _mozilla _mplayer _mupdf _nautilus \ + _nedit _netscape _okular _pdftk _qiv \ + _rdesktop _setxkbmap _sublimetext _urxvt _vnc \ + _x_arguments _xauth _xautolock _x_borderwidth _xclip \ + _x_color _x_colormapid _x_cursor _x_display _xdvi \ + _x_extension _xfig _x_font _xft_fonts _x_geometry \ + _xinput _x_keysym _xloadimage _x_locale _x_modifier \ + _xmodmap _x_name _xournal _xpdf _xrandr \ + _x_resource _xscreensaver _x_selection_timeout _xset _xt_arguments \ + _xterm _x_title _xt_session_id _x_utils _xv \ + _x_visual _x_window _xwit _zeal _add-zle-hook-widget \ + _add-zsh-hook _alias _aliases __arguments _arrays \ + _assign _autocd _bindkey _brace_parameter _builtin \ + _cd _command _command_names _compadd _compdef \ + _completers _condition _default _delimiters _directory_stack \ + _dirs _disable _dynamic_directory_name _echotc _echoti \ + _emulate _enable _equal _exec _fc \ + _file_descriptors _first _functions _globflags _globqual_delims \ + _globquals _hash _history_modifiers _in_vared _jobs \ + _jobs_bg _jobs_builtin _jobs_fg _kill _limit \ + _limits _math _math_params _mere _module_math_func \ + _options _options_set _options_unset _parameter _parameters \ + _precommand _print _prompt _ps1234 _read \ + _redirect _run-help _sched _set _setopt \ + _source _strftime _subscript _suffix_alias_files _tcpsys \ + _tilde _trap _ttyctl _typeset _ulimit \ + _unhash _user_math_func _value _vared _vars \ + _vcs_info _vcs_info_hooks _wait _which _widgets \ + _zargs _zattr _zcalc _zcalc_line _zcompile \ + _zed _zftp _zle _zmodload _zmv \ + _zparseopts _zpty _zsh-mime-handler _zsocket _zstyle \ + _ztodo +autoload -Uz +X _call_program + +typeset -gUa _comp_assocs +_comp_assocs=( '' ) diff --git a/radish/home/common/dotfiles/zsh/completion b/radish/home/common/dotfiles/zsh/completion new file mode 100644 index 0000000..87e7fee --- /dev/null +++ b/radish/home/common/dotfiles/zsh/completion @@ -0,0 +1,30 @@ +#!/bin/zsh +# The following lines were added by compinstall + +zstyle ':completion:*' completer _expand _complete _ignored _approximate +zstyle ':completion:*' completions 1 +zstyle ':completion:*' expand prefix +zstyle ':completion:*' format '%BCompleting %d%b' +zstyle ':completion:*' glob 1 +zstyle ':completion:*' group-name '' +zstyle ':completion:*' ignore-parents parent pwd +zstyle ':completion:*' insert-unambiguous true +zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s +zstyle ':completion:*' list-suffixes true +zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*' +zstyle ':completion:*' max-errors 1 +zstyle ':completion:*' menu select=3 +zstyle ':completion:*' original true +zstyle ':completion:*' preserve-prefix '//[^/]##/' +zstyle ':completion:*' prompt 'Did you mean...' +zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s +zstyle ':completion:*' squeeze-slashes true +zstyle ':completion:*' substitute 1 +zstyle ':completion:*' verbose true +zstyle ':completion:*' word true +zstyle :compinstall filename "$ZDOTDIR/completion" + +autoload -Uz compinit +compinit +# End of lines added by compinstall diff --git a/radish/home/common/dotfiles/zsh/functions b/radish/home/common/dotfiles/zsh/functions new file mode 100644 index 0000000..7242d70 --- /dev/null +++ b/radish/home/common/dotfiles/zsh/functions @@ -0,0 +1,64 @@ +#!/usr/bin/zsh + +scratch () { + nvim -c ":set ft=$1" $(mktemp) +} + +tsessions() { + tmux list-sessions -F '#{session_name} #{?session_attached,,not_attached}' | \ + awk '/not_attached/{print $1}' +} + +tkill() { + tsessions | fzf | xargs tmux kill-session -t +} + +tswitch() { + tsessions | fzf | xargs tmux switch-client -t +} + +tnew() { + tmux new -d -s "$@" + tmux switch-client -t $1 +} + +asciirec() { + local tempfile=$(mktemp /tmp/asciirec.XXXXX.asciinema.json) + asciinema rec "$tempfile" + fb "$tempfile" + rm "$tempfile" +} + +fbs() { + local url=$1 + local time=${2-5} + + fb <<-HTML | rev | cut -c 2- | rev | xclip + + + + + +

Redirect

+

Redirecting you to ${url}

+ + + HTML + + xclip -o +} + +qrshow() { + local url=$1 + [[ -z "$url" ]] && read url + qrencode -o - "$url" | feh - +} + +envy() { + env $(cat .env | sed '/^\s*#/d') "$@" +} + +add-hash() { + hash -d "$@=$PWD" + echo "hash -d '$@=$PWD'" >> "$ZDOTDIR/hashes" +} diff --git a/radish/home/common/dotfiles/zsh/init b/radish/home/common/dotfiles/zsh/init new file mode 100644 index 0000000..422305d --- /dev/null +++ b/radish/home/common/dotfiles/zsh/init @@ -0,0 +1,79 @@ +#!/bin/zsh + +# History {{{ +HISTFILE="$XDG_CACHE_HOME/zsh/history" +HISTSIZE=100000 +SAVEHIST=100000 +setopt hist_ignore_dups +setopt hist_ignore_space +setopt share_history +setopt autopushd + +mkdir -p $(dirname "$HISTFILE") +# }}} + +# Various options {{{ +setopt autocd extendedglob nomatch notify histfindnodups +unsetopt beep +setopt interactive_comments +# }}} + +# Vim mode +bindkey -v + +# Keybindings {{{ +bindkey '^?' backward-delete-char +bindkey '^h' backward-delete-char +bindkey '^w' backward-kill-word +bindkey '^r' history-incremental-pattern-search-backward +bindkey '^k' history-beginning-search-backward +bindkey '^j' history-beginning-search-forward +bindkey '^p' push-input +bindkey '^ ' fzf-cd-widget +# }}} + +# Prompt {{{ +autoload -Uz vcs_info +precmd_functions+=( vcs_info ) +setopt prompt_subst +PROMPT="%#$([ -n "$IN_NIX_SHELL" ] && echo '%F{blue}ns%f') %1~%(0?..%F{red})>%f " +RPROMPT=\$vcs_info_msg_0_ +zstyle ':vcs_info:git:*' check-for-changes true +zstyle ':vcs_info:git:*' formats '<%b> [%u%c]' +# }}} + +# Safe rm {{{ +alias rm='rm -I ' +setopt rm_star_silent +# }}} + +for file in completion functions; do + [ -f "$XDG_CONFIG_HOME/zsh/$file" ] || touch "$XDG_CONFIG_HOME/zsh/$file" + . "$XDG_CONFIG_HOME/zsh/$file" +done + +# GPG Agent {{{ +export GPG_TTY=$(tty) +gpg-connect-agent updatestartuptty /bye >/dev/null +# }}} + +# Base16 {{{ +export BASE16_SHELL="$HOME/.config/base16-shell/" +[ -n "$PS1" ] && \ + [ -s "$BASE16_SHELL/profile_helper.sh" ] && \ + eval "$("$BASE16_SHELL/profile_helper.sh")" +# }}} + + +# NVM {{{ +#if [ -f /usr/share/nvm/init-nvm.sh ]; then +# source /usr/share/nvm/init-nvm.sh +#fi +# }}} + +# ENVS {{{ +#eval "$(rbenv init -)" +#. /usr/share/nvm/nvm.sh +# }}} + +# vim: set foldmethod=marker diff --git a/radish/home/common/neovim/default.nix b/radish/home/common/neovim/default.nix new file mode 100644 index 0000000..c73eb27 --- /dev/null +++ b/radish/home/common/neovim/default.nix @@ -0,0 +1,433 @@ +{ pkgs, lib, ... }: +{ + imports = [ ../../modules/neovim ]; + + programs.neovim = + let + toLua = lib.generators.toLua { }; + luaMap = rhs: { rhs = rhs; lua = true; options = { silent = true; }; }; + in + { + enable = true; + defaultEditor = true; + options = { + number = true; + expandtab = true; + tabstop = 2; + shiftwidth = 2; + softtabstop = 2; + signcolumn = "yes"; + modeline = true; + hidden = true; + listchars = "tab:▸ ,trail:·"; + list = true; + undofile = true; + winblend = 30; + }; + withTreesitterPlugins = p: [ + p.lua + p.vim + p.vimdoc + p.nix + p.query + p.make + ]; + formatters = [ + { + filetypes = [ "nix" ]; + globs = [ "*.nix" ]; + exe = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"; + stdin = true; + } + { + filetypes = [ "lua" ]; + globs = [ "*.lua" ]; + exe = "${pkgs.stylua}/bin/stylua"; + args = _: [ "-" ]; + stdin = true; + } + { + filetypes = [ "crystal" ]; + globs = [ "*.cr" ]; + exe = "${pkgs.crystal}/bin/crystal"; + args = file: [ "tool" "format" ]; + stdin = false; + } + ]; + autoCommands = [ + { + event = "FileType"; + pattern = [ "lua" ]; + command = "setlocal expandtab"; + } + { + event = "FileType"; + pattern = [ + "makefile" + ]; + command = "setlocal shiftwidth=4 tabstop=4 softtabstop=4 noexpandtab"; + } + { + event = "FileType"; + pattern = [ "gitcommit" "gitrebase" "gitconfig" ]; + command = "set bufhidden=delete"; + } + { + event = "BufWinEnter"; + pattern = "*"; + command = "if line2byte(line('$')) > 1000000 | syntax clear | endif"; + } + ]; + signs = { + error = ""; + warning = ""; + hint = ""; + info = ""; + }; + env = { + GIT_EDITOR = "nvr -cc split --remote-wait"; + EDITOR = "nvr -cc close --remote-wait"; + }; + leader = " "; + mappings = { + normal = { + "" = "h"; + "" = "j"; + "" = "k"; + "" = "l"; + "n" = "n"; + }; + visual = { + "" = ">gv^"; + "" = "" = "which_key"; }; }; + in + '' + local telescope = require('telescope') + local commander = require('commander') + + commander.add(${toLua commands}) + telescope.load_extension('commander') + telescope.load_extension('ui-select') + + telescope.setup({ + defaults = { mappings = ${toLua mappings}, winblend = 30; }, + pickers = { + find_files = { + find_command = { "${pkgs.fd}/bin/fd", "-H", "--type=file", "--type=symlink" } + }, + }, + extensions = { + file_browser = { + hidden = true + }, + } + }) + ''; + mappings = { + normal = ( + lib.attrsets.mapAttrs + (key: value: luaMap "require('telescope.builtin').${value}") + { + "f" = "find_files"; + "r" = "live_grep"; + "b" = "buffers"; + "h" = "help_tags"; + "o" = "oldfiles"; + "s" = "git_status"; + "/" = "current_buffer_fuzzy_find"; + "c" = "git_branches"; + } + ) // ( + lib.attrsets.mapAttrs + (key: value: luaMap "require('telescope').extensions.${value}") + { + "n" = "file_browser.file_browser"; + ":" = "commander.filter"; + } + ); + }; + } + { + plugin = base16-nvim; + config = '' + vim.opt.termguicolors = true + vim.cmd('colorscheme base16-tomorrow-night') + ''; + } + { plugin = octo-nvim; config = "require('octo').setup()"; } + { + plugin = gitsigns-nvim; + dependencies = [ plenary-nvim ]; + config = '' + require('gitsigns').setup(${toLua { + current_line_blame = true; + }}) + ''; + } + { plugin = windline-nvim; config = "require('wlsample.airline')"; } + { + plugin = luasnip; + config = '' + require('luasnip.loaders.from_snipmate').lazy_load() + require('luasnip.loaders.from_lua').lazy_load() + local luasnip = require('luasnip') + luasnip.setup({ updateevents = 'TextChanged,TextChangedI' }) + ''; + mappings = + let + mapping = rhs: luaMap "function() ${rhs} end"; + mappings = { + "" = mapping "luasnip.jump(1)"; + "" = mapping "luasnip.jump(-1)"; + "" = mapping "if luasnip.choice_active() then luasnip.change_choice(1) end"; + }; + in + { + insert = mappings; + select = mappings; + }; + } + { plugin = vim-abolish; } + { plugin = NrrwRgn; } + { + plugin = trouble-nvim; + dependencies = [ nvim-web-devicons ]; + mappings = + let + mapping = rhs: luaMap "function() require('trouble').${rhs} end"; + in + { + normal = { + "xx" = mapping "open()"; + "xd" = mapping "open('document_diagnostics')"; + "xl" = mapping "open('loclist')"; + "gR" = mapping "open('lsp_references')"; + }; + }; + } + { plugin = twilight-nvim; } + { plugin = which-key-nvim; } + { plugin = zen-mode-nvim; } + { + plugin = diffview-nvim; + config = + let + config = { + default = { + layout = "diff2_vertical"; + }; + merge_tool = { + layout = "diff3_vertical"; + }; + file_history = { + layout = "diff2_vertical"; + }; + }; + in + '' + require('diffview').setup(${toLua config}) + ''; + } + { + plugin = toggleterm-nvim; + dependencies = [ plenary-nvim pkgs.lazygit ]; + config = '' + local Terminal = require('toggleterm.terminal').Terminal + local lazygit = Terminal:new({ + cmd = "${pkgs.lazygit}/bin/lazygit", + dir = "git_dir", + direction = "float", + hidden = true, + on_open = function (term) + vim.cmd('startinsert!') + vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true }) + end, + on_close = function (term) + vim.cmd('startinsert!') + end, + }) + ''; + mappings = { + normal = { + "g" = luaMap "function () lazygit:toggle() end"; + }; + }; + } + { + plugin = copilot-cmp; + dependencies = [{ + plugin = copilot-lua; + config = '' + require('copilot').setup({ + suggestion = { enabled = false }, + panel = { enajkbled = false }, + copilot_node_command = '${pkgs.nodejs}/bin/node', + }) + ''; + }]; + config = '' + require('copilot_cmp').setup() + ''; + } + { + plugin = gen-nvim; + config = + let + config = { + model = "llama3"; + }; + in + '' + require('gen').setup(${toLua config}) + ''; + } + { + plugin = bufferline-nvim; + config = + let + options = { + hover = { + enabled = true; + delay = 200; + reveal = [ "close" ]; + }; + }; + in + '' + require('bufferline').setup({ options = ${toLua options} }) + ''; + dependencies = [{ + plugin = nvim-web-devicons; + }]; + } + ]; + lsp = { + servers = with pkgs; [ + { + name = "lua_ls"; + config = { + settings = { + Lua = { + diagnostics = { + globals = [ "vim" ]; + }; + }; + }; + }; + package = lua-language-server; + } + { + name = "yamlls"; + config = { + settings = { + redhat = { telemetry = { enabled = false; }; }; + yaml = { + schemas = { + "https://json.schemastore.org/github-workflow" = ".github/workflows/*.yml"; + "https://json.schemastore.org/prettierrc" = ".prettierrc"; + "https://json.schemastore.org/prettierrc.yml" = ".prettierrc.yml"; + "https://json.schemastore.org/prettierrc.yaml" = ".prettierrc.yaml"; + "https://json.schemastore.org/prettier.config.yml" = "prettier.config.yml"; + "https://json.schemastore.org/prettier.config.yaml" = "prettier.config.yaml"; + "https://schema.jokke.space/caddy.json" = [ "*caddy*.yml" "*caddy*.yaml" ]; + }; + }; + }; + }; + package = yaml-language-server; + } + { + name = "tailwindcss"; + config = { + settings = { + tailwindCSS = { + classAttributes = [ "class" "className" ]; + }; + }; + }; + package = tailwindcss-language-server; + } + { + name = "ts_ls"; + package = nodePackages.typescript-language-server; + config = { + single_file_support = false; + }; + rootPattern = [ "package.json" ]; + } + { name = "eslint"; package = vscode-langservers-extracted; } + { name = "nixd"; package = nixd; } + { + name = "bashls"; + package = nodePackages.bash-language-server.overrideAttrs (oldAttrs: { + buildDependencies = [ shellcheck ]; + afterInstall = '' + wrapProgram "$out/bin/bash-language-server" --prefix PATH : "${shellcheck}/bin" + ''; + }); + } + { + name = "crystalline"; + package = crystalline; + } + { + name = "rust_analyzer"; + package = rust-analyzer; + } + ]; + mappings = { + buf = { + declaration = "gD"; + definition = "gd"; + hover = "K"; + implementation = "gi"; + type_definition = "D"; + rename = "rn"; + code_action = "ca"; + }; + diagnostic = { + show_line_diagnostics = "e"; + goto_prev = "[d"; + goto_next = "]d"; + set_loclist = "q"; + }; + }; + }; + extraLuaConfig = '' + local function close_all_other_buffers(opts) + local current_buf = vim.api.nvim_get_current_buf() + local buffers = vim.api.nvim_list_bufs() + + for _, buf in ipairs(buffers) do + if buf ~= current_buf and vim.api.nvim_buf_is_loaded(buf) then + vim.api.nvim_buf_delete(buf, { force = opts.bang }) + end + end + end + + vim.api.nvim_create_user_command('CloseOtherBuffers', close_all_other_buffers, { bang = true }) + ''; + }; +} diff --git a/radish/home/common/neovim/formatters.lua b/radish/home/common/neovim/formatters.lua new file mode 100644 index 0000000..2b7d89a --- /dev/null +++ b/radish/home/common/neovim/formatters.lua @@ -0,0 +1,46 @@ +local Formatters = {} + +Formatters.setup = function() + local formatter = require('formatter') + local util = require('formatter.util') + + local js = { + function () + return { + exe = "npx", + args = {"prettier", "--stdin-filepath", util.escape_path(util.get_current_buffer_file_name())}, + stdin = true, + } + end + } + + local ruby = { + function () + return { + exe = "bundle", + args = {"exec", "rufo", "-x", "--filename", util.escape_path(util.get_current_buffer_file_name())}, + stdin = true, + } + end + } + + formatter.setup { + filetype = { + javascript = js, + typescript = js, + javascriptreact = js, + typescriptreact = js, + svelte = js, + ruby = ruby, + haml = ruby, + } + } + + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = { "*.js", "*.ts", "*.jsx", "*.tsx", "*.svelte", "*.rb", "*.haml", "Gemfile", "*.rake" }, + command = "FormatWrite", + group = vim.api.nvim_create_augroup("FormatAutogroup", { clear = true }), + }) +end + +Formatters.setup() diff --git a/radish/home/common/neovim/luasnippets/typescriptreact.lua b/radish/home/common/neovim/luasnippets/typescriptreact.lua new file mode 100644 index 0000000..9f790a9 --- /dev/null +++ b/radish/home/common/neovim/luasnippets/typescriptreact.lua @@ -0,0 +1,83 @@ +local ls = require("luasnip") +local fmt = require("luasnip.extras.fmt").fmt +local s = ls.snippet +local sn = ls.snippet_node +local i = ls.insert_node +local f = ls.function_node +local d = ls.dynamic_node + +return { + s( + { trig = "fc", desc = "React.FC" }, + fmt( + [[ + import React from "react" + + interface {props_name} {{ + {prop_types} + }} + + const {component_name}: React.FC<{props_name}> = ({props}) => {{ + return ( + {markup} + ) + }} + + export default {component_name} + ]], + { + props_name = i(3, "Props"), + prop_types = i(2), + component_name = d(1, function() + local filename = vim.api.nvim_buf_get_name(0) + local component_name + + if filename == "index.tsx" then + component_name = vim.fs.basename(vim.fs.dirname(filename)) + else + component_name = vim.fs.basename(filename):match("(.+)%.tsx") + end + + return sn(nil, i(1, component_name)) + end), + props = f(function(prop_types) + local props = {} + + for _, prop in ipairs(prop_types[1]) do + local parts = vim.split(prop, ":", { plain = true, trimempty = true }) + local name = parts[1] + if name then + table.insert(props, vim.trim(name)) + end + end + + return "{ " .. table.concat(props, ", ") .. " }" + end, { 2 }), + markup = i(0), + }, + { + repeat_duplicates = true, + } + ) + ), + s( + { trig = "t", desc = "" }, + fmt( + [[ + <{tag}> + {children} + + ]], + { + tag = i(1, "div"), + closing_tag = f(function(tag) + return vim.split(tag[1][1], " ")[1] + end, { 1 }), + children = i(0), + }, + { + repeat_duplicates = true, + } + ) + ), +} diff --git a/radish/home/common/neovim/snippets/ruby.snippets b/radish/home/common/neovim/snippets/ruby.snippets new file mode 100644 index 0000000..aab553b --- /dev/null +++ b/radish/home/common/neovim/snippets/ruby.snippets @@ -0,0 +1,33 @@ +snippet if ruby if statement + if $1 + $0 + end + +snippet qt graphql query test + require "test_helper" + + module Graphql + module Queries + class $1Test < ActionDispatch::IntegrationTest + setup do + @user = users(:tobias) + rack_login(@user) + end + + test "Query$1" do + run_query("Query$1") do |json, msg| + $0 + end + end + + test "Query$1 without $2 permissions" do + @user.permission.update!($2: 0) + + run_query("Query$1") do |json, msg| + assert false + end + end + end + end + end + diff --git a/radish/home/common/neovim/snippets/typescriptreact.snippets b/radish/home/common/neovim/snippets/typescriptreact.snippets new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/radish/home/common/neovim/snippets/typescriptreact.snippets @@ -0,0 +1 @@ + diff --git a/radish/home/custom-pkgs/commander-nvim/default.nix b/radish/home/custom-pkgs/commander-nvim/default.nix new file mode 100644 index 0000000..b76aef6 --- /dev/null +++ b/radish/home/custom-pkgs/commander-nvim/default.nix @@ -0,0 +1 @@ +{ util, inputs, ... }: util.vimPlugin { name = "commander.nvim"; source = inputs.commander-nvim; } diff --git a/radish/home/custom-pkgs/crystal/default.nix b/radish/home/custom-pkgs/crystal/default.nix new file mode 100644 index 0000000..d77f401 --- /dev/null +++ b/radish/home/custom-pkgs/crystal/default.nix @@ -0,0 +1 @@ +{ util, ... }: util.package diff --git a/radish/home/custom-pkgs/crystal/package.nix b/radish/home/custom-pkgs/crystal/package.nix new file mode 100644 index 0000000..94ad064 --- /dev/null +++ b/radish/home/custom-pkgs/crystal/package.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +let + inherit (pkgs) crystal libffi; +in +crystal.overrideAttrs (oldAttrs: + { + makeFlags = oldAttrs.makeFlags ++ [ + "interpreter=1" + ]; + buildInputs = oldAttrs.buildInputs ++ [ + libffi + ]; + FLAGS = ["--single-module"]; + doCheck = false; + } +) diff --git a/radish/home/custom-pkgs/default.nix b/radish/home/custom-pkgs/default.nix new file mode 100644 index 0000000..399937b --- /dev/null +++ b/radish/home/custom-pkgs/default.nix @@ -0,0 +1,9 @@ +{ lib, inputs, ... }: +let + inherit (builtins) attrNames filter readDir; + dirs = + let files = readDir ./.; + in filter (name: files."${name}" == "directory") (attrNames files); + util = import ./util.nix; +in +lib.composeManyExtensions (map (dir: import ./${dir} { util = util dir; inherit inputs; }) dirs) diff --git a/radish/home/custom-pkgs/fb-client/default.nix b/radish/home/custom-pkgs/fb-client/default.nix new file mode 100644 index 0000000..d77f401 --- /dev/null +++ b/radish/home/custom-pkgs/fb-client/default.nix @@ -0,0 +1 @@ +{ util, ... }: util.package diff --git a/radish/home/custom-pkgs/fb-client/package.nix b/radish/home/custom-pkgs/fb-client/package.nix new file mode 100644 index 0000000..f67aa32 --- /dev/null +++ b/radish/home/custom-pkgs/fb-client/package.nix @@ -0,0 +1,22 @@ +{ lib, stdenv, fetchurl, python3, ... }: +stdenv.mkDerivation rec { + pname = "fb-client"; + version = "2.3.0"; + + src = fetchurl { + url = "https://paste.xinu.at/data/client/fb-${version}.tar.gz"; + sha256 = "sha256-EWTsoG7qy0IQ1GLEuvHEAEJyphl9hz1hFm53k1OdGYM="; + }; + + buildInputs = + [ (python3.withPackages (pyPkgs: with pyPkgs; [ pycurl pyxdg ])) ]; + + makeFlags = [ "PREFIX=$(out)" ]; + + meta = with lib; { + mainProgram = "fb"; + description = "Client for paste.xinu.at"; + homepage = "https://paste.xinu.at"; + license = licenses.gpl3Only; + }; +} diff --git a/radish/home/custom-pkgs/flameshot/default.nix b/radish/home/custom-pkgs/flameshot/default.nix new file mode 100644 index 0000000..d77f401 --- /dev/null +++ b/radish/home/custom-pkgs/flameshot/default.nix @@ -0,0 +1 @@ +{ util, ... }: util.package diff --git a/radish/home/custom-pkgs/flameshot/package.nix b/radish/home/custom-pkgs/flameshot/package.nix new file mode 100644 index 0000000..836901c --- /dev/null +++ b/radish/home/custom-pkgs/flameshot/package.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +pkgs.writeShellScriptBin "flameshot" '' + export XDG_SESSION_TYPE= QT_QPA_PLATFORM=wayland + nohup ${pkgs.flameshot}/bin/flameshot >& /dev/null & + ${pkgs.flameshot}/bin/flameshot "$@" +'' diff --git a/radish/home/custom-pkgs/gen-nvim/default.nix b/radish/home/custom-pkgs/gen-nvim/default.nix new file mode 100644 index 0000000..9a48cee --- /dev/null +++ b/radish/home/custom-pkgs/gen-nvim/default.nix @@ -0,0 +1 @@ +{ inputs, util, ... }: util.vimPlugin { name = "gen.nvim"; source = inputs.gen-nvim; } diff --git a/radish/home/custom-pkgs/otp/default.nix b/radish/home/custom-pkgs/otp/default.nix new file mode 100644 index 0000000..d77f401 --- /dev/null +++ b/radish/home/custom-pkgs/otp/default.nix @@ -0,0 +1 @@ +{ util, ... }: util.package diff --git a/radish/home/custom-pkgs/otp/package.nix b/radish/home/custom-pkgs/otp/package.nix new file mode 100644 index 0000000..0c32a18 --- /dev/null +++ b/radish/home/custom-pkgs/otp/package.nix @@ -0,0 +1,17 @@ +{ pkgs }: +let + ykman = "${pkgs.yubikey-manager}/bin/ykman"; + sk = "${pkgs.skim}/bin/sk"; + wl-copy = "${pkgs.wl-clipboard}/bin/wl-copy"; +in +pkgs.writeShellScriptBin "otp" '' + skim_command=("${sk}") + + if [ -n "$*" ]; then + skim_command+=(-q "$*") + fi + + account=$(${ykman} oath accounts list | "''${skim_command[@]}") + [ -z "$account" ] && exit 1 + ${ykman} oath accounts code -s "$account" | ${wl-copy} -n +'' diff --git a/radish/home/custom-pkgs/util.nix b/radish/home/custom-pkgs/util.nix new file mode 100644 index 0000000..b432436 --- /dev/null +++ b/radish/home/custom-pkgs/util.nix @@ -0,0 +1,16 @@ +dir: +{ + vimPlugin = { name, source }: + final: prev: { + vimPlugins = prev.vimPlugins // { + "${dir}" = prev.vimUtils.buildVimPlugin { + pname = name; + version = source.lastModifiedDate; + src = source; + doCheck = false; + }; + }; + }; + + package = final: prev: { "${dir}" = final.callPackage ./${dir}/package.nix { pkgs = prev; }; }; +} diff --git a/radish/home/custom-pkgs/vimpeccable/default.nix b/radish/home/custom-pkgs/vimpeccable/default.nix new file mode 100644 index 0000000..b64b4a5 --- /dev/null +++ b/radish/home/custom-pkgs/vimpeccable/default.nix @@ -0,0 +1 @@ +{ inputs, util, ... }: util.vimPlugin { name = "vimpeccable"; source = inputs.vimpeccable; } diff --git a/radish/home/custom-pkgs/windline-nvim/default.nix b/radish/home/custom-pkgs/windline-nvim/default.nix new file mode 100644 index 0000000..1ed83dc --- /dev/null +++ b/radish/home/custom-pkgs/windline-nvim/default.nix @@ -0,0 +1 @@ +{ inputs, util, ... }: util.vimPlugin { name = "windline.nvim"; source = inputs.windline-nvim; } diff --git a/radish/home/custom-pkgs/wl-copy-both/default.nix b/radish/home/custom-pkgs/wl-copy-both/default.nix new file mode 100644 index 0000000..d77f401 --- /dev/null +++ b/radish/home/custom-pkgs/wl-copy-both/default.nix @@ -0,0 +1 @@ +{ util, ... }: util.package diff --git a/radish/home/custom-pkgs/wl-copy-both/package.nix b/radish/home/custom-pkgs/wl-copy-both/package.nix new file mode 100644 index 0000000..c5cf9d7 --- /dev/null +++ b/radish/home/custom-pkgs/wl-copy-both/package.nix @@ -0,0 +1,14 @@ +{ pkgs }: +pkgs.writeShellScriptBin "wl-copy" '' + set -euo pipefail + copy="${pkgs.wl-clipboard}/bin/wl-copy" + paste="${pkgs.wl-clipboard}/bin/wl-paste" + + "$copy" "$@" + args="$*" + if [[ "$args" =~ /(^| )(-p|--primary)($| )/ ]]; then + exit + fi + + "$paste" -n | "$copy" -p "$@" +'' diff --git a/radish/home/custom-programs/default.nix b/radish/home/custom-programs/default.nix new file mode 100644 index 0000000..1d61375 --- /dev/null +++ b/radish/home/custom-programs/default.nix @@ -0,0 +1,10 @@ +{ ... }: +let + inherit (builtins) attrNames filter readDir; + dirs = + let files = readDir ./.; + in filter (name: files."${name}" == "directory") (attrNames files); +in +{ + imports = map (dir: ./${dir}) dirs; +} diff --git a/radish/home/custom-programs/fb-client/default.nix b/radish/home/custom-programs/fb-client/default.nix new file mode 100644 index 0000000..877e07b --- /dev/null +++ b/radish/home/custom-programs/fb-client/default.nix @@ -0,0 +1,30 @@ +{ pkgs, config, lib, ... }: +let + cfg = config.programs.fb-client; +in +{ + options.programs.fb-client = let inherit (lib) mkEnableOption mkOption types; in { + enable = mkEnableOption { }; + pastebin = mkOption { + type = types.str; + default = "https://paste.xinu.at"; + }; + clipboard_cmd = mkOption { + type = types.pathInStore; + default = "${pkgs.wl-clipboard}/bin/wl-copy"; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ pkgs.fb-client ]; + xdg = { + configFile = { + "fb-client/config".text = '' + pastebin="${cfg.pastebin}" + apikey_file="${config.xdg.dataHome}/fb-client/apikey" + clipboard_cmd="${cfg.clipboard_cmd}" + ''; + }; + }; + }; +} diff --git a/radish/home/default.nix b/radish/home/default.nix new file mode 100644 index 0000000..c689500 --- /dev/null +++ b/radish/home/default.nix @@ -0,0 +1,5 @@ +{ config, pkgs, ksoloti-pr, inputs, ... }: +{ + home-manager.users.jokke = import ./jokke { inherit pkgs ksoloti-pr inputs; }; + home-manager.users.moco = import ./moco { inherit config pkgs inputs; }; +} diff --git a/radish/home/gnome/default.nix b/radish/home/gnome/default.nix new file mode 100644 index 0000000..f2c59f6 --- /dev/null +++ b/radish/home/gnome/default.nix @@ -0,0 +1,123 @@ +{ config, lib, ... }: +let + cfg = config.gnome; +in +{ + imports = [ ./extensions ]; + + options.gnome = with lib.types; { + profilePicture = lib.mkOption { + type = nullOr path; + default = null; + }; + keyboard = { + sources = lib.mkOption { + type = listOf str; + default = [ "us" ]; + }; + }; + keybindings = { + builtin = lib.mkOption { + type = attrsOf (listOf str); + default = { }; + }; + custom = lib.mkOption { + type = listOf (submodule { + options = { + binding = lib.mkOption { type = str; }; + command = lib.mkOption { type = str; }; + name = lib.mkOption { type = str; }; + }; + }); + default = [ ]; + }; + }; + scalingFactor = lib.mkOption { + type = numbers.positive; + default = 1; + }; + power = { + powerButton = lib.mkOption { + type = enum [ "suspend" "interactive" "hibernate" "nothing" ]; + default = "interactive"; + }; + }; + nightLight = { + enable = lib.mkEnableOption { }; + temperature = lib.mkOption { + type = ints.between 1700 4700; + default = 2700; + }; + schedule = lib.mkOption { + type = nullOr (submodule { + options = { + from = lib.mkOption { + type = numbers.between 0 23.99; + default = 20.0; + }; + to = lib.mkOption { + type = numbers.between 0 23.99; + default = 8.0; + }; + }; + }); + default = null; + }; + }; + calendar = { + showWeekNumbers = lib.mkEnableOption { }; + }; + automaticTimeZone = lib.mkEnableOption { }; + }; + + config = { + dconf.settings = with lib.hm.gvariant; { + "org/gnome/shell/keybindings" = cfg.keybindings.builtin; + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = ( + lib.lists.imap0 + (i: _: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString i}/") + cfg.keybindings.custom + ); + }; + "org/gnome/desktop/input-sources" = { + sources = map (source: mkTuple [ "xkb" source ]) cfg.keyboard.sources; + }; + "org/gnome/mutter" = { + experimental-features = [ "scale-monitor-framebuffer" ]; + }; + "org/gnome/settings-daemon/plugins/xsettings" = { + overrides = [ (mkTuple [ "GdkWindowScalingFactor" cfg.scalingFactor ]) ]; + }; + "org/gnome/desktop/interface" = { + scaling-factor = cfg.scalingFactor; + }; + "org/gnome/settings-daemon/plugins/power" = { + "power-button-action" = cfg.power.powerButton; + }; + "org/gnome/settings-daemon/plugins/color" = with cfg.nightLight; { + night-light-enabled = enable; + night-light-temperature = temperature; + night-light-schedule-automatic = isNull schedule; + night-light-schedule-from = lib.mkIf (!isNull schedule) schedule.from; + night-light-schedule-to = lib.mkIf (!isNull schedule) schedule.to; + }; + "org/gnome/desktop/calendar" = { + show-weekdate = cfg.calendar.showWeekNumbers; + }; + "org/gnome/desktop/datetime" = { + automatic-timezone = cfg.automaticTimeZone; + }; + } // ( + builtins.listToAttrs ( + lib.lists.imap0 + (i: keybinding: { + name = "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString i}"; + value = keybinding; + }) + cfg.keybindings.custom + ) + ); + home.file.".face".source = lib.mkIf (!isNull cfg.profilePicture) cfg.profilePicture; + }; +} diff --git a/radish/home/gnome/extensions/default.nix b/radish/home/gnome/extensions/default.nix new file mode 100644 index 0000000..5f5e5b6 --- /dev/null +++ b/radish/home/gnome/extensions/default.nix @@ -0,0 +1,10 @@ +{ ... }: +let + inherit (builtins) attrNames filter readDir; + dirs = + let files = readDir ./.; + in filter (name: files."${name}" == "directory") (attrNames files); +in +{ + imports = map (dir: ./${dir}) dirs; +} diff --git a/radish/home/gnome/extensions/freon/default.nix b/radish/home/gnome/extensions/freon/default.nix new file mode 100644 index 0000000..a7eafcc --- /dev/null +++ b/radish/home/gnome/extensions/freon/default.nix @@ -0,0 +1,24 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.gnome.extensions.freon; +in +{ + options.gnome.extensions = with lib.types; { + freon = { + enable = lib.mkEnableOption { }; + package = lib.mkOption { + type = package; + default = pkgs.gnomeExtensions.freon; + }; + }; + }; + + config = lib.mkIf cfg.enable { + dconf.settings = { + "org/gnome/shell".enabled-extensions = [ + cfg.package.extensionUuid + ]; + }; + home.packages = [ cfg.package ]; + }; +} diff --git a/radish/home/gnome/extensions/paperwm/default.nix b/radish/home/gnome/extensions/paperwm/default.nix new file mode 100644 index 0000000..916a859 --- /dev/null +++ b/radish/home/gnome/extensions/paperwm/default.nix @@ -0,0 +1,48 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.gnome.extensions; +in +{ + options.gnome.extensions = with lib.types; { + paperwm = { + enable = lib.mkEnableOption { }; + package = lib.mkOption { + type = package; + default = pkgs.gnomeExtensions.paperwm; + }; + cycle-height-steps = lib.mkOption { type = listOf numbers.nonnegative; default = [ 0.33 0.5 0.67 1.0 ]; }; + cycle-width-steps = lib.mkOption { type = listOf numbers.nonnegative; default = [ 0.33 0.5 0.67 1.0 ]; }; + horizontal-margin = lib.mkOption { type = ints.unsigned; default = 5; }; + vertical-margin = lib.mkOption { type = ints.unsigned; default = 5; }; + window-gap = lib.mkOption { type = ints.unsigned; default = 5; }; + winprops = lib.mkOption { + type = listOf (submodule { + options = { + wm_class = lib.mkOption { type = str; default = ""; }; + title = lib.mkOption { type = str; default = ""; }; + scratch_layer = lib.mkEnableOption { }; + preferredWidth = lib.mkOption { type = nullOr str; default = null; }; + }; + }); + default = [ ]; + }; + keybindings = lib.mkOption { + type = attrsOf (listOf str); + default = { }; + }; + }; + }; + + config = lib.mkIf cfg.paperwm.enable { + home.packages = [ cfg.paperwm.package ]; + dconf.settings = { + "org/gnome/shell".enabled-extensions = + lib.mkIf cfg.paperwm.enable [ cfg.paperwm.package.extensionUuid ]; + "org/gnome/shell/extensions/paperwm" = with cfg.paperwm; lib.mkIf cfg.paperwm.enable { + inherit cycle-height-steps cycle-width-steps horizontal-margin vertical-margin window-gap; + winprops = map (props: builtins.toJSON props) winprops; + }; + "org/gnome/shell/extensions/paperwm/keybindings" = lib.mkIf cfg.paperwm.enable cfg.paperwm.keybindings; + }; + }; +} diff --git a/radish/home/jokke/default.nix b/radish/home/jokke/default.nix new file mode 100644 index 0000000..377a794 --- /dev/null +++ b/radish/home/jokke/default.nix @@ -0,0 +1,103 @@ +{ pkgs, ksoloti-pr, inputs, ... }: +{ + imports = [ ../common ]; + config = { + _module.args.inputs = inputs; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "jokke"; + home.homeDirectory = "/home/jokke"; + home.packages = with pkgs; [ + ffmpeg + mediainfo + git-lfs + telegram-desktop + shards + deno + virt-manager + gimp + lftp + inkscape + google-fonts + wineWowPackages.waylandFull + reaper + ksoloti-pr.ksoloti + calibre + jellyfin-media-player + darktable + openscad + ]; + + gnome.profilePicture = ../assets/profile-pictures/jokke.png; + + programs.neovim = { + extraPackages = with pkgs; [ + nodePackages.graphql-language-service-cli + ]; + withTreesitterPlugins = p: [ + p.typescript + p.svelte + p.prisma + p.graphql + ]; + formatters = [ + { + filetypes = [ "typescript" "typescriptreact" "svelte" ]; + globs = [ "*.ts" "*.tsx" "*.svelte" ]; + exe = "npx"; + args = file: [ "prettier" "--stdin-filepath" file ]; + stdin = true; + } + { + filetypes = [ "prisma" ]; + globs = [ "*.prisma" ]; + exe = "${pkgs.nodePackages.prisma}/bin/prisma"; + args = file: [ "format" "--schema" ]; + stdin = false; + } + ]; + lsp.servers = with pkgs; [ + { + name = "svelte"; + package = nodePackages.svelte-language-server; + } + { + name = "denols"; + package = deno; + rootPattern = [ "deno.json" ]; + } + { + name = "prismals"; + package = nodePackages."@prisma/language-server"; + rootPattern = [ "package.json" "deno.json" ]; + } + { + name = "graphql"; + package = nodePackages.graphql-language-service-cli; + config = { + filetypes = [ "typescript" "typescriptreact" "graphql" "svelte" ]; + }; + } + ]; + }; + + programs.ssh.matchBlocks = { + "alderaan" = { + hostname = "alderaan.space"; + user = "root"; + }; + "base.alderaan" = { + hostname = "base.alderaan.space"; + user = "luke"; + }; + "jokke.space" = { + user = "root"; + }; + }; + + programs.git.extraConfig.user.email = "joakim@repomaa.com"; + services.syncthing = { + enable = true; + }; + }; +} diff --git a/radish/home/moco/default.nix b/radish/home/moco/default.nix new file mode 100644 index 0000000..995e9c2 --- /dev/null +++ b/radish/home/moco/default.nix @@ -0,0 +1,206 @@ +{ pkgs, inputs, ... }: +{ + imports = [ ../common ]; + config = + let + homeDirectory = "/home/moco"; + in + { + _module.args.inputs = inputs; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home = { + username = "moco"; + inherit homeDirectory; + packages = with pkgs; [ + (slack.overrideAttrs (oldAttrs: { + fixupPhase = '' + sed -i -e 's/,"WebRTCPipeWireCapturer"/,"LebRTCPipeWireCapturer"/' $out/lib/slack/resources/app.asar + + rm $out/bin/slack + makeWrapper $out/lib/slack/slack $out/bin/slack \ + --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \ + --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \ + --add-flags "--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations,WebRTCPipeWireCapturer" + ''; + })) + kooha + gnome-pomodoro + mitmproxy + (writeShellScriptBin "moco-admin-pw" '' + password=$(op item get fkj74ou6jfex7a6gcinac6o5oe --reveal --fields label=Kennwort) + otp=$(ykman oath accounts code -s 'MOCO:Admin') + echo "''${password}''${otp}" | wl-copy -n + '') + (writeShellScriptBin "moco-reto-otp" '' + ykman oath accounts code -s 'MOCO Reto' | wl-copy -n + '') + ]; + }; + + gnome = { + profilePicture = ../assets/profile-pictures/moco.png; + calendar.showWeekNumbers = true; + extensions.paperwm.winprops = [ + { wm_class = "gnome-pomodoro"; scratch_layer = true; } + ]; + }; + + programs.poetry = { + enable = true; + settings = { + virtualenvs = { + create = true; + inProject = true; + }; + }; + }; + + programs.zsh = { + cdpath = [ + "${homeDirectory}/Code/mocoapp" + "${homeDirectory}/Code/mocoapp-promo" + "${homeDirectory}/Code/mocoapp-llama" + ]; + dirHashes = { + moco = "${homeDirectory}/Code/mocoapp"; + promo = "${homeDirectory}/Code/mocoapp-promo"; + llama = "${homeDirectory}/Code/mocoapp-llama"; + }; + }; + + programs.git.extraConfig.user.email = "joakim.repomaa@mocoapp.com"; + + programs.neovim = { + withTreesitterPlugins = p: [ + p.ruby + p.javascript + p.typescript + p.graphql + ]; + formatters = [ + { + filetypes = [ "ruby" ]; + globs = [ "*.rb" "Gemfile" "*.rake" ]; + exe = "bundle"; + args = file: [ "exec" "rufo" "-x" "--filename" file ]; + stdin = true; + } + { + filetypes = [ "javascript" "typescript" "javascriptreact" "typescriptreact" ]; + globs = [ "*.js" "*.jsx" "*.ts" "*.tsx" ]; + exe = "npx"; + args = file: [ "prettier" "--stdin-filepath" file ]; + stdin = true; + } + ]; + lsp.servers = with pkgs; [ + { + name = "ruby_lsp"; + config = { + init_options = { + formatter = "auto"; + }; + }; + package = ruby-lsp; + } + { + name = "graphql"; + package = nodePackages.graphql-language-service-cli; + } + ]; + }; + + programs.ssh.matchBlocks = + let + aliases = [ "moco" "mocoapp" "mocoapp.com" ]; + matcher = subdomains: + builtins.concatStringsSep " " ( + map + (alias: builtins.concatStringsSep " " ( + map (subdomain: "*.${subdomain}.${alias} ${subdomain}.${alias}") subdomains + )) + aliases); + in + { + "console.*.moco" = { + extraOptions = { + RequestTTY = "force"; + RemoteCommand = "./rails-console.sh"; + }; + }; + + "${matcher ["reto" "reto.intern"]}" = { + hostname = "reto.intern.mocoapp.com"; + user = "jokke"; + }; + + "${matcher ["web"]}" = { + hostname = "mocoapp.com"; + }; + "${matcher ["prod-inc"]}" = { + hostname = "prod-inc.mocoapp.com"; + }; + "${matcher ["prod"]}" = { + hostname = "web02.mocoapp"; + }; + "${matcher ["pfg" "primeforcegroup"]}" = { + hostname = "primeforcegroup.mocoapp.com"; + }; + "${matcher ["crafft"]}" = { + hostname = "crafft.mocoapp.com"; + }; + "${matcher ["bd" "businessdecision"]}" = { + hostname = "businessdecision.mocoapp.com"; + }; + "${matcher ["festland"]}" = { + hostname = "festland.mocoapp.com"; + }; + "${matcher ["oi" "one-inside"]}" = { + hostname = "one-inside.mocoapp.com"; + }; + "${matcher ["se" "scope-engineering"]}" = { + hostname = "scope-engineering.mocoapp.com"; + }; + "${matcher ["cpc" "cpc-ag"]}" = { + hostname = "cpc-ag.mocoapp.com"; + }; + "${matcher ["weareact3"]}" = { + hostname = "weareact3.mocoapp.com"; + }; + "${matcher ["avenit"]}" = { + hostname = "avenit.mocoapp.com"; + }; + "${matcher ["staging"]}" = { + hostname = "staging.mocoapp.com"; + }; + "${matcher ["staging-v2"]}" = { + hostname = "staging-v2.mocoapp.com"; + }; + "${matcher ["staging-v3"]}" = { + hostname = "staging-v3.mocoapp.com"; + }; + "${matcher ["staging-v4"]}" = { + hostname = "staging-v4.mocoapp.com"; + }; + "${matcher ["staging-v5"]}" = { + hostname = "staging-v5.mocoapp.com"; + }; + "${matcher ["staging-v6"]}" = { + hostname = "staging-v6.mocoapp.com"; + }; + "${matcher ["prod-db" "production-db"]}" = { + hostname = "production-db.mocoapp"; + }; + "${matcher ["pdf-renderer"]}" = { + hostname = "mocoapp-pdf-renderer01.mocoapp.com"; + }; + "*.moco *.mocoapp *.mocoapp.com" = { + forwardAgent = true; + }; + "*.moco !reto.moco *.mocoapp.com !reto.mocoapp.com" = { + user = "butler"; + }; + }; + }; +} diff --git a/radish/home/modules/neovim/default.nix b/radish/home/modules/neovim/default.nix new file mode 100644 index 0000000..c103166 --- /dev/null +++ b/radish/home/modules/neovim/default.nix @@ -0,0 +1,392 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.programs.neovim; + toLua = lib.generators.toLua { }; + buildPluginConfig = p: + let + pluginConfig = if builtins.hasAttr "plugin" p then p else { plugin = p; }; + name = pluginConfig.plugin.name; + + config = if (builtins.isNull pluginConfig.config or null) then "" else pluginConfig.config; + mappings = if (builtins.isNull pluginConfig.mappings or null) then "" else generateMappings pluginConfig.mappings; + mergedConfig = config + mappings; + in + [ + { + plugin = pluginConfig.plugin; + config = lib.modules.mkIf (mergedConfig != "") '' + Plugins[${toLua name}] = {} + Plugins[${toLua name}].setup = function() + ${lib.strings.concatMapStrings + (line: if line == "" then "" else " ${line}\n") + (lib.strings.splitString "\n" mergedConfig) + + } + end + + Plugins[${toLua name}].setup() + ''; + type = "lua"; + } + ] ++ ( + lib.lists.concatMap buildPluginConfig pluginConfig.dependencies or [ ] + ); + + lspPluginConfig = with pkgs.vimPlugins; { + plugin = nvim-lspconfig; + dependencies = [ + nvim-cmp + cmp-nvim-lsp + cmp_luasnip + luasnip + ]; + + config = (builtins.readFile ./lsp-config.lua) + '' + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.workspace.didChangeWatchedFiles.dynamicRegistration = true + local lspconfig = require('lspconfig') + local util = require('lspconfig.util') + + local on_attach = function (client, bufnr) + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + local map = function (lhs, rhs) + print('set mapping ' .. lhs) + end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + + ${lib.strings.concatLines (lib.attrsets.mapAttrsToList (name: value: '' + local buf_${name} = vim.lsp.buf[${toLua name}] + if buf_${name} then + vim.keymap.set('n', ${toLua value}, buf_${name}, { buffer = bufnr }) + end + '' + ) cfg.lsp.mappings.buf)} + ${lib.strings.concatLines (lib.attrsets.mapAttrsToList (name: value: '' + local diagnostic_${name} = vim.lsp.buf[${toLua name}] + if diagnostic_${name} then + vim.keymap.set('n', ${toLua value}, diagnostic_${name}, { buffer = bufnr }) + end + '') cfg.lsp.mappings.diagnostic)} + end + + vim.env.PATH = ${toLua (lib.makeBinPath (map (s: s.package) (builtins.filter (s: builtins.hasAttr "package" s) cfg.lsp.servers)) + ":")} .. vim.env.PATH + local servers = ${toLua (map ( + { name, config ? {}, rootPattern ? null, ... }: { + inherit name; + config = config // (if (builtins.isNull rootPattern) then {} else { inherit rootPattern; }); + } + ) cfg.lsp.servers)} + + for _, server in ipairs(servers) do + local server_config = server.config + server_config.on_attach = on_attach + server_config.capabilities = capabilities + server_config.flags = { + debounce_text_changes = 150 + } + + if server_config.rootPattern then + server_config.root_dir = util.root_pattern( + unpack(server_config.rootPattern) + ) + end + + lspconfig[server.name].setup(server_config) + end + ''; + + }; + + treesitterPluginConfig = with pkgs.vimPlugins; { + plugin = nvim-treesitter.withPlugins cfg.withTreesitterPlugins; + config = '' + require('nvim-treesitter.configs').setup(${toLua { + highlight = { + enable = true; + additional_vim_regex_highlighting = false; + }; + }}); + ''; + }; + + formatterPluginConfig = with pkgs.vimPlugins; { + plugin = formatter-nvim; + config = '' + local formatter = require('formatter') + local util = require('formatter.util') + + formatter.setup({ + filetype = { + ${lib.strings.concatMapStringsSep ",\n " ({ exe, args, stdin, no_append, filetypes, ... }: + lib.strings.concatMapStringsSep ",\n " (filetype: '' + [${toLua filetype}] = { + function () + return { + exe = ${toLua exe}, + args = { + ${lib.strings.concatMapStringsSep ",\n " (arg: + if arg == "<>" + then "util.escape_path(util.get_current_buffer_file_path())" + else toLua arg + ) (args "<>")} + }, + stdin = ${toLua stdin}, + no_append = ${toLua no_append}, + } + end + } + '') filetypes + ) cfg.formatters} + } + }) + ${generateAutoCommand { + event = "BufWritePost"; + pattern = lib.lists.concatMap ({ globs, ... }: globs) cfg.formatters; + command = "FormatWrite"; + group = "FormatAutogroup"; + }} + ''; + }; + + customTypes = let inherit (lib) mkOption mkEnableOption types; in { + mapping = types.submodule { + options = { + rhs = mkOption { type = types.str; }; + lua = mkEnableOption { }; + options = mkOption { + type = types.nullOr ( + types.submodule { + options = { + buffer = mkOption { type = types.nullOr (types.either types.int types.bool); default = null; }; + nowait = mkOption { type = types.nullOr types.bool; default = null; }; + silent = mkOption { type = types.nullOr types.bool; default = null; }; + expr = mkOption { type = types.nullOr types.bool; default = null; }; + script = mkOption { type = types.nullOr types.bool; default = null; }; + unique = mkOption { type = types.nullOr types.bool; default = null; }; + replace_keycodes = mkOption { type = types.nullOr types.bool; default = null; }; + }; + } + ); + default = { }; + }; + }; + }; + + modeMappings = types.attrsOf (types.either types.str customTypes.mapping); + + mappings = types.submodule { + options = { + normal = mkOption { type = customTypes.modeMappings; default = { }; }; + insert = mkOption { type = customTypes.modeMappings; default = { }; }; + visual = mkOption { type = customTypes.modeMappings; default = { }; }; + command = mkOption { type = customTypes.modeMappings; default = { }; }; + select = mkOption { type = customTypes.modeMappings; default = { }; }; + }; + }; + + plugin = types.either types.package (types.submodule { + options = { + plugin = mkOption { type = types.package; }; + dependencies = mkOption { + type = types.listOf customTypes.plugin; + default = [ ]; + }; + mappings = mkOption { type = customTypes.mappings; default = { }; }; + config = mkOption { type = types.nullOr types.str; default = null; }; + }; + }); + + autoCommand = types.submodule { + options = { + event = mkOption { type = types.either types.str (types.listOf types.str); }; + pattern = mkOption { type = types.either types.str (types.listOf types.str); }; + command = mkOption { type = types.str; }; + }; + }; + + lspServer = types.submodule { + options = { + name = mkOption { type = types.str; }; + config = mkOption { type = types.attrs; default = { }; }; + package = mkOption { type = types.nullOr types.package; default = null; }; + rootPattern = mkOption { type = types.nullOr (types.listOf types.str); default = null; }; + }; + }; + + formatter = types.submodule { + options = { + filetypes = mkOption { type = types.listOf types.str; }; + globs = mkOption { type = types.listOf types.str; }; + exe = mkOption { type = types.either types.path types.str; }; + args = mkOption { type = types.functionTo (types.listOf types.str); default = _: [ ]; }; + stdin = mkEnableOption { }; + no_append = mkEnableOption { }; + }; + }; + }; + + generateMappings = mappings: lib.strings.concatLines ( + lib.attrsets.mapAttrsToList + (mode: modeMappings: + lib.strings.concatLines ( + lib.attrsets.mapAttrsToList + (name: value: + + let + mapping = { lhs = name; lua = false; options = { }; } // (if builtins.isString value then { rhs = value; } else value); + args = [ + (toLua (builtins.substring 0 1 mode)) + (toLua mapping.lhs) + (if mapping.lua then mapping.rhs else toLua mapping.rhs) + ( + toLua ( + builtins.listToAttrs ( + builtins.filter ({ value, ... }: !isNull (value)) (lib.attrsets.attrsToList mapping.options) + ) + ) + ) + ]; + in + "vim.keymap.set(${lib.strings.concatStringsSep ", " args})" + ) + modeMappings + ) + ) + mappings + ); + + generateAutoCommand = { event, pattern, command, group ? null }: '' + vim.api.nvim_create_autocmd(${toLua event}, { + pattern = ${toLua pattern}, + command = ${toLua command}, + group = ${if isNull group then toLua group else '' + vim.api.nvim_create_augroup(${toLua group}, { clear = true }) + ''}, + }) + ''; + + generateAutoCommands = autoCommands: lib.strings.concatLines ( + map generateAutoCommand autoCommands + ); + + generateSignDefinitions = signs: lib.strings.concatLines ( + lib.attrsets.mapAttrsToList + (name: value: + let + hl = "DiagnosticSign${lib.strings.toUpper (builtins.substring 0 1 name)}${builtins.substring 1 (-1) name}"; + in + "vim.fn.sign_define(${toLua hl}, ${toLua { text = value; texthl = hl; numhl = ""; }})" + ) + signs + ); +in +{ + options.programs.neovim = + let + inherit (lib) mkOption types; + in + { + mappings = mkOption { type = customTypes.mappings; default = { }; }; + plug = mkOption { + type = types.listOf customTypes.plugin; + default = [ ]; + }; + leader = mkOption { type = types.str; default = "\\"; }; + options = mkOption { + type = types.attrs; + default = { }; + }; + snippets = mkOption { + type = types.attrsOf types.path; + default = { }; + }; + autoCommands = mkOption { + type = types.listOf customTypes.autoCommand; + default = [ ]; + }; + env = mkOption { + type = types.attrsOf types.str; + default = { }; + }; + signs = { + error = mkOption { type = types.str; default = ""; }; + warning = mkOption { type = types.str; default = ""; }; + info = mkOption { type = types.str; default = ""; }; + hint = mkOption { type = types.str; default = ""; }; + }; + lsp = { + servers = mkOption { + type = types.listOf customTypes.lspServer; + default = [ ]; + }; + mappings = { + buf = mkOption { type = types.attrsOf types.str; default = { }; }; + diagnostic = mkOption { type = types.attrsOf types.str; default = { }; }; + }; + }; + withTreesitterPlugins = mkOption { + type = types.functionTo (types.listOf types.package); + default = _: [ ]; + }; + formatters = mkOption { + type = types.listOf customTypes.formatter; + default = [ ]; + }; + }; + + config = { + programs.neovim = { + extraLuaConfig = lib.strings.concatLines [ + "local Plugins = {}" + (generateMappings cfg.mappings) + (generateAutoCommands cfg.autoCommands) + (lib.strings.concatLines (lib.attrsets.mapAttrsToList (name: value: "vim.env.${name} = ${toLua value}") cfg.env)) + (lib.strings.concatLines (lib.attrsets.mapAttrsToList (name: value: "vim.opt.${name} = ${toLua value}") cfg.options)) + (generateSignDefinitions cfg.signs) + "vim.g.mapleader = ${toLua cfg.leader}" + '' + local undodir = ${toLua ( + if builtins.hasAttr "undodir" cfg.options + then cfg.options.undodir + else "${config.xdg.cacheHome}/nvim/undo" + )} + vim.opt.undodir = undodir + vim.fn.mkdir(undodir, 'p') + '' + ]; + plugins = lib.lists.concatMap buildPluginConfig ( + cfg.plug ++ [ + lspPluginConfig + treesitterPluginConfig + formatterPluginConfig + ] + ); + vimAlias = lib.mkForce false; + vimdiffAlias = lib.mkForce false; + }; + + xdg.configFile = ( + lib.attrsets.mapAttrs' + (name: value: { + name = "nvim/${name}"; + value = { source = value; }; + }) + cfg.snippets + ); + + home.shellAliases = + let + nvim = ''nvim --listen "$XDG_RUNTIME_DIR/nvimsocket"''; + in + { + inherit nvim; + vim = nvim; + vimdiff = "${nvim} -d"; + }; + }; +} diff --git a/radish/home/modules/neovim/lsp-config.lua b/radish/home/modules/neovim/lsp-config.lua new file mode 100644 index 0000000..b9ec3a0 --- /dev/null +++ b/radish/home/modules/neovim/lsp-config.lua @@ -0,0 +1,89 @@ +local Lsp = {} + +Lsp.setup = function() + local luasnip = require("luasnip") + local cmp = require("cmp") + + local has_words_before = function() + if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then + return false + end + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match("^%s*$") == nil + end + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = { + [""] = function() + if luasnip.jumpable(-1) then + luasnip.jump(-1) + else + cmp.mapping.select_prev_item() + end + end, + [""] = function() + if luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + cmp.mapping.select_next_item() + end + end, + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.close(), + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), + [""] = function(fallback) + if cmp.visible() and has_words_before() then + cmp.select_next_item() + else + fallback() + end + end, + [""] = function(fallback) + if cmp.visible() and has_words_before() then + cmp.select_prev_item() + else + fallback() + end + end, + }, + sources = { + { name = "copilot", group_index = 2 }, + { name = "nvim_lsp", group_index = 2 }, + { name = "luasnip", group_index = 2 }, + }, + }) + + vim.o.completeopt = "menuone,noselect" + vim.o.updatetime = 250 + vim.cmd([[autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})]]) + vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { + virtual_text = { + source = "if_many", + }, + }) + + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded" }) + + vim.lsp.handlers["textDocument/signatureHelp"] = + vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded" }) + + vim.diagnostic.config({ + float = { border = "rounded", zindex = 1 }, + }) +end + +Lsp.setup()