diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/boot/nixos/default.nix (renamed from modules/boot/system/default.nix) | 0 | ||||
| -rw-r--r-- | modules/boot/nixos/plymouth.nix (renamed from modules/boot/system/plymouth.nix) | 0 | ||||
| -rw-r--r-- | modules/desktop/hjem/default.nix | 12 | ||||
| -rw-r--r-- | modules/desktop/hjem/gtk.nix | 37 | ||||
| -rw-r--r-- | modules/desktop/hjem/programs/firefox.nix | 26 | ||||
| -rw-r--r-- | modules/desktop/hjem/programs/foot.nix (renamed from modules/desktop/system/programs/foot.nix) | 14 | ||||
| -rw-r--r-- | modules/desktop/hjem/wm/dunst.nix (renamed from modules/desktop/system/components/dunst.nix) | 8 | ||||
| -rw-r--r-- | modules/desktop/hjem/wm/fuzzel.nix (renamed from modules/desktop/system/components/fuzzel.nix) | 17 | ||||
| -rw-r--r-- | modules/desktop/hjem/wm/sway.nix (renamed from modules/desktop/system/environments/sway.nix) | 30 | ||||
| -rw-r--r-- | modules/desktop/home/default.nix | 2 | ||||
| -rw-r--r-- | modules/desktop/home/gtk.nix | 18 | ||||
| -rw-r--r-- | modules/desktop/home/gtk/adwaita.nix | 33 | ||||
| -rw-r--r-- | modules/desktop/home/gtk/catppuccin.nix | 33 | ||||
| -rw-r--r-- | modules/desktop/home/gtk/default.nix | 26 | ||||
| -rw-r--r-- | modules/desktop/nixos/default.nix | 11 | ||||
| -rw-r--r-- | modules/desktop/nixos/gnome.nix (renamed from modules/desktop/system/environments/gnome.nix) | 8 | ||||
| -rw-r--r-- | modules/desktop/nixos/greeters/gdm.nix | 13 | ||||
| -rw-r--r-- | modules/desktop/nixos/greeters/greetd.nix | 19 | ||||
| -rw-r--r-- | modules/desktop/nixos/programs/blackbox.nix (renamed from modules/desktop/system/programs/blackbox.nix) | 0 | ||||
| -rw-r--r-- | modules/desktop/nixos/programs/firefox.nix (renamed from modules/desktop/system/programs/firefox.nix) | 14 | ||||
| -rw-r--r-- | modules/desktop/options.nix | 92 | ||||
| -rw-r--r-- | modules/desktop/system/default.nix | 13 | ||||
| -rw-r--r-- | modules/nix/nixos/default.nix (renamed from modules/nix/system/default.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/audio.nix (renamed from modules/services/system/audio.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/bluetooth.nix (renamed from modules/services/system/bluetooth.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/default.nix (renamed from modules/services/system/default.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/networking/default.nix (renamed from modules/services/system/networking/default.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/networking/iwd.nix (renamed from modules/services/system/networking/iwd.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/networking/networkmanager.nix (renamed from modules/services/system/networking/networkmanager.nix) | 0 | ||||
| -rw-r--r-- | modules/services/nixos/tailscale.nix (renamed from modules/services/system/tailscale.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/hjem/default.nix (renamed from modules/terminal/system/default.nix) | 11 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/bash.nix | 29 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/bat.nix | 25 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/broot.nix | 136 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/cmus.nix | 95 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/eza.nix | 25 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/fish.nix | 35 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/fzf.nix | 25 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/git.nix | 29 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/helix.nix | 165 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/lazygit.nix | 39 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/starship.nix | 62 | ||||
| -rw-r--r-- | modules/terminal/hjem/programs/tmux.nix | 330 | ||||
| -rw-r--r-- | modules/terminal/nixos/default.nix | 10 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/bash.nix (renamed from modules/terminal/system/programs/bash.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/bat.nix (renamed from modules/terminal/system/programs/bat.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/broot.nix (renamed from modules/terminal/system/programs/broot.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/cmus.nix (renamed from modules/terminal/system/programs/cmus.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/eza.nix (renamed from modules/terminal/system/programs/eza.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/fish.nix (renamed from modules/terminal/system/programs/fish.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/fzf.nix (renamed from modules/terminal/system/programs/fzf.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/git.nix (renamed from modules/terminal/system/programs/git.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/helix.nix (renamed from modules/terminal/system/programs/helix.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/lazygit.nix (renamed from modules/terminal/system/programs/lazygit.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/starship.nix (renamed from modules/terminal/system/programs/starship.nix) | 0 | ||||
| -rw-r--r-- | modules/terminal/nixos/programs/tmux.nix (renamed from modules/terminal/system/programs/tmux.nix) | 0 | ||||
| -rw-r--r-- | modules/user/nixos/default.nix (renamed from modules/user/system/default.nix) | 0 |
57 files changed, 1245 insertions, 197 deletions
diff --git a/modules/boot/system/default.nix b/modules/boot/nixos/default.nix index 53f18be..53f18be 100644 --- a/modules/boot/system/default.nix +++ b/modules/boot/nixos/default.nix diff --git a/modules/boot/system/plymouth.nix b/modules/boot/nixos/plymouth.nix index 5f7952b..5f7952b 100644 --- a/modules/boot/system/plymouth.nix +++ b/modules/boot/nixos/plymouth.nix diff --git a/modules/desktop/hjem/default.nix b/modules/desktop/hjem/default.nix new file mode 100644 index 0000000..a1a28c5 --- /dev/null +++ b/modules/desktop/hjem/default.nix @@ -0,0 +1,12 @@ +{ + imports = [ + ./gtk.nix + + ./wm/sway.nix + ./wm/dunst.nix + ./wm/fuzzel.nix + + ./programs/foot.nix + ./programs/firefox.nix + ]; +} diff --git a/modules/desktop/hjem/gtk.nix b/modules/desktop/hjem/gtk.nix new file mode 100644 index 0000000..bee5936 --- /dev/null +++ b/modules/desktop/hjem/gtk.nix @@ -0,0 +1,37 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.desktop.gtk; +in { + packages = with pkgs; [ + dconf + + papirus-icon-theme + cfg.cursor_data.package + cfg.theme_data.package + ]; + + xdg.config.files = let + value.Settings = { + gtk-cursor-theme-name = cfg.cursor_data.name; + gtk-cursor-size = 24; + gtk-icon-theme-name = "Papirus"; + gtk-theme-name = cfg.theme_data.name; + }; + in { + "gtk-3.0/settings.ini" = { + generator = lib.generators.toINI {}; + inherit value; + }; + "gtk-4.0/settings.ini" = { + generator = lib.generators.toINI {}; + inherit value; + }; + "gtk-4.0/gtk.css".text = '' + @import url("file://${cfg.theme_data.package}/gtk-4.0/gtk.css"); + ''; + }; +} diff --git a/modules/desktop/hjem/programs/firefox.nix b/modules/desktop/hjem/programs/firefox.nix new file mode 100644 index 0000000..73040d2 --- /dev/null +++ b/modules/desktop/hjem/programs/firefox.nix @@ -0,0 +1,26 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.collinux.desktop.programs.firefox; +in + lib.mkIf cfg.enable { + files.".mozilla/firefox/profiles.ini" = { + generator = lib.generators.toINI {}; + value = { + Profile0 = { + Name = "collin"; + IsRelative = 1; + Path = "collin"; + Default = 1; + }; + General = { + StartWithLastProfile = 1; + Version = 2; + }; + }; + }; + packages = [pkgs.firefox]; + } diff --git a/modules/desktop/system/programs/foot.nix b/modules/desktop/hjem/programs/foot.nix index 1b99ce3..4d630c6 100644 --- a/modules/desktop/system/programs/foot.nix +++ b/modules/desktop/hjem/programs/foot.nix @@ -50,14 +50,12 @@ }; in lib.mkIf cfg.enable { - hjem.users."${config.collinux.user.name}" = { - files = { - ".config/foot/foot.ini" = { - generator = lib.generators.toINI {}; - value = settings; - }; + files = { + ".config/foot/foot.ini" = { + generator = lib.generators.toINI {}; + value = settings; }; - - packages = [pkgs.foot]; }; + + packages = [pkgs.foot]; } diff --git a/modules/desktop/system/components/dunst.nix b/modules/desktop/hjem/wm/dunst.nix index 1069087..38a8240 100644 --- a/modules/desktop/system/components/dunst.nix +++ b/modules/desktop/hjem/wm/dunst.nix @@ -4,7 +4,7 @@ pkgs, ... }: let - cfg = config.collinux.desktop.components.dunst; + cfg = config.collinux.desktop.sway.components.dunst; settings = '' [global] @@ -31,8 +31,6 @@ ''; in lib.mkIf cfg.enable { - hjem.users."${config.collinux.user.name}" = { - files.".config/dunst/dunstrc".text = settings; - packages = [pkgs.dunst pkgs.inotify-tools]; - }; + files.".config/dunst/dunstrc".text = settings; + packages = with pkgs; [dunst inotify-tools]; } diff --git a/modules/desktop/system/components/fuzzel.nix b/modules/desktop/hjem/wm/fuzzel.nix index f5937c6..7b9d075 100644 --- a/modules/desktop/system/components/fuzzel.nix +++ b/modules/desktop/hjem/wm/fuzzel.nix @@ -4,12 +4,11 @@ pkgs, ... }: let - cfg = config.collinux.desktop.components.fuzzel; - ini' = pkgs.formats.ini {}; + cfg = config.collinux.desktop.sway.components.fuzzel; - settings = ini'.generate "fuzzel.ini" { + settings = { main = { - prompt = " "; + prompt = ""; dpi-aware = false; font = "Iosevka Nerd Font"; @@ -41,10 +40,10 @@ }; in lib.mkIf cfg.enable { - hjem.users."${config.collinux.user.name}" = { - files = { - ".config/fuzzel/fuzzel.ini".source = settings; - }; - packages = [pkgs.fuzzel]; + files.".config/fuzzel/fuzzel.ini" = { + generator = lib.generators.toINI {}; + value = settings; }; + + packages = [pkgs.fuzzel]; } diff --git a/modules/desktop/system/environments/sway.nix b/modules/desktop/hjem/wm/sway.nix index dec071a..1cd7750 100644 --- a/modules/desktop/system/environments/sway.nix +++ b/modules/desktop/hjem/wm/sway.nix @@ -81,8 +81,8 @@ bindsym Mod4+Shift+b exec ${pkgs.qutebrowser}/bin/qutebrowser bindsym Mod4+q kill - bindsym XF86AudioRaiseVolume exec 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; dunstify -t 300 -h string:x-canonical-private-synchronous:audio "Volume: " -h "int:value:$(dec=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d\" \" -f2);echo "$dec * 100" | bc)"' - bindsym XF86AudioLowerVolume exec 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; dunstify -t 300 -h string:x-canonical-private-synchronous:audio "Volume: " -h "int:value:$(dec=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d\" \" -f2);echo "$dec * 100" | bc)"' + bindsym XF86AudioRaiseVolume exec 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; dunstify -t 300 -h string:x-canonical-private-synchronous:audio "Volume: " -h "int:value:$(dec=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d\" \" -f2);echo "$dec * 100" | ${pkgs.bc}/bin/bc)"' + bindsym XF86AudioLowerVolume exec 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; dunstify -t 300 -h string:x-canonical-private-synchronous:audio "Volume: " -h "int:value:$(dec=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d\" \" -f2);echo "$dec * 100" | ${pkgs.bc}/bin/bc)"' bindsym XF86MonBrightnessUp exec 'brightnessctl set 5%+; dunstify -t 300 -h string:x-canonical-private-synchronous:brightness "Brightness: " -h "int:value:$(g=$(brightnessctl get);m=$(brightnessctl max);echo $((g * 100 / m)))"' bindsym XF86MonBrightnessDown exec 'brightnessctl set 5%-; dunstify -t 300 -h string:x-canonical-private-synchronous:brightness "Brightness: " -h "int:value:$(g=$(brightnessctl get);m=$(brightnessctl max);echo $((g * 100 / m)))"' @@ -97,24 +97,14 @@ ''; in lib.mkIf cfg.enable { - hjem.users."${config.collinux.user.name}" = { - files = { - ".config/sway/config".text = settings; - ".config/sway/catppuccin-mocha".text = colors; - }; - - packages = [pkgs.sway pkgs.bc pkgs.brightnessctl pkgs.playerctl]; + files = { + ".config/sway/config".text = settings; + ".config/sway/catppuccin-mocha".text = colors; }; - # Greetd - services.greetd = { - enable = true; - settings = rec { - initial_session = { - command = "${pkgs.sway}/bin/sway"; - user = config.collinux.user.name; - }; - default_session = initial_session; - }; - }; + packages = with pkgs; [ + sway + brightnessctl + playerctl + ]; } diff --git a/modules/desktop/home/default.nix b/modules/desktop/home/default.nix index be5e97f..7671378 100644 --- a/modules/desktop/home/default.nix +++ b/modules/desktop/home/default.nix @@ -1,5 +1,5 @@ { imports = [ - ./gtk + ./gtk.nix ]; } diff --git a/modules/desktop/home/gtk.nix b/modules/desktop/home/gtk.nix new file mode 100644 index 0000000..a8f6be0 --- /dev/null +++ b/modules/desktop/home/gtk.nix @@ -0,0 +1,18 @@ +{ + lib, + config, + ... +}: let + cfg = config.collinux.desktop.gtk; +in + lib.mkIf (cfg.enable && cfg.theme == "adwaita") { + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + enable-hot-corners = false; + }; + }; + }; + } diff --git a/modules/desktop/home/gtk/adwaita.nix b/modules/desktop/home/gtk/adwaita.nix deleted file mode 100644 index 1a17d13..0000000 --- a/modules/desktop/home/gtk/adwaita.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: let - cfg = config.collinux.desktop.gtk; -in - lib.mkIf (cfg.theme == "adwaita") { - home.pointerCursor = { - gtk.enable = true; - dotIcons.enable = false; - - package = pkgs.vanilla-dmz; - name = "Vanilla-DMZ"; - size = 24; - }; - - gtk.theme = { - name = "adw-gtk3"; - package = pkgs.adw-gtk3; - }; - - dconf = { - enable = true; - settings = { - "org/gnome/desktop/interface" = { - color-scheme = "prefer-dark"; - enable-hot-corners = false; - }; - }; - }; - } diff --git a/modules/desktop/home/gtk/catppuccin.nix b/modules/desktop/home/gtk/catppuccin.nix deleted file mode 100644 index 81f0d3d..0000000 --- a/modules/desktop/home/gtk/catppuccin.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: let - cfg = config.collinux.desktop.gtk; -in - lib.mkIf (cfg.theme == "catppuccin") { - home.pointerCursor = { - hyprcursor = { - enable = true; - size = 24; - }; - gtk.enable = true; - dotIcons.enable = false; - - package = pkgs.catppuccin-cursors.mochaDark; - name = "catppuccin-mocha-dark-cursors"; - size = 24; - }; - - gtk = { - theme = { - package = pkgs.catppuccin-gtk.override { - accents = ["blue"]; - variant = "mocha"; - size = "standard"; - }; - name = "catppuccin-mocha-blue-standard"; - }; - }; - } diff --git a/modules/desktop/home/gtk/default.nix b/modules/desktop/home/gtk/default.nix deleted file mode 100644 index 8dc00f2..0000000 --- a/modules/desktop/home/gtk/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: let - cfg = config.collinux.gtk; -in { - imports = [ - ./catppuccin.nix - ./adwaita.nix - ]; - - config = { - home.packages = [pkgs.dconf]; - - gtk = { - enable = true; - iconTheme = { - package = pkgs.papirus-icon-theme; - name = "Papirus"; - }; - gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; - }; - }; -} diff --git a/modules/desktop/nixos/default.nix b/modules/desktop/nixos/default.nix new file mode 100644 index 0000000..23deeca --- /dev/null +++ b/modules/desktop/nixos/default.nix @@ -0,0 +1,11 @@ +{...}: { + imports = [ + ./gnome.nix + + ./greeters/greetd.nix + ./greeters/gdm.nix + + ./programs/firefox.nix + ./programs/blackbox.nix + ]; +} diff --git a/modules/desktop/system/environments/gnome.nix b/modules/desktop/nixos/gnome.nix index e298756..967452e 100644 --- a/modules/desktop/system/environments/gnome.nix +++ b/modules/desktop/nixos/gnome.nix @@ -7,18 +7,14 @@ cfg = config.collinux.desktop.gnome; in lib.mkIf cfg.enable { - services.displayManager.gdm = { - enable = true; - wayland = true; - }; services.desktopManager.gnome.enable = true; environment.gnome.excludePackages = with pkgs; [ orca evince - file-roller + # file-roller geary - gnome-disk-utility + # gnome-disk-utility seahorse # sushi # sysprof diff --git a/modules/desktop/nixos/greeters/gdm.nix b/modules/desktop/nixos/greeters/gdm.nix new file mode 100644 index 0000000..598114a --- /dev/null +++ b/modules/desktop/nixos/greeters/gdm.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + ... +}: let + cfg = config.collinux.desktop.gdm; +in + lib.mkIf cfg.enable { + services.displayManager.gdm = { + enable = true; + wayland = true; + }; + } diff --git a/modules/desktop/nixos/greeters/greetd.nix b/modules/desktop/nixos/greeters/greetd.nix new file mode 100644 index 0000000..42ff9a7 --- /dev/null +++ b/modules/desktop/nixos/greeters/greetd.nix @@ -0,0 +1,19 @@ +{ + config, + lib, + ... +}: let + cfg = config.collinux.desktop.greetd; +in + lib.mkIf cfg.enable { + services.greetd = { + enable = true; + settings = rec { + initial_session = { + command = lib.getExe cfg.command; + user = config.collinux.user.name; + }; + default_session = initial_session; + }; + }; + } diff --git a/modules/desktop/system/programs/blackbox.nix b/modules/desktop/nixos/programs/blackbox.nix index 37567b5..37567b5 100644 --- a/modules/desktop/system/programs/blackbox.nix +++ b/modules/desktop/nixos/programs/blackbox.nix diff --git a/modules/desktop/system/programs/firefox.nix b/modules/desktop/nixos/programs/firefox.nix index b2d83f3..8ca4b30 100644 --- a/modules/desktop/system/programs/firefox.nix +++ b/modules/desktop/nixos/programs/firefox.nix @@ -34,18 +34,4 @@ in ]; }; }; - - hjem.users."${config.collinux.user.name}".files = { - ".mozilla/firefox/profiles.ini".text = '' - [Profile0] - Name=collin - IsRelative=1 - Path=collin - Default=1 - - [General] - StartWithLastProfile=1 - Version=2 - ''; - }; } diff --git a/modules/desktop/options.nix b/modules/desktop/options.nix index 9bc4099..9a60ff6 100644 --- a/modules/desktop/options.nix +++ b/modules/desktop/options.nix @@ -1,4 +1,5 @@ { + pkgs, config, lib, my-lib, @@ -9,32 +10,85 @@ in { options = { collinux.desktop = { - greeter = mkOption { - type = types.enum ["gdm" "greetd"]; - default = let - cfg = config.collinux.desktop; - in - if (cfg.sway.enable && !cfg.gnome.enable) - then "greetd" - else "gdm"; - }; - wallpaper = mkOption { - type = types.path; + type = with types; oneOf [str path]; + description = "File to use as the wallpaper on this machine"; }; - components = { - waybar = mkProgramOption "waybar"; - dunst = mkProgramOption "dunst"; - fuzzel = mkProgramOption "fuzzel"; + greetd = { + enable = mkEnableOption "greetd greeter"; + command = mkOption { + type = lib.types.package; + default = let + cfg = config.collinux.desktop; + in + if (cfg.sway.enable && !cfg.gnome.enable) + then pkgs.sway + else null; + }; }; + gdm.enable = mkEnableOption "gdm display manager"; - sway.enable = mkEnableOption "sway"; + sway = { + enable = mkEnableOption "sway"; + components = { + # waybar = mkProgramOption "waybar"; + dunst = mkProgramOption "dunst"; + fuzzel = mkProgramOption "fuzzel"; + }; + }; gnome.enable = mkEnableOption "gnome"; - gtk.theme = mkOption { - type = types.enum ["catppuccin" "adwaita"]; - default = config.collinux.theme; + gtk = { + theme = mkOption { + type = types.enum ["catppuccin" "adwaita"]; + default = config.collinux.theme; + }; + cursor_data = { + package = mkOption { + type = lib.types.package; + default = + if (config.collinux.desktop.gtk.theme == "catppuccin") + then pkgs.catppuccin-cursors.mochaDark + else if (config.collinux.desktop.gtk.theme == "adwaita") + then pkgs.vanilla-dmz + else null; + }; + name = mkOption { + type = lib.types.str; + default = + if (config.collinux.desktop.gtk.theme == "catppuccin") + then "catppuccin-mocha-dark-cursors" + else if (config.collinux.desktop.gtk.theme == "adwaita") + then "Vanilla-DMZ" + else null; + }; + }; + theme_data = { + package = mkOption { + type = lib.types.package; + default = + if (config.collinux.desktop.gtk.theme == "catppuccin") + then + (pkgs.catppuccin-gtk.override { + variant = "mocha"; + accents = ["blue"]; + size = "standard"; + }) + else if (config.collinux.desktop.gtk.theme == "adwaita") + then pkgs.adw-gtk3 + else ""; + }; + name = mkOption { + type = lib.types.str; + default = + if (config.collinux.desktop.gtk.theme == "catppuccin") + then "catppuccin-mocha-blue-standard" + else if (config.collinux.desktop.gtk.theme == "adwaita") + then "adw-gtk3" + else ""; + }; + }; }; programs = { diff --git a/modules/desktop/system/default.nix b/modules/desktop/system/default.nix deleted file mode 100644 index efc39bc..0000000 --- a/modules/desktop/system/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{...}: { - imports = [ - ./environments/gnome.nix - ./environments/sway.nix - - ./programs/firefox.nix - ./programs/foot.nix - ./programs/blackbox.nix - - ./components/fuzzel.nix - ./components/dunst.nix - ]; -} diff --git a/modules/nix/system/default.nix b/modules/nix/nixos/default.nix index 9c5c51e..9c5c51e 100644 --- a/modules/nix/system/default.nix +++ b/modules/nix/nixos/default.nix diff --git a/modules/services/system/audio.nix b/modules/services/nixos/audio.nix index 93f8289..93f8289 100644 --- a/modules/services/system/audio.nix +++ b/modules/services/nixos/audio.nix diff --git a/modules/services/system/bluetooth.nix b/modules/services/nixos/bluetooth.nix index a86b5b3..a86b5b3 100644 --- a/modules/services/system/bluetooth.nix +++ b/modules/services/nixos/bluetooth.nix diff --git a/modules/services/system/default.nix b/modules/services/nixos/default.nix index b9ae4c7..b9ae4c7 100644 --- a/modules/services/system/default.nix +++ b/modules/services/nixos/default.nix diff --git a/modules/services/system/networking/default.nix b/modules/services/nixos/networking/default.nix index 68c794c..68c794c 100644 --- a/modules/services/system/networking/default.nix +++ b/modules/services/nixos/networking/default.nix diff --git a/modules/services/system/networking/iwd.nix b/modules/services/nixos/networking/iwd.nix index d081792..d081792 100644 --- a/modules/services/system/networking/iwd.nix +++ b/modules/services/nixos/networking/iwd.nix diff --git a/modules/services/system/networking/networkmanager.nix b/modules/services/nixos/networking/networkmanager.nix index f22f922..f22f922 100644 --- a/modules/services/system/networking/networkmanager.nix +++ b/modules/services/nixos/networking/networkmanager.nix diff --git a/modules/services/system/tailscale.nix b/modules/services/nixos/tailscale.nix index 3fbd691..3fbd691 100644 --- a/modules/services/system/tailscale.nix +++ b/modules/services/nixos/tailscale.nix diff --git a/modules/terminal/system/default.nix b/modules/terminal/hjem/default.nix index 120e967..7915319 100644 --- a/modules/terminal/system/default.nix +++ b/modules/terminal/hjem/default.nix @@ -1,6 +1,4 @@ -{config, ...}: let - cfg = config.collinux.terminal.shells; -in { +{ imports = [ ./programs/fzf.nix ./programs/bat.nix @@ -14,11 +12,4 @@ in { ./programs/helix.nix ./programs/fish.nix ]; - - programs.command-not-found.enable = false; # broken without nix-channels - - users.users."${config.collinux.user.name}" = { - shell = cfg.defaultShell; - ignoreShellProgramCheck = true; - }; } diff --git a/modules/terminal/hjem/programs/bash.nix b/modules/terminal/hjem/programs/bash.nix new file mode 100644 index 0000000..646cbf8 --- /dev/null +++ b/modules/terminal/hjem/programs/bash.nix @@ -0,0 +1,29 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.shells.bash; +in + lib.mkIf cfg.enable { + files = { + ".bashrc".text = '' + eval "$(direnv hook bash)" + + for file in ~/.config/bash/conf.d/*; do source "$file"; done + ''; + + packages = with pkgs; [ + fish + ripgrep + fd + moreutils + zip + unzip + btop + jq + direnv + ]; + }; + } diff --git a/modules/terminal/hjem/programs/bat.nix b/modules/terminal/hjem/programs/bat.nix new file mode 100644 index 0000000..3d605cc --- /dev/null +++ b/modules/terminal/hjem/programs/bat.nix @@ -0,0 +1,25 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.programs.bat; +in + lib.mkIf cfg.enable { + files = + (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/bat.fish".text = '' + alias cat bat + set -gx BAT_THEME "base16" + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.bash.enable { + ".config/fish/conf.d/bat.bash".text = '' + alias cat="bat" + export BAT_THEME="base16" + ''; + }); + + packages = [pkgs.bat]; + } diff --git a/modules/terminal/hjem/programs/broot.nix b/modules/terminal/hjem/programs/broot.nix new file mode 100644 index 0000000..72098f8 --- /dev/null +++ b/modules/terminal/hjem/programs/broot.nix @@ -0,0 +1,136 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.shells.fish; + + conf = { + skin = catppuccin_skin; + verbs = [ + { + name = "open-code"; + key = "enter"; + execution = "$EDITOR +{line} {file}"; + working_dir = "{root}"; + apply_to = "file"; + leave_broot = true; + } + ]; + }; + + catppuccin_skin = { + input = "rgb(205, 214, 244) none"; + selected_line = "none rgb(88, 91, 112)"; + default = "rgb(205, 214, 244) none"; + tree = "rgb(108, 112, 134) none"; + parent = "rgb(116, 199, 236) none"; + file = "none none"; + + perm__ = "rgb(186, 194, 222) none"; + perm_r = "rgb(250, 179, 135) none"; + perm_w = "rgb(235, 160, 172) none"; + perm_x = "rgb(166, 227, 161) none"; + owner = "rgb(148, 226, 213) none"; + group = "rgb(137, 220, 235) none"; + + dates = "rgb(186, 194, 222) none"; + + directory = "rgb(180, 190, 254) none Bold"; + exe = "rgb(166, 227, 161) none"; + link = "rgb(249, 226, 175) none"; + pruning = "rgb(166, 173, 200) none Italic"; + + preview_title = "rgb(205, 214, 244) rgb(24, 24, 37)"; + preview = "rgb(205, 214, 244) rgb(24, 24, 37)"; + preview_line_number = "rgb(108, 112, 134) none"; + preview_separator = "rgb(108, 112, 134) none"; + + char_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + content_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + preview_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + + count = "rgb(249, 226, 175) none"; + sparse = "rgb(243, 139, 168) none"; + content_extract = "rgb(243, 139, 168) none Italic"; + + git_branch = "rgb(250, 179, 135) none"; + git_insertions = "rgb(250, 179, 135) none"; + git_deletions = "rgb(250, 179, 135) none"; + git_status_current = "rgb(250, 179, 135) none"; + git_status_modified = "rgb(250, 179, 135) none"; + git_status_new = "rgb(250, 179, 135) none Bold"; + git_status_ignored = "rgb(250, 179, 135) none"; + git_status_conflicted = "rgb(250, 179, 135) none"; + git_status_other = "rgb(250, 179, 135) none"; + staging_area_title = "rgb(250, 179, 135) none"; + + flag_label = "rgb(243, 139, 168) none"; + flag_value = "rgb(243, 139, 168) none Bold"; + + status_normal = "none rgb(24, 24, 37)"; + status_italic = "rgb(243, 139, 168) rgb(24, 24, 37) Italic"; + status_bold = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + status_ellipsis = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + status_error = "rgb(205, 214, 244) rgb(243, 139, 168)"; + status_job = "rgb(235, 160, 172) rgb(40, 38, 37)"; + status_code = "rgb(235, 160, 172) rgb(24, 24, 37) Italic"; + mode_command_mark = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + + help_paragraph = "rgb(205, 214, 244) none"; + help_headers = "rgb(243, 139, 168) none Bold"; + help_bold = "rgb(250, 179, 135) none Bold"; + help_italic = "rgb(249, 226, 175) none Italic"; + help_code = "rgb(166, 227, 161) rgb(49, 50, 68)"; + help_table_border = "rgb(108, 112, 134) none"; + + hex_null = "rgb(205, 214, 244) none"; + hex_ascii_graphic = "rgb(250, 179, 135) none"; + hex_ascii_whitespace = "rgb(166, 227, 161) none"; + hex_ascii_other = "rgb(148, 226, 213) none"; + hex_non_ascii = "rgb(243, 139, 168) none"; + + file_error = "rgb(251, 73, 52) none"; + + purpose_normal = "none none"; + purpose_italic = "rgb(177, 98, 134) none Italic"; + purpose_bold = "rgb(177, 98, 134) none Bold"; + purpose_ellipsis = "none none"; + + scrollbar_track = "rgb(49, 50, 68) none"; + scrollbar_thumb = "rgb(88, 91, 112) none"; + + good_to_bad_0 = "rgb(166, 227, 161) none"; + good_to_bad_1 = "rgb(148, 226, 213) none"; + good_to_bad_2 = "rgb(137, 220, 235) none"; + good_to_bad_3 = "rgb(116, 199, 236) none"; + good_to_bad_4 = "rgb(137, 180, 250) none"; + good_to_bad_5 = "rgb(180, 190, 254) none"; + good_to_bad_6 = "rgb(203, 166, 247) none"; + good_to_bad_7 = "rgb(250, 179, 135) none"; + good_to_bad_8 = "rgb(235, 160, 172) none"; + good_to_bad_9 = "rgb(243, 139, 168) none"; + }; +in + lib.mkIf cfg.enable { + files = + { + ".config/broot/conf.toml" = { + generator = (pkgs.formats.toml {}).generate "conf.toml"; + value = conf; + }; + } + // (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/broot.fish".text = '' + broot --print-shell-function fish | source + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.bash.enable { + ".config/bash/conf.d/broot.bash".text = '' + eval "$(broot --print-shell-function bash)" + ''; + }); + + packages = [pkgs.broot]; + } diff --git a/modules/terminal/hjem/programs/cmus.nix b/modules/terminal/hjem/programs/cmus.nix new file mode 100644 index 0000000..afd2350 --- /dev/null +++ b/modules/terminal/hjem/programs/cmus.nix @@ -0,0 +1,95 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.collinux.terminal.programs.cmus; + + scriptsDir = "~/.config/cmus/scripts"; + + scripts.statusDisplay = '' + while [ $# -ge 2 ]; do + eval _$1='$2' + shift + shift + done + + [ -d ~/.local/share/cmus ] || mkdir ~/.local/share/cmus + + if [ -n "$_file" ]; then + ${pkgs.ffmpeg}/bin/ffmpeg -i "$_file" -y -an -c:v copy ~/.local/share/cmus/curr_cover.jpg || rm ~/.local/share/cmus/curr_cover.jpg + fi + + ${pkgs.dunst}/bin/dunstify -t 2000 -u low -h string:x-canonical-private-synchronous:music -i ~/.local/share/cmus/curr_cover.jpg "$_status: $_title" "$_artist" + ''; + + cmus_theme = '' + set color_cmdline_bg=default + set color_cmdline_fg=default + set color_error=211 + set color_info=223 + set color_separator=8 + set color_statusline_bg=default + set color_statusline_fg=default + set color_titleline_bg=183 + set color_titleline_fg=8 + set color_titleline_attr=bold + set color_win_bg=default + set color_win_cur=117 + set color_win_cur_sel_bg=117 + set color_win_cur_sel_fg=235 + set color_win_dir=default + set color_win_fg=default + set color_win_inactive_cur_sel_bg=0 + set color_win_inactive_cur_sel_fg=default + set color_win_inactive_sel_bg=0 + set color_win_inactive_sel_fg=default + set color_win_sel_bg=15 + set color_win_sel_fg=235 + set color_win_title_bg=default + set color_win_title_fg=183 + set color_win_title_attr=bold + ''; + + cmus_rc = '' + ${ + if (cfg.theme == "catppuccin") + then "colorscheme catppuccin" + else "" + } + set status_display_program=${scriptsDir}/status.sh + ''; + + cava_config = + if cfg.theme == "catppuccin" + then '' + [color] + gradient=1 + gradient_color_1='#94e2d5' + gradient_color_2='#89dceb' + gradient_color_3='#74c7ec' + gradient_color_4='#89b4fa' + gradient_color_5='#cba6f7' + gradient_color_6='#f5c2e7' + gradient_color_7='#eba0ac' + gradient_color_8='#f38ba8' + '' + else ""; +in + lib.mkIf cfg.enable { + files = let + e = text: { + inherit text; + executable = true; + }; + in { + ".config/cmus/scripts/status.sh" = e scripts.statusDisplay; + + ".config/cmus/rc".text = cmus_rc; + ".config/cmus/catppuccin.theme".text = lib.mkIf (cfg.theme == "catppuccin") cmus_theme; + ".config/cava/config".text = cava_config; + }; + + packages = with pkgs; [cava cmus]; + } diff --git a/modules/terminal/hjem/programs/eza.nix b/modules/terminal/hjem/programs/eza.nix new file mode 100644 index 0000000..b900ceb --- /dev/null +++ b/modules/terminal/hjem/programs/eza.nix @@ -0,0 +1,25 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.collinux.terminal.programs.eza; +in + lib.mkIf cfg.enable { + files = + (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/eza.fish".text = '' + alias ls "eza -A -w 80 --group-directories-first -I '.git*'" + alias tree "eza -T" + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/bash/conf.d/eza.bash".text = '' + alias ls="eza -A -w 80 --group-directories-first -I '.git*'" + alias tree="eza -T" + ''; + }); + + packages = [pkgs.eza]; + } diff --git a/modules/terminal/hjem/programs/fish.nix b/modules/terminal/hjem/programs/fish.nix new file mode 100644 index 0000000..1aa4a40 --- /dev/null +++ b/modules/terminal/hjem/programs/fish.nix @@ -0,0 +1,35 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.shells.fish; +in + lib.mkIf cfg.enable { + files = { + ".config/fish/config.fish".text = '' + set fish_greeting + + function fish_title + echo fish (prompt_pwd) + end + + direnv hook fish | source + pay-respects fish --alias | source + ''; + }; + + packages = with pkgs; [ + fish + ripgrep + fd + moreutils + zip + unzip + btop + jq + direnv + pay-respects + ]; + } diff --git a/modules/terminal/hjem/programs/fzf.nix b/modules/terminal/hjem/programs/fzf.nix new file mode 100644 index 0000000..5a51739 --- /dev/null +++ b/modules/terminal/hjem/programs/fzf.nix @@ -0,0 +1,25 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.programs.fzf; +in + lib.mkIf cfg.enable { + files = + (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/fzf.fish".text = '' + fzf --fish | source + set -gx FZF_DEFAULT_OPTS "--color bg:#1E1E2E,bg+:#313244,border:#313244,fg:#CDD6F4,fg+:#CDD6F4,header:#F38BA8,hl:#F38BA8,hl+:#F38BA8,info:#CBA6F7,label:#CDD6F4,marker:#B4BEFE,pointer:#F5E0DC,prompt:#CBA6F7,selected-bg:#45475A,spinner:#F5E0DC" + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.bash.enable { + ".config/bash/conf.d/fzf.bash".text = '' + eval "$(fzf --bash)" + export FZF_DEFAULT_OPTS="--color bg:#1E1E2E,bg+:#313244,border:#313244,fg:#CDD6F4,fg+:#CDD6F4,header:#F38BA8,hl:#F38BA8,hl+:#F38BA8,info:#CBA6F7,label:#CDD6F4,marker:#B4BEFE,pointer:#F5E0DC,prompt:#CBA6F7,selected-bg:#45475A,spinner:#F5E0DC" + ''; + }); + + packages = [pkgs.fzf]; + } diff --git a/modules/terminal/hjem/programs/git.nix b/modules/terminal/hjem/programs/git.nix new file mode 100644 index 0000000..d196f26 --- /dev/null +++ b/modules/terminal/hjem/programs/git.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.collinux.terminal.programs.git; + + git_config = { + alias = { + stage = "add"; + unstage = "restore --staged"; + }; + init.defaultBranch = "main"; + user = { + email = cfg.userEmail; + name = cfg.userName; + }; + }; +in { + files = { + ".config/git/config" = { + generator = lib.generators.toGitINI; + value = git_config; + }; + }; + + packages = [pkgs.git]; +} diff --git a/modules/terminal/hjem/programs/helix.nix b/modules/terminal/hjem/programs/helix.nix new file mode 100644 index 0000000..2c30881 --- /dev/null +++ b/modules/terminal/hjem/programs/helix.nix @@ -0,0 +1,165 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.collinux.terminal.programs.helix; + + languages = { + language-server = { + rust-analyzer.command = "${pkgs.rust-analyzer}/bin/rust-analyzer"; + + nil = { + command = "${pkgs.nil}/bin/nil"; + config = { + nil.nix.flake.autoArchive = true; + }; + }; + superhtml = { + command = "${pkgs.superhtml}/bin/superhtml"; + args = ["lsp"]; + }; + dhall-lsp-server.command = "${pkgs.dhall-lsp-server}/bin/dhall-lsp-server"; + }; + + language = [ + { + name = "nix"; + file-types = ["nix"]; + language-servers = ["nil"]; + indent = { + tab-width = 2; + unit = " "; + }; + formatter.command = "${pkgs.alejandra}/bin/alejandra"; + auto-format = true; + } + { + name = "html"; + file-types = ["html"]; + language-servers = ["superhtml"]; + auto-format = true; + } + ]; + }; + + theme = { + inherits = "catppuccin_mocha"; + "ui.background" = {}; + }; + + mkHelixConfig = { + theme, + hardMode ? false, + }: { + inherit theme; + editor = { + gutters = ["diff" "diagnostics" "line-numbers" "spacer" "spacer"]; + cursorline = true; + color-modes = true; + + mouse = !hardMode; + + lsp.display-inlay-hints = true; + + statusline = { + left = ["mode" "file-name" "spacer" "file-modification-indicator"]; + right = ["spinner" "spacer" "workspace-diagnostics" "file-type"]; + separator = "x"; + }; + + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + }; + keys = { + normal = + { + "C-space" = "expand_selection"; + "A-j" = ["extend_to_line_bounds" "delete_selection" "paste_after"]; + "A-k" = ["extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before"]; + "X" = ["extend_line_up" "extend_to_line_bounds"]; + "C-left" = "goto_line_start"; + "C-right" = "goto_line_end"; + ";" = "flip_selections"; + "esc" = ["collapse_selection" "keep_primary_selection"]; + + # I don't even use these anyway + "pageup" = "no_op"; + "pagedown" = "no_op"; + "home" = "no_op"; + "end" = "no_op"; + } + // ( + if hardMode + then { + "up" = "no_op"; + "down" = "no_op"; + "left" = "no_op"; + "right" = "no_op"; + } + else {} + ); + + insert = + { + "pageup" = "no_op"; + "pagedown" = "no_op"; + "home" = "no_op"; + "end" = "no_op"; + } + // ( + if hardMode + then { + "up" = "no_op"; + "down" = "no_op"; + "left" = "no_op"; + "right" = "no_op"; + } + else {} + ); + + select = { + "esc" = ["collapse_selection" "insert_mode"]; + }; + }; + }; + + settings = mkHelixConfig { + inherit (cfg) hardMode; + theme = + if cfg.theme == "catppuccin" + then "catppuccin_mocha_transparent" + else if cfg.theme == "adwaita" + then "adwaita_dark" + else ""; + }; +in + lib.mkIf cfg.enable { + files = let + t = value: { + generator = (pkgs.formats.toml {}).generate "toml_file"; + inherit value; + }; + in + { + ".config/helix/config.toml" = t settings; + ".config/helix/languages.toml" = t languages; + ".config/helix/themes/catppuccin_mocha_transparent.toml" = t theme; + } + // (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/helix.fish".text = '' + set -gx EDITOR hx + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.bash.enable { + ".config/bash/conf.d/helix.bash".text = '' + EDITOR=hx + ''; + }); + + packages = [pkgs.helix]; + } diff --git a/modules/terminal/hjem/programs/lazygit.nix b/modules/terminal/hjem/programs/lazygit.nix new file mode 100644 index 0000000..a939446 --- /dev/null +++ b/modules/terminal/hjem/programs/lazygit.nix @@ -0,0 +1,39 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.collinux.terminal.programs.lazygit; + + settings = { + git.paging.pager = "${pkgs.diff-so-fancy}/bin/diff-so-fancy"; + gui = { + showRandomTip = false; + commitLength.show = false; + showListFooter = false; + showCommandLog = false; + showPanelJumps = false; + statusPanelView = "allBranchesLog"; + }; + update.method = "never"; + notARepository = "quit"; + + quitOnTopLevelReturn = true; + disableStartupPopups = true; + promptToReturnFromSubprocess = false; + + theme.inactiveBorderColor = ["#313244"]; + theme.activeBorderColor = ["#89b4fa"]; + }; +in + lib.mkIf cfg.enable { + files = { + ".config/lazygit/config.yml" = { + generator = lib.generators.toYAML {}; + value = settings; + }; + }; + + packages = [pkgs.lazygit]; + } diff --git a/modules/terminal/hjem/programs/starship.nix b/modules/terminal/hjem/programs/starship.nix new file mode 100644 index 0000000..e9d79b5 --- /dev/null +++ b/modules/terminal/hjem/programs/starship.nix @@ -0,0 +1,62 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.collinux.terminal.programs.starship; + + settings = { + format = ''$directory$git_branch$git_status $character''; + + add_newline = false; + scan_timeout = 10; + + character = { + success_symbol = "[λ](green bold)"; + error_symbol = "[Σ](red bold)"; + }; + + git_branch.format = "[@$branch](underline)"; + + git_status = { + format = "$modified$staged$ahead$behind"; + modified = "[!](red bold)"; + staged = "[+](green bold)"; + ahead = "[/](green)"; + behind = "[\](red)"; + }; + + directory = { + format = "$path"; + truncation_length = 3; + truncate_to_repo = true; + }; + }; +in + lib.mkIf cfg.enable { + files = + { + ".config/starship.toml" = { + generator = (pkgs.formats.toml {}).generate "starship.toml"; + value = settings; + }; + } + // (lib.optionalAttrs config.collinux.terminal.shells.fish.enable { + ".config/fish/conf.d/starship.fish".text = '' + function starship_transient_prompt_func + starship module character + end + + starship init fish | source + enable_transience + ''; + }) + // (lib.optionalAttrs config.collinux.terminal.shells.bash.enable { + ".config/bash/conf.d/starship.bash".text = '' + eval "$(starship init bash)" + ''; + }); + + packages = [pkgs.starship]; + } diff --git a/modules/terminal/hjem/programs/tmux.nix b/modules/terminal/hjem/programs/tmux.nix new file mode 100644 index 0000000..e20d041 --- /dev/null +++ b/modules/terminal/hjem/programs/tmux.nix @@ -0,0 +1,330 @@ +{ + lib, + config, + pkgs, + ... +}: let + cfg = config.collinux.terminal.programs.tmux; + + scriptsDir = "~/.config/tmux/scripts"; + + scripts.minibuffer = '' + window_height="$(tmux display -p '#{window_height}')" + tmux display-popup -EB \ + -w 100% -h 16 \ + -x 0 -y "$(($window_height + 1))" \ + "$@" + ''; + + scripts.menu = '' + tmux display-menu \ + -x "#{window_width}" -y S \ + -b none \ + -s "bg=#313244,fg=#9399b2" \ + -S "bg=#313244" \ + -H "bg=#45475a fg=#b4befe" \ + "$@" + ''; + + scripts.paneSplit = '' + width=$(tmux display -p "#{pane_width}") + height=$(tmux display -p "#{pane_height}") + + if (( $(echo "$width / $height > 2.5" | bc -l) )); then + tmux split-window -h "$@" + else + tmux split-window -v "$@" + fi + ''; + + # -- SESSIONIZER -- + broot_sessionizer_config = { + imports = ["~/.config/broot/conf.toml"]; + quit_on_last_cancel = true; + verbs = [ + { + invocation = "sessionizer"; + external = ''bash -c -- "${scriptsDir}/sessionizer.sh '{file}'"''; + key = "enter"; + apply_to = "directory"; + leave_broot = true; + } + ]; + }; + + scripts.sessionizer = '' + selected="$1" + + session_name="$(basename "$selected" | tr '.' '_')" + + # if the session doesn't exist, create it + if tmux list-sessions -F '#{session_name}' | grep -vqx "$session_name"; then + tmux new-session -ds "$session_name" -c "$selected" + tmux set-option -t "$session_name" @default-path "$selected" + fi + + # switch to it + tmux switch -t "$session_name" + ''; + + scripts.newSession = '' + tmux switch-client -t "$(tmux new-session -dP)" + ''; + + scripts.sessionsMenu = '' + menu_items=( + "Switch Project" p "run-shell '${scriptsDir}/minibuffer.sh -d $HOME ${scriptsDir}/launch-sessionizer.sh'" + "New Unnamed Project" n "run-shell '${scriptsDir}/new-session.sh'" + ) + + # Get all tmux session names + mapfile -t sessions < <(tmux list-sessions -F "#{session_name}") + + # Only include up to 9 sessions + for i in "''\${!sessions[@]}"; do + (( i >= 9 )) && break # Stop after 9 sessions + + session="''\${sessions[$i]}" + key=$((i + 1)) # 1-based key + + menu_items+=("$session" "$key" "switch-client -t $session") + done + + # Display the menu + ${scriptsDir}/menu.sh -T "#[align=centre]Projects" "''\${menu_items[@]}" + ''; + + scripts.cleanSessions = '' + current="$(tmux display -p '#{session_name}')" + + tmux list-sessions -F '#{session_name}' | while read -r line; do + if [[ "$line" != "$current" && "$line" =~ ^[[:digit:]]+$ ]]; then + tmux kill-session -t "$line" + fi + done + ''; + + scripts.launchSessionizer = ''broot --only-folders --conf ~/.config/tmux/broot/sessionizer.toml''; + + # -- FIND FILE -- + broot_file_config = { + imports = ["~/.config/broot/conf.toml"]; + quit_on_last_cancel = true; + verbs = [ + { + invocation = "tmux-split"; + external = ["bash" "-c" ''${scriptsDir}/split.sh -c "#{?@default-path,#{@default-path},#{pane_current_path}}" "hx '{file}'"'']; + key = "ctrl-s"; + apply_to = "file"; + leave_broot = true; + } + { + invocation = "tmux-window"; + external = ["tmux" "new-window" "-c" "#{?@default-path,#{@default-path},#{pane_current_path}}" "hx '{file}'"]; + key = "ctrl-w"; + apply_to = "file"; + leave_broot = true; + } + { + key = "enter"; + cmd = ":tmux-window"; + } + ]; + }; + + scripts.launchFindFile = ''broot --conf ~/.config/tmux/broot/file.toml''; + + # -- BAR -- + scripts.battery = '' + energy_now=$(cat /sys/class/power_supply/BAT0/energy_now) + energy_full=$(cat /sys/class/power_supply/BAT0/energy_full) + percentage=$((energy_now * 100 / energy_full)) + printf "%.0f%%" "$percentage" + ''; + + scripts.bar = '' + bg="#1e1e2e" + + tmux set -g status on + + tmux set -g status-position bottom + tmux set -g status-justify absolute-centre + tmux set -g status-bg "$bg" + + tmux set -g status-left-style fg=green,bold + tmux set -g status-left " #{client_session}" + + tmux set -g window-status-style fg=color243 + tmux set -g window-status-format " #I " + tmux set -g window-status-current-style fg=color12,bold + tmux set -g window-status-current-format " #I " + tmux set -g window-status-separator "" + + tmux set -g status-right "#[fg=color243]%l:%M #[fg=red]#(${scriptsDir}/battery.sh) " + + bg_dark="#181825" + + ## pane borders + tmux set -g pane-border-style fg=$bg_dark,bg=$bg_dark + tmux set -g pane-active-border-style fg=$bg_dark,bg=$bg_dark + + ## pane backgrounds + # Set the foreground/background color for the active window + tmux set -g window-active-style bg=$bg + + # Set the foreground/background color for all other windows + tmux set -g window-style bg=$bg_dark + ''; + + # -- FZF EXEC -- + scripts.tmuxDoc = '' + usage=$(tmux list-commands -F "#{command_list_name} #{command_list_usage}" "$1") + + man tmux | awk -v usage="$usage" ' + index($0, usage) > 0 { found=1 } + found { + print + if ($0 == "") exit + } + ' + ''; + + scripts.fzfExec = '' + all_cmds() { + tmux list-commands -F $'#{command_list_name}#{?command_list_alias,\n#{command_list_alias},}' + } + + selected_cmd=$(all_cmds | fzf --bind 'enter:accept-or-print-query,tab:replace-query,alt-backspace:clear-query' --prompt : --preview "~/.config/tmux/scripts/tmux-doc.sh $(printf '{}' | cut -d' ' -f1)") + test -z "$selected_cmd" && exit + + tmux $(echo "$selected_cmd" | sed "s@~@$HOME@g") + ''; + + # -- BUFFER SEARCH -- + scripts.searchBuffer = '' + trap 'rm -f -- "''\${scrollback:-}"' EXIT + scrollback="$(mktemp)" + + tmux capture-pane -e -p -S - > "$scrollback" + cat "$scrollback" | fzf --ansi + + exit 0 + ''; + + # -- PANE SEARCH -- + scripts.paneSearch = '' + LIST_DATA="#{window_name} #{pane_title} #{pane_current_path} #{pane_current_command}" + FZF_COMMAND="fzf --delimiter=: --with-nth 4 --color=hl:2" + + # do not change + TARGET_SPEC="#{session_name}:#{window_id}:#{pane_id}:" + + # select pane + LINE=$(tmux list-panes -a -F "$TARGET_SPEC $LIST_DATA" | $FZF_COMMAND) || exit 0 + # split the result + args=(''\${LINE//:/ }) + # activate session/window/pane + tmux select-pane -t ''\${args[2]} && tmux select-window -t ''\${args[1]} && tmux switch-client -t ''\${args[0]} + ''; + + # -- LEADER MENU -- + scripts.leaderMenu = '' + ${scriptsDir}/menu.sh -T "#[align=centre]Prefix" \ + "+Projects" C-p "run-shell ${scriptsDir}/sessions-menu.sh" \ + "Find File" C-f "run-shell \"${scriptsDir}/minibuffer.sh -d '#{?@default-path,#{@default-path},#{pane_current_path}}' '${scriptsDir}/launch-find-file.sh'\"" \ + "Find Window" C-w "run-shell \"${scriptsDir}/minibuffer.sh '${scriptsDir}/pane-search.sh'\"" \ + "Detach" C-d "detach" \ + "Lazygit" C-g "display-popup -E -w 80% -h 80% -x C -y C -d '#{?@default-path,#{@default-path},#{pane_current_path}}' lazygit" \ + "Search Buffer" / "run-shell \"${scriptsDir}/minibuffer.sh '${scriptsDir}/search-buffer.sh'\"" \ + "Todo" C-o "display-popup -E -w 70% -h 70% -x C -y C 'hx ~/Documents/todo.txt'" \ + "Reload" C-r "source-file ~/.config/tmux/tmux.conf" + ''; + + tmux-conf = '' + set -g mouse on + + # Panes + bind-key -n C-w kill-pane + + bind -n C-Enter run-shell "${scriptsDir}/split.sh -c '#{?@default-path,#{@default-path},#{pane_current_path}}'" + + unbind -n MouseDown3Pane ## disable right click menu + bind-key -n M-z resize-pane -Z ## Pane zoom + set -g allow-rename on + set -g automatic-rename off + + # Windows + bind-key -n C-t new-window -c '#{?@default-path,#{@default-path},#{pane_current_path}}' + bind-key -n C-Tab next-window + bind-key -n C-S-Tab previous-window # doesn't work in foot :( + unbind n + unbind p + + set -g renumber-windows on + set -g base-index 1 + + bind-key -n C-x run-shell "${scriptsDir}/leader-menu.sh" + bind-key -n M-x run-shell "${scriptsDir}/minibuffer.sh -h 10 '${scriptsDir}/fzf-exec.sh'" + + set-hook -ag client-detached 'run-shell ${scriptsDir}/clean-sessions.sh' + set-hook -ag client-session-changed 'run-shell ${scriptsDir}/clean-sessions.sh' + + # Statusbar + run-shell "${scriptsDir}/bar.sh" + + # Scrollback + set-window-option -g mode-keys vi + ''; +in + lib.mkIf cfg.enable { + files = let + e = text: { + inherit text; + executable = true; + }; + in { + # helpers + ".config/tmux/scripts/minibuffer.sh" = e scripts.minibuffer; + ".config/tmux/scripts/menu.sh" = e scripts.menu; + ".config/tmux/scripts/split.sh" = e scripts.paneSplit; + + # sessionizer + ".config/tmux/scripts/sessionizer.sh" = e scripts.sessionizer; + ".config/tmux/broot/sessionizer.toml" = { + generator = (pkgs.formats.toml {}).generate "sessionizer.toml"; + value = broot_sessionizer_config; + }; + ".config/tmux/scripts/launch-sessionizer.sh" = e scripts.launchSessionizer; + ".config/tmux/scripts/clean-sessions.sh" = e scripts.cleanSessions; + ".config/tmux/scripts/new-session.sh" = e scripts.newSession; + ".config/tmux/scripts/sessions-menu.sh" = e scripts.sessionsMenu; + + # find-file + ".config/tmux/scripts/launch-find-file.sh" = e scripts.launchFindFile; + ".config/tmux/broot/file.toml" = { + generator = (pkgs.formats.toml {}).generate "file.toml"; + value = broot_file_config; + }; + + # search buffer + ".config/tmux/scripts/search-buffer.sh" = e scripts.searchBuffer; + + # pane search + ".config/tmux/scripts/pane-search.sh" = e scripts.paneSearch; + + # fzf-exec + ".config/tmux/scripts/tmux-doc.sh" = e scripts.tmuxDoc; + ".config/tmux/scripts/fzf-exec.sh" = e scripts.fzfExec; + + # leader menu + ".config/tmux/scripts/leader-menu.sh" = e scripts.leaderMenu; + + # Bar + ".config/tmux/scripts/battery.sh" = e scripts.battery; + ".config/tmux/scripts/bar.sh" = e scripts.bar; + + ".config/tmux/tmux.conf".text = tmux-conf; + }; + + packages = [pkgs.tmux]; + } diff --git a/modules/terminal/nixos/default.nix b/modules/terminal/nixos/default.nix new file mode 100644 index 0000000..8118c63 --- /dev/null +++ b/modules/terminal/nixos/default.nix @@ -0,0 +1,10 @@ +{config, ...}: let + cfg = config.collinux.terminal.shells; +in { + programs.command-not-found.enable = false; # broken without nix-channels + + users.users."${config.collinux.user.name}" = { + shell = cfg.defaultShell; + ignoreShellProgramCheck = true; + }; +} diff --git a/modules/terminal/system/programs/bash.nix b/modules/terminal/nixos/programs/bash.nix index ed2c226..ed2c226 100644 --- a/modules/terminal/system/programs/bash.nix +++ b/modules/terminal/nixos/programs/bash.nix diff --git a/modules/terminal/system/programs/bat.nix b/modules/terminal/nixos/programs/bat.nix index d954291..d954291 100644 --- a/modules/terminal/system/programs/bat.nix +++ b/modules/terminal/nixos/programs/bat.nix diff --git a/modules/terminal/system/programs/broot.nix b/modules/terminal/nixos/programs/broot.nix index 6164044..6164044 100644 --- a/modules/terminal/system/programs/broot.nix +++ b/modules/terminal/nixos/programs/broot.nix diff --git a/modules/terminal/system/programs/cmus.nix b/modules/terminal/nixos/programs/cmus.nix index e5184ce..e5184ce 100644 --- a/modules/terminal/system/programs/cmus.nix +++ b/modules/terminal/nixos/programs/cmus.nix diff --git a/modules/terminal/system/programs/eza.nix b/modules/terminal/nixos/programs/eza.nix index acdcbc2..acdcbc2 100644 --- a/modules/terminal/system/programs/eza.nix +++ b/modules/terminal/nixos/programs/eza.nix diff --git a/modules/terminal/system/programs/fish.nix b/modules/terminal/nixos/programs/fish.nix index a210cd5..a210cd5 100644 --- a/modules/terminal/system/programs/fish.nix +++ b/modules/terminal/nixos/programs/fish.nix diff --git a/modules/terminal/system/programs/fzf.nix b/modules/terminal/nixos/programs/fzf.nix index fd86566..fd86566 100644 --- a/modules/terminal/system/programs/fzf.nix +++ b/modules/terminal/nixos/programs/fzf.nix diff --git a/modules/terminal/system/programs/git.nix b/modules/terminal/nixos/programs/git.nix index 9943e40..9943e40 100644 --- a/modules/terminal/system/programs/git.nix +++ b/modules/terminal/nixos/programs/git.nix diff --git a/modules/terminal/system/programs/helix.nix b/modules/terminal/nixos/programs/helix.nix index 54a6932..54a6932 100644 --- a/modules/terminal/system/programs/helix.nix +++ b/modules/terminal/nixos/programs/helix.nix diff --git a/modules/terminal/system/programs/lazygit.nix b/modules/terminal/nixos/programs/lazygit.nix index e3e2b42..e3e2b42 100644 --- a/modules/terminal/system/programs/lazygit.nix +++ b/modules/terminal/nixos/programs/lazygit.nix diff --git a/modules/terminal/system/programs/starship.nix b/modules/terminal/nixos/programs/starship.nix index f0134f0..f0134f0 100644 --- a/modules/terminal/system/programs/starship.nix +++ b/modules/terminal/nixos/programs/starship.nix diff --git a/modules/terminal/system/programs/tmux.nix b/modules/terminal/nixos/programs/tmux.nix index c349ded..c349ded 100644 --- a/modules/terminal/system/programs/tmux.nix +++ b/modules/terminal/nixos/programs/tmux.nix diff --git a/modules/user/system/default.nix b/modules/user/nixos/default.nix index 8692652..8692652 100644 --- a/modules/user/system/default.nix +++ b/modules/user/nixos/default.nix |
