From b35c87b4d64a16c0680ff7c8fb315959e144278d Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Mon, 18 Mar 2024 17:04:37 +0100 Subject: [PATCH] Migrate from zsh to fish --- homes/x86_64-linux/julian@kardorf/default.nix | 3 +- modules/home/direnv/default.nix | 8 +- modules/home/fish/default.nix | 75 +++++++++++++++++++ modules/home/fish/last-working-dir.fish | 12 +++ modules/home/fish/starship.toml | 14 ++++ modules/home/rofi/default.nix | 2 +- systems/x86_64-linux/kardorf/default.nix | 5 +- 7 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 modules/home/fish/default.nix create mode 100644 modules/home/fish/last-working-dir.fish create mode 100644 modules/home/fish/starship.toml diff --git a/homes/x86_64-linux/julian@kardorf/default.nix b/homes/x86_64-linux/julian@kardorf/default.nix index 9b89e1c..8242c92 100644 --- a/homes/x86_64-linux/julian@kardorf/default.nix +++ b/homes/x86_64-linux/julian@kardorf/default.nix @@ -25,7 +25,8 @@ config, ... }: { modules = { shell = { - zsh.enable = true; + # zsh.enable = true; + fish.enable = true; direnv.enable = true; }; topgrade.enable = true; diff --git a/modules/home/direnv/default.nix b/modules/home/direnv/default.nix index 72516c8..8a4bc3f 100644 --- a/modules/home/direnv/default.nix +++ b/modules/home/direnv/default.nix @@ -20,7 +20,9 @@ config, ... }: with lib; -let cfg = config.modules.shell.direnv; +let + cfg = config.modules.shell.direnv; + shellcfg = config.modules.shell; in { options.modules.shell.direnv = { enable = mkOption { default = false; }; }; @@ -28,7 +30,7 @@ in { programs.direnv = { enable = true; nix-direnv.enable = true; - enableZshIntegration = true; - }; + } // mkIf shellcfg.zsh.enable { enableZshIntegration = true; } + // mkIf shellcfg.fish.enable { enableFishIntegration = true; }; }; } diff --git a/modules/home/fish/default.nix b/modules/home/fish/default.nix new file mode 100644 index 0000000..78dafa0 --- /dev/null +++ b/modules/home/fish/default.nix @@ -0,0 +1,75 @@ +{ +# Snowfall Lib provides a customized `lib` instance with access to your flake's library +# as well as the libraries available from your flake's inputs. +lib, +# An instance of `pkgs` with your overlays and packages applied is also available. +pkgs, +# You also have access to your flake's inputs. +inputs, + +# Additional metadata is provided by Snowfall Lib. +system, # The system architecture for this host (eg. `x86_64-linux`). +target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). +format, # A normalized name for the system target (eg. `iso`). +virtual +, # A boolean to determine whether this system is a virtual target using nixos-generators. +systems, # An attribute map of your defined hosts. + +# All other arguments come from the module system. +config, ... }: + +with lib; + +let cfg = config.modules.shell.fish; +in { + options.modules.shell.fish = { enable = mkOption { default = false; }; }; + + config = mkIf cfg.enable { + + home.file = { ".config/starship.toml".source = ./starship.toml; }; + + home.packages = with pkgs; [ starship ]; + + programs.starship = { + enable = true; + enableFishIntegration = true; + }; + + programs.fish = { + enable = true; + + interactiveShellInit = "set fish_greeting"; # Disable default greeting + + plugins = [ + { + name = "z"; + src = pkgs.fishPlugins.z.src; + } + { + name = "lwd"; + src = ./last-working-dir.fish; + } + ]; + + functions = { + fzf-z = '' + set dir $(z --list | fzf --tiebreak=index --tac | sed -E 's/^[0-9]+[[:space:]]+//') + cd $dir + ''; + mkcd = '' + mkdir $argv + cd $argv + ''; + run = '' + nix run nixpkgs#"$argv[1]" -- $argv[2..-1] + ''; + + # Last working directory functionality + # __onpwd = { + # onVariable = "PWD"; + # body = "set --universal LAST_WORKING_DIR $PWD"; + # }; + }; + }; + }; +} diff --git a/modules/home/fish/last-working-dir.fish b/modules/home/fish/last-working-dir.fish new file mode 100644 index 0000000..3d66d0f --- /dev/null +++ b/modules/home/fish/last-working-dir.fish @@ -0,0 +1,12 @@ +if status --is-interactive; and test -d $LAST_WORKING_DIR; and test $PWD = $HOME + cd $LAST_WORKING_DIR +end + +function lwd + cd $LAST_WORKING_DIR +end + +function __onpwd --on-variable PWD + set --universal LAST_WORKING_DIR $PWD +end +# __onpwd diff --git a/modules/home/fish/starship.toml b/modules/home/fish/starship.toml new file mode 100644 index 0000000..8679ea9 --- /dev/null +++ b/modules/home/fish/starship.toml @@ -0,0 +1,14 @@ +# newline between shell prompts +add_newline = false +#format = "$all$directory$character" + +[line_break] +disabled = true + +[directory] +fish_style_pwd_dir_length = 1 + +[status] +map_symbol = true +format = '[$symbol$status $common_meaning$signal_name$maybe_int]($style) ' +disabled = false diff --git a/modules/home/rofi/default.nix b/modules/home/rofi/default.nix index 239599b..54bcf37 100644 --- a/modules/home/rofi/default.nix +++ b/modules/home/rofi/default.nix @@ -28,7 +28,7 @@ in { # this would need you to config rofi using home-manager # programs.rofi = { enable = true; }; - # home.packages = with pkgs; [ rofi ]; + home.packages = with pkgs; [ rofi ]; home.file = { ".config/rofi/config.rasi".source = ./config.rasi; }; }; diff --git a/systems/x86_64-linux/kardorf/default.nix b/systems/x86_64-linux/kardorf/default.nix index 5f0c335..53d7e9f 100644 --- a/systems/x86_64-linux/kardorf/default.nix +++ b/systems/x86_64-linux/kardorf/default.nix @@ -145,14 +145,15 @@ description = "Julian"; uid = 1000; group = "julian"; - shell = pkgs.zsh; - extraGroups = [ "networkmanager" "wheel" "docker" ]; + shell = pkgs.fish; + extraGroups = [ "networkmanager" "wheel" "docker" "vboxusers" ]; packages = with pkgs; [ ]; # Using home-manager instead }; home-manager.useGlobalPkgs = true; # make overlays for nixpkgs work for home-manager, not only the system + programs.fish.enable = true; programs.zsh.enable = true; programs.nix-ld.enable = true;