diff --git a/hosts/tempest/default.nix b/hosts/tempest/default.nix index 76fdd89..8b0bda2 100644 --- a/hosts/tempest/default.nix +++ b/hosts/tempest/default.nix @@ -112,6 +112,7 @@ inputs.nixpkgs.lib.nixosSystem { mullvad.enable = false; rust.enable = true; terraform.enable = true; + wezterm.enable = true; yt-dlp.enable = true; gaming = { dwarf-fortress.enable = true; diff --git a/modules/common/applications/kitty.nix b/modules/common/applications/kitty.nix index 3ebbac9..468f30a 100644 --- a/modules/common/applications/kitty.nix +++ b/modules/common/applications/kitty.nix @@ -22,7 +22,7 @@ environment = { } // lib.attrsets.optionalAttrs (builtins.hasAttr "sessionVariables" config.environment) { - sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.kitty}/bin/kitty"; + sessionVariables.ROFI_SYSTEMD_TERM = lib.mkDefault "${pkgs.kitty}/bin/kitty"; }; home-manager.users.${config.user} = { @@ -31,7 +31,7 @@ xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "kitty"; # Set the Rofi terminal for running programs - programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux "${pkgs.kitty}/bin/kitty"; + programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux (lib.mkDefault "${pkgs.kitty}/bin/kitty"); # Display images in the terminal programs.fish.shellAliases = { diff --git a/modules/common/applications/wezterm.nix b/modules/common/applications/wezterm.nix index 61dc01e..243cec4 100644 --- a/modules/common/applications/wezterm.nix +++ b/modules/common/applications/wezterm.nix @@ -15,216 +15,220 @@ }; }; - config = lib.mkIf (config.gui.enable && config.wezterm.enable) { + config = + let + font = config.home-manager.users.${config.user}.programs.kitty.font.name; + in + lib.mkIf (config.gui.enable && config.wezterm.enable) { - # Set the Rofi-Systemd terminal for viewing logs - # Using optionalAttrs because only available in NixOS - environment = - { } - // lib.attrsets.optionalAttrs (builtins.hasAttr "sessionVariables" config.environment) { - sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm"; - }; + # Set the Rofi-Systemd terminal for viewing logs + # Using optionalAttrs because only available in NixOS + environment = + { } + // lib.attrsets.optionalAttrs (builtins.hasAttr "sessionVariables" config.environment) { + sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm"; + }; - home-manager.users.${config.user} = { + home-manager.users.${config.user} = { - # Set the i3 terminal - xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm"; + # Set the i3 terminal + xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm"; - # Set the Rofi terminal for running programs - programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux "${pkgs.wezterm}/bin/wezterm"; + # Set the Rofi terminal for running programs + programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux "${pkgs.wezterm}/bin/wezterm"; - # Display images in the terminal - programs.fish.shellAliases = { - icat = lib.mkForce "wezterm imgcat"; - }; + # Display images in the terminal + programs.fish.shellAliases = { + icat = lib.mkForce "wezterm imgcat"; + }; - programs.wezterm = { - enable = true; - colorSchemes = { - myTheme = { - background = config.theme.colors.base00; - foreground = config.theme.colors.base05; - cursor_bg = config.theme.colors.base05; - cursor_fg = config.theme.colors.base00; - cursor_border = config.theme.colors.base05; - selection_bg = config.theme.colors.base05; - selection_fg = config.theme.colors.base00; - scrollbar_thumb = config.theme.colors.base03; - ansi = [ - config.theme.colors.base01 # black - config.theme.colors.base0F # maroon - config.theme.colors.base0B # green - config.theme.colors.base0A # olive - config.theme.colors.base0D # navy - config.theme.colors.base0E # purple - config.theme.colors.base0C # teal - config.theme.colors.base06 # silver - ]; - brights = [ - config.theme.colors.base03 # grey - config.theme.colors.base08 # red - config.theme.colors.base0B # lime - config.theme.colors.base0A # yellow - config.theme.colors.base0D # blue - config.theme.colors.base0E # fuchsia - config.theme.colors.base0C # aqua - config.theme.colors.base07 # white - ]; - compose_cursor = config.theme.colors.base09; # orange - copy_mode_active_highlight_bg = { - Color = config.theme.colors.base03; - }; - copy_mode_active_highlight_fg = { - Color = config.theme.colors.base07; - }; - copy_mode_inactive_highlight_bg = { - Color = config.theme.colors.base02; - }; - copy_mode_inactive_highlight_fg = { - Color = config.theme.colors.base06; - }; - quick_select_label_bg = { - Color = config.theme.colors.base02; - }; - quick_select_label_fg = { - Color = config.theme.colors.base06; - }; - quick_select_match_bg = { - Color = config.theme.colors.base03; - }; - quick_select_match_fg = { - Color = config.theme.colors.base07; + programs.wezterm = { + enable = true; + colorSchemes = { + myTheme = { + background = config.theme.colors.base00; + foreground = config.theme.colors.base05; + cursor_bg = config.theme.colors.base05; + cursor_fg = config.theme.colors.base00; + cursor_border = config.theme.colors.base05; + selection_bg = config.theme.colors.base05; + selection_fg = config.theme.colors.base00; + scrollbar_thumb = config.theme.colors.base03; + ansi = [ + config.theme.colors.base01 # black + config.theme.colors.base0F # maroon + config.theme.colors.base0B # green + config.theme.colors.base0A # olive + config.theme.colors.base0D # navy + config.theme.colors.base0E # purple + config.theme.colors.base0C # teal + config.theme.colors.base06 # silver + ]; + brights = [ + config.theme.colors.base03 # grey + config.theme.colors.base08 # red + config.theme.colors.base0B # lime + config.theme.colors.base0A # yellow + config.theme.colors.base0D # blue + config.theme.colors.base0E # fuchsia + config.theme.colors.base0C # aqua + config.theme.colors.base07 # white + ]; + compose_cursor = config.theme.colors.base09; # orange + copy_mode_active_highlight_bg = { + Color = config.theme.colors.base03; + }; + copy_mode_active_highlight_fg = { + Color = config.theme.colors.base07; + }; + copy_mode_inactive_highlight_bg = { + Color = config.theme.colors.base02; + }; + copy_mode_inactive_highlight_fg = { + Color = config.theme.colors.base06; + }; + quick_select_label_bg = { + Color = config.theme.colors.base02; + }; + quick_select_label_fg = { + Color = config.theme.colors.base06; + }; + quick_select_match_bg = { + Color = config.theme.colors.base03; + }; + quick_select_match_fg = { + Color = config.theme.colors.base07; + }; }; }; - }; - extraConfig = '' - return { - color_scheme = "myTheme", + extraConfig = '' + return { + color_scheme = "myTheme", - -- Scrollback - scrollback_lines = 10000, + -- Scrollback + scrollback_lines = 10000, - -- Window - window_padding = { - left = 6, - right = 6, - top = 0, - bottom = 0, - }, + -- Window + window_padding = { + left = 6, + right = 6, + top = 0, + bottom = 0, + }, - font = wezterm.font 'VictorMono Nerd Font', - font_size = 18.0, + font = wezterm.font '${font}', + font_size = ${if pkgs.stdenv.isLinux then "14.0" else "18.0"}, - -- Tab Bar - window_frame = { - font = wezterm.font 'VictorMono Nerd Font', - font_size = 16.0, - }, + -- Tab Bar + window_frame = { + font = wezterm.font 'VictorMono Nerd Font', + font_size = ${if pkgs.stdenv.isLinux then "12.0" else "16.0"}, + }, - colors = { - tab_bar = { - active_tab = { - bg_color = '${config.theme.colors.base00}', - fg_color = '${config.theme.colors.base04}', + colors = { + tab_bar = { + active_tab = { + bg_color = '${config.theme.colors.base00}', + fg_color = '${config.theme.colors.base04}', + }, }, }, - }, - -- Disable audio - audible_bell = "Disabled", + -- Disable audio + audible_bell = "Disabled", - initial_rows = 80, - initial_cols = 200, + initial_rows = 80, + initial_cols = 200, - keys = { - -- sends completion string for fish autosuggestions - { - key = 'Enter', - mods = 'SHIFT', - action = wezterm.action.SendString '\x1F' - }, - -- ctrl-shift-h was "hide" - { - key = 'H', - mods = 'SHIFT|CTRL', - action = wezterm.action.DisableDefaultAssignment - }, - -- alt-enter was "fullscreen" - { - key = 'Enter', - mods = 'ALT', - action = wezterm.action.DisableDefaultAssignment - }, - -- make super-f "fullscreen" - { - key = 'f', - mods = 'SUPER', - action = wezterm.action.ToggleFullScreen - }, - -- super-t open new tab in new dir - { - key = 't', - mods = 'SUPER', - action = wezterm.action.SpawnCommandInNewTab { - cwd = wezterm.home_dir, + keys = { + -- sends completion string for fish autosuggestions + { + key = 'Enter', + mods = 'SHIFT', + action = wezterm.action.SendString '\x1F' }, - }, - -- shift-super-t open new tab in same dir - { - key = 't', - mods = 'SUPER|SHIFT', - action = wezterm.action.SpawnTab 'CurrentPaneDomain' - }, - -- project switcher - { - key = 'P', - mods = 'SUPER', - action = wezterm.action_callback(function(window, pane) - local choices = {} + -- ctrl-shift-h was "hide" + { + key = 'H', + mods = 'SHIFT|CTRL', + action = wezterm.action.DisableDefaultAssignment + }, + -- alt-enter was "fullscreen" + { + key = 'Enter', + mods = 'ALT', + action = wezterm.action.DisableDefaultAssignment + }, + -- make super-f "fullscreen" + { + key = 'f', + mods = 'SUPER', + action = wezterm.action.ToggleFullScreen + }, + -- super-t open new tab in new dir + { + key = 't', + mods = 'SUPER', + action = wezterm.action.SpawnCommandInNewTab { + cwd = wezterm.home_dir, + }, + }, + -- shift-super-t open new tab in same dir + { + key = 't', + mods = 'SUPER|SHIFT', + action = wezterm.action.SpawnTab 'CurrentPaneDomain' + }, + -- project switcher + { + key = 'P', + mods = 'SUPER', + action = wezterm.action_callback(function(window, pane) + local choices = {} - wezterm.log_info "working?" + wezterm.log_info "working?" - function scandir(directory) - local i, t, popen = 0, {}, io.popen - local pfile = popen('${pkgs.fd}/bin/fd --search-path "'..directory..'" --type directory --exact-depth 2 | ${pkgs.proximity-sort}/bin/proximity-sort "'..os.getenv("HOME").."/dev/work"..'"') - for filename in pfile:lines() do - i = i + 1 - t[i] = filename - end - pfile:close() - return t - end - - for _, v in pairs(scandir(os.getenv("HOME").."/dev")) do - table.insert(choices, { label = v }) - end - - window:perform_action( - wezterm.action.InputSelector { - action = wezterm.action_callback(function(window, pane, id, label) - if not id and not label then - wezterm.log_info "cancelled" - else - window:perform_action( - wezterm.action.SpawnCommandInNewTab { - cwd = label, - }, - pane - ) + function scandir(directory) + local i, t, popen = 0, {}, io.popen + local pfile = popen('${pkgs.fd}/bin/fd --search-path "'..directory..'" --type directory --exact-depth 2 | ${pkgs.proximity-sort}/bin/proximity-sort "'..os.getenv("HOME").."/dev/work"..'"') + for filename in pfile:lines() do + i = i + 1 + t[i] = filename end - end), - fuzzy = true, - title = "Select Project", - choices = choices, - }, - pane - ) - end), + pfile:close() + return t + end + + for _, v in pairs(scandir(os.getenv("HOME").."/dev")) do + table.insert(choices, { label = v }) + end + + window:perform_action( + wezterm.action.InputSelector { + action = wezterm.action_callback(function(window, pane, id, label) + if not id and not label then + wezterm.log_info "cancelled" + else + window:perform_action( + wezterm.action.SpawnCommandInNewTab { + cwd = label, + }, + pane + ) + end + end), + fuzzy = true, + title = "Select Project", + choices = choices, + }, + pane + ) + end), + }, }, - }, - } - ''; + } + ''; + }; }; }; - }; } diff --git a/modules/nixos/graphical/i3.nix b/modules/nixos/graphical/i3.nix index 8dba045..3aff995 100644 --- a/modules/nixos/graphical/i3.nix +++ b/modules/nixos/graphical/i3.nix @@ -9,6 +9,7 @@ let lockCmd = "${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span"; lockUpdate = "${pkgs.betterlockscreen}/bin/betterlockscreen --update ${config.wallpaper} --display 1 --span"; + terminal = "wezterm"; in { @@ -47,9 +48,10 @@ in assigns = { "${ws1}" = [ { class = "Firefox"; } ]; "${ws2}" = [ - { class = "kitty"; } { class = "aerc"; } + { class = "kitty"; } { class = "obsidian"; } + { class = "wezterm"; } ]; "${ws3}" = [ { class = "discord"; } ]; "${ws4}" = [ @@ -126,7 +128,9 @@ in "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; # Launchers - "${modifier}+Return" = "exec --no-startup-id kitty; workspace ${ws2}; layout tabbed"; + "${modifier}+Return" = "exec --no-startup-id ${ + config.home-manager.users.${config.user}.programs.rofi.terminal + }; workspace ${ws2}; layout tabbed"; "${modifier}+space" = "exec --no-startup-id ${config.launcherCommand}"; "${modifier}+Shift+s" = "exec --no-startup-id ${config.systemdSearch}"; "${modifier}+Shift+a" = "exec --no-startup-id ${config.audioSwitchCommand}"; @@ -138,8 +142,12 @@ in "${modifier}+Shift+r" = "restart"; "${modifier}+Shift+q" = ''exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"''; "${modifier}+Shift+x" = "exec ${lockCmd}"; - "${modifier}+Mod1+h" = "exec --no-startup-id kitty sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'"; - "${modifier}+Mod1+r" = "exec --no-startup-id kitty sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'"; + "${modifier}+Mod1+h" = "exec --no-startup-id ${ + config.home-manager.users.${config.user}.programs.rofi.terminal + } -e sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'"; + "${modifier}+Mod1+r" = "exec --no-startup-id ${ + config.home-manager.users.${config.user}.programs.rofi.terminal + } -e sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'"; # Window options "${modifier}+q" = "kill"; diff --git a/modules/nixos/graphical/rofi.nix b/modules/nixos/graphical/rofi.nix index 511dd5b..87430f1 100644 --- a/modules/nixos/graphical/rofi.nix +++ b/modules/nixos/graphical/rofi.nix @@ -18,9 +18,6 @@ in config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) { - # Set the Rofi-Systemd terminal for viewing logs - environment.sessionVariables.ROFI_SYSTEMD_TERM = lib.mkIf config.kitty.enable "${pkgs.kitty}/bin/kitty"; - home-manager.users.${config.user} = { home.packages = with pkgs; [