diff --git a/default.nix b/default.nix index 3b3c351..bc20e61 100644 --- a/default.nix +++ b/default.nix @@ -11,6 +11,8 @@ in inputs.stylix.nixosModules.stylix (mkAliasOptionModule ["hm"] ["home-manager" "users" config.user.name]) (mkAliasOptionModule ["home"] ["hm" "home"]) + (mkAliasOptionModule ["create" "configFile"] ["hm" "xdg" "configFile"]) + (mkAliasOptionModule ["create" "dataFile"] ["hm" "xdg" "dataFile"]) ] ++ (mapModulesRec' (toString ./modules) import); diff --git a/modules/desktop/plasma.nix b/modules/desktop/plasma.nix index 7f59e9b..f87004e 100644 --- a/modules/desktop/plasma.nix +++ b/modules/desktop/plasma.nix @@ -1,28 +1,38 @@ -{ pkgs, ... }: +{ config, options, lib, pkgs, ... }: +let + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf; +in { - services = { - xserver.enable = true; + options.modules.desktop.plasma = let + inherit (lib.options) mkEnableOption; + in { enable = mkEnableOption "plasma 6"; }; - displayManager = { - sddm = { - enable = true; - wayland.enable = true; - }; - autoLogin = { - enable = true; - user = "chris"; + config = mkIf config.modules.desktop.plasma.enable { + services = { + xserver.enable = true; + + displayManager = { + sddm = { + enable = true; + wayland.enable = true; + }; + autoLogin = { + enable = true; + user = "chris"; + }; }; + + desktopManager.plasma6.enable = true; }; - desktopManager.plasma6.enable = true; + environment.sessionVariables.NIXOS_OZONE_WL = "1"; + + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + konsole + ]; + + # should enable theme integration with gtk apps (i.e. firefox, thunderbird) + programs.dconf.enable = true; }; - - environment.sessionVariables.NIXOS_OZONE_WL = "1"; - - environment.plasma6.excludePackages = with pkgs.kdePackages; [ - konsole - ]; - - # should enable theme integration with gtk apps (i.e. firefox, thunderbird) - programs.dconf.enable = true; } diff --git a/modules/desktop/terminal/alacrity.nix b/modules/desktop/terminal/alacrity.nix new file mode 100644 index 0000000..1f4dfd5 --- /dev/null +++ b/modules/desktop/terminal/alacrity.nix @@ -0,0 +1,148 @@ +{ + config, + options, + lib, + pkgs, + ... +}: let + inherit (builtins) toString; + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf mkMerge; + + active = config.modules.themes.active; +in { + options.modules.desktop.terminal.alacritty = let + inherit (lib.options) mkEnableOption; + in {enable = mkEnableOption "OpenGL terminal emulator";}; + + config = mkIf config.modules.desktop.terminal.alacritty.enable { + modules.shell.toolset.tmux.enable = true; + + hm.programs.alacritty = { + enable = true; + + settings = mkMerge [ + { + env = { + TERM = "xterm-256color"; + WINIT_X11_SCALE_FACTOR = "1.0"; + }; + + window.dynamic_title = true; + + scrolling = { + history = 5000; + multiplier = 3; + }; + + selection = { + semantic_escape_chars = '',│`|:"' ()[]{}<>''; + save_to_clipboard = false; + }; + + live_config_reload = true; + + shell = { + program = "${getExe pkgs.zsh}"; + args = ["-l" "-c" "tmux new || tmux"]; + }; + } + + (mkIf (active != null) { + import = ["~/.config/alacritty/config/${active}.toml"]; + }) + ]; + }; + + create.configFile = mkIf (active != null) { + alacritty-conf = { + target = "alacritty/config/${active}.toml"; + source = let + inherit (config.modules.themes.font) mono sans; + inherit (config.modules.themes.colors.main) bright normal types; + + tomlFormat = pkgs.formats.toml {}; + in + tomlFormat.generate "alacritty-theme" { + font = { + builtin_box_drawing = true; + size = mono.size; + + normal = { + family = "${mono.family}"; + style = "${sans.weight}"; + }; + + italic = { + family = "${mono.family}"; + style = "${sans.weight} Italic"; + }; + + bold = { + family = "${mono.family}"; + style = "${mono.weight}"; + }; + + bold_italic = { + family = "${mono.family}"; + style = "${mono.weight} Italic"; + }; + + offset = { + x = 0; + y = 0; + }; + glyph_offset = { + x = 0; + y = 0; + }; + }; + + colors = { + primary = { + foreground = "${types.fg}"; + background = "${types.bg}"; + }; + + cursor = { + text = "${types.bg}"; + cursor = "${normal.yellow}"; + }; + + vi_mode_cursor = { + text = "${types.bg}"; + cursor = "${normal.blue}"; + }; + + selection = { + text = "${types.bg}"; + background = "${types.highlight}"; + }; + + normal = { + black = "${normal.black}"; + red = "${normal.red}"; + green = "${normal.green}"; + yellow = "${normal.yellow}"; + blue = "${normal.blue}"; + magenta = "${normal.magenta}"; + cyan = "${normal.cyan}"; + white = "${normal.white}"; + }; + + bright = { + black = "${bright.black}"; + red = "${bright.red}"; + green = "${bright.green}"; + yellow = "${bright.yellow}"; + blue = "${bright.blue}"; + magenta = "${bright.magenta}"; + cyan = "${bright.cyan}"; + white = "${bright.white}"; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/desktop/terminal/default.nix b/modules/desktop/terminal/default.nix new file mode 100644 index 0000000..5b4b544 --- /dev/null +++ b/modules/desktop/terminal/default.nix @@ -0,0 +1,30 @@ +{ config, options, lib, pkgs, ... }: +let + inherit (lib.modules) mkDefault mkIf mkMerge; + + cfg = config.modules.desktop.terminal; +in { + options.modules.desktop.terminal = let + inherit (lib.options) mkOption; + inherit (lib.types) str; + in { + default = mkOption { + type = str; + default = "alacrity"; + description = "Default terminal"; + example = "alacrity"; + }; + }; + + config = mkMerge [ + { + home.sessionVariables.TERMINAL = cfg.default; + services.xserver.desktopManager.xterm.enable = mkDefault (cfg.default == "xterm"); + } + + (mkIf (config.modules.desktop.type == "x11") { + services.xserver.excludePackages = + mkIf (cfg.default != "xterm") [pkgs.xterm]; + }) + ]; +}