From 89acd3e5cb08587d908d8e2a3b5f8099c351da86 Mon Sep 17 00:00:00 2001 From: Martin Berg Alstad Date: Wed, 8 Jan 2025 19:47:02 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20Moved=20more=20configs=20to=20co?= =?UTF-8?q?mmon=20files,=20and=20refactored=20code=20with=20common?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common.nix | 24 ++- flake.nix | 22 +-- home-manager/default-applications.nix | 3 +- home-manager/default.nix | 13 +- home-manager/fish.nix | 178 ++++++++++++++++++++++- home-manager/hyprland/binds.nix | 17 ++- home-manager/hyprland/default.nix | 5 - home-manager/hyprland/settings.nix | 10 +- home-manager/hyprland/swaync/default.nix | 2 +- home-manager/nixvim/default.nix | 2 - home-manager/starship.toml | 174 ---------------------- home-manager/wlogout/default.nix | 82 +++++++++-- modules/fonts.nix | 24 +-- modules/locale.nix | 2 - modules/sddm.nix | 2 +- 15 files changed, 317 insertions(+), 243 deletions(-) delete mode 100644 home-manager/starship.toml diff --git a/common.nix b/common.nix index 203de02..a922195 100644 --- a/common.nix +++ b/common.nix @@ -1,16 +1,26 @@ rec { + default = { + browser = "io.github.zen_browser.zen.desktop"; + calculator = "gnome-calculator"; + fileManager = "nautilus"; + imageViewer = "org.gnome.Loupe.desktop"; + lockScreen = "hyprlock"; + terminal = "kitty"; + }; + + dir = { + home = "/home/${username}"; + pictures = "${dir.home}/Pictures"; + }; + + hostname = "nixos"; + keymaps = { layout = "gb,no"; options = "grp:alt_shift_toggle"; # Toggle using ALT + SHIFT }; username = "martin"; - hostname = "nixos"; - - dir = { - home = "/home/${username}"; - pictures = "${dir.home}/Pictures"; - }; # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions @@ -19,5 +29,5 @@ rec { # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.version = "24.11"; - terminal = "kitty"; + terminal = default.terminal; # TODO remove } diff --git a/flake.nix b/flake.nix index 344440c..923c69b 100644 --- a/flake.nix +++ b/flake.nix @@ -43,15 +43,19 @@ ./configuration.nix home-manager.nixosModules.home-manager { - home-manager = { - # Backups conflicting files in case of error - backupFileExtension = "bkp"; - useGlobalPkgs = true; - useUserPackages = true; - # Passes inputs as an argument to home-manager - extraSpecialArgs = { inherit inputs; }; - users.martin = import ./home-manager; - }; + home-manager = + let + common = import ./common.nix; + in + { + # Backups conflicting files in case of error + backupFileExtension = "bkp"; + useGlobalPkgs = true; + useUserPackages = true; + # Passes inputs as an argument to home-manager + extraSpecialArgs = { inherit inputs; }; + users.${common.username} = import ./home-manager; + }; } stylix.nixosModules.stylix ]; diff --git a/home-manager/default-applications.nix b/home-manager/default-applications.nix index a27eed4..0f51ecd 100644 --- a/home-manager/default-applications.nix +++ b/home-manager/default-applications.nix @@ -1,5 +1,4 @@ -{ ... }: - +# TODO more defaults { xdg.mimeApps = { enable = true; diff --git a/home-manager/default.nix b/home-manager/default.nix index feb976b..a40ff73 100644 --- a/home-manager/default.nix +++ b/home-manager/default.nix @@ -6,7 +6,7 @@ let common = import ../common.nix; username = common.username; - homeDir = "/home/${username}"; + dir = common.dir; in { imports = [ @@ -23,10 +23,10 @@ in # paths it should manage. home = { username = username; - homeDirectory = homeDir; + homeDirectory = dir.home; sessionVariables = { - XDG_PICTURES_DIR = "${homeDir}/Pictures"; + XDG_PICTURES_DIR = dir.pictures; # Define the default dir for pictures }; # You can update Home Manager without changing this value. See @@ -36,6 +36,8 @@ in }; programs = { + btop.enable = true; + git = { enable = true; userName = "Martin Berg Alstad"; @@ -48,7 +50,10 @@ in # Let Home Manager install and manage itself. home-manager.enable = true; - kitty.enable = true; + kitty = { + enable = common.terminal == "kitty"; + settings.window_padding_width = 10; + }; }; services = { diff --git a/home-manager/fish.nix b/home-manager/fish.nix index c82cd98..9b2bc1c 100644 --- a/home-manager/fish.nix +++ b/home-manager/fish.nix @@ -1,5 +1,13 @@ -{ pkgs, ... }: - +{ pkgs, lib, ... }: +let + replace = + from: to: current: + if current == from then to else current; + toSingleLine = + with lib.strings; + s: concatMapStrings (stringAsChars (replace "\n" "")) (splitString "n" s); + theme = import ../theme.nix; +in { programs = { fish = { @@ -18,9 +26,173 @@ ]; }; + # TODO catppuccin colours on all parts starship = { enable = true; - settings = (with builtins; fromTOML (readFile ./starship.toml)) // { }; + settings = { + format = toSingleLine '' + [](#${theme.mantleAlpha}) + $os + $username + [](bg:#${theme.lavenderAlpha} fg:#${theme.mantleAlpha}) + $directory + [](fg:#${theme.lavenderAlpha} bg:#${theme.blueAlpha}) + $git_branch + $git_status + [](fg:#${theme.blueAlpha} bg:#86BBD8) + $c + $elixir + $elm + $golang + $gradle + $haskell + $java + $julia + $nodejs + $nim + $rust + $scala + [](fg:#86BBD8 bg:#06969A) + $docker_context + [](fg:#06969A bg:#33658A) + $time + [ ](fg:#33658A) + ''; + + # Disable the blank line at the start of the prompt + # add_newline = false + + # You can also replace your username with a neat symbol like  or disable this + # and use the os module below + username = { + show_always = false; + style_user = "bg:#${theme.crustAlpha}"; + style_root = "bg:#${theme.mantleAlpha}"; + format = "[$user]($style) in "; + disabled = false; + }; + + os = { + style = "bg:#${theme.mantleAlpha}"; + disabled = false; + }; + + directory = { + style = "bg:#${theme.lavenderAlpha} fg:#${theme.baseAlpha}"; + format = "[ $path ]($style)"; + truncation_length = 3; + truncation_symbol = "…/"; + }; + + # Here is how you can shorten some long paths by text replacement + # similar to mapped_locations in Oh My Posh: + directory.substitutions = { + "Documents" = "󰈙 "; + "Downloads" = " "; + "Music" = "󰓃 "; + "Pictures" = " "; + }; + # Keep in mind that the order matters. For example: + # "Important Documents" = " 󰈙 " + # will not be replaced, because "Documents" was already substituted before. + # So either put "Important Documents" before "Documents" or use the substituted version: + # "Important 󰈙 " = " 󰈙 " + + c = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + docker_context = { + symbol = " "; + style = "bg:#06969A"; + format = "[ $symbol $context ]($style)"; + }; + + elixir = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + elm = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + git_branch = { + symbol = " "; + style = "bg:#${theme.blueAlpha} fg:#${theme.baseAlpha}"; + format = "[ $symbol $branch ]($style)"; + }; + + git_status = { + style = "bg:#${theme.blueAlpha} fg:#${theme.baseAlpha}"; + format = "[$all_status$ahead_behind ]($style)"; + }; + + golang = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + gradle = { + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + haskell = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + java = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + julia = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + nodejs = { + symbol = ""; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + nim = { + symbol = "󰆥 "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + rust = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + scala = { + symbol = " "; + style = "bg:#86BBD8"; + format = "[ $symbol ($version) ]($style)"; + }; + + time = { + disabled = false; + time_format = "%R"; # Hour:Minute Format + style = "bg:#33658A"; + format = "[ $time ]($style)"; + }; + }; }; }; } diff --git a/home-manager/hyprland/binds.nix b/home-manager/hyprland/binds.nix index dcdabb9..47565a2 100644 --- a/home-manager/hyprland/binds.nix +++ b/home-manager/hyprland/binds.nix @@ -1,20 +1,27 @@ +let + common = import ../../common.nix; + app = common.default; +in { + # TODO binds to move focused window wayland.windowManager.hyprland.settings = { "$mainMod" = "SUPER"; "$shiftMod" = "$mainMod SHIFT"; + "$menu" = "rofi -show drun"; bind = [ - "$mainMod, Q, exec, $terminal" + "$mainMod, Q, exec, ${app.terminal}" "$mainMod, C, killactive," "$shiftMod, M, exit," - "$mainMod, E, exec, $fileManager" + "$mainMod, E, exec, ${app.fileManager}" "$mainMod, V, togglefloating," "$mainMod, R, exec, $menu" "$mainMod, P, pseudo," # dwindle "$mainMod, J, togglesplit," # dwindle - "$mainMod, B, exec, $browser" - "$mainMod, L, exec, hyprlock" - "$mainMod, K, exec, [float] gnome-calculator" + "$mainMod, B, exec, ${app.browser}" + "$mainMod, L, exec, ${app.lockScreen}" + "$mainMod, K, exec, [float] ${app.calculator}" + "$mainMod, ESC, exec, wlogout" # Move focus with mainMod + arrow keys "$mainMod, left, movefocus, l" diff --git a/home-manager/hyprland/default.nix b/home-manager/hyprland/default.nix index a0a1369..7c3223f 100644 --- a/home-manager/hyprland/default.nix +++ b/home-manager/hyprland/default.nix @@ -11,10 +11,5 @@ ./swaync ]; - programs = { - btop.enable = true; - kitty.settings.window_padding_width = 10; - }; - wayland.windowManager.hyprland.enable = true; } diff --git a/home-manager/hyprland/settings.nix b/home-manager/hyprland/settings.nix index 4cf1998..7b50a0e 100644 --- a/home-manager/hyprland/settings.nix +++ b/home-manager/hyprland/settings.nix @@ -1,6 +1,7 @@ { lib, ... }: let common = import ../../common.nix; + app = common.default; theme = import ../../theme.nix; in { @@ -10,16 +11,11 @@ in "DP-3, 2560x1440@59.95, 1920x0, 1" ]; - "$browser" = "io.github.zen_browser.zen"; - "$terminal" = "kitty"; - "$fileManager" = "nautilus"; - "$menu" = "rofi -show drun"; - # Autostart exec-once = [ - "$browser" + "${app.browser}" "nextcloud" - "$terminal" + "${app.terminal}" "hypridle" "systemctl --user start hyprpolkitagent" "swaync" diff --git a/home-manager/hyprland/swaync/default.nix b/home-manager/hyprland/swaync/default.nix index 140703a..c676ec2 100644 --- a/home-manager/hyprland/swaync/default.nix +++ b/home-manager/hyprland/swaync/default.nix @@ -10,7 +10,7 @@ in * { all: unset; font-size: 14px; - font-family: "JetBrains Mono", monospace; + font-family: "${theme.nerdFont} Nerd Font", monospace; transition: 200ms; } diff --git a/home-manager/nixvim/default.nix b/home-manager/nixvim/default.nix index bbfe2b9..fbc91c7 100644 --- a/home-manager/nixvim/default.nix +++ b/home-manager/nixvim/default.nix @@ -1,6 +1,4 @@ # Neovim configuration for Nix -{ ... }: - { home.sessionVariables = { EDITOR = "nvim"; diff --git a/home-manager/starship.toml b/home-manager/starship.toml deleted file mode 100644 index 6b31c4c..0000000 --- a/home-manager/starship.toml +++ /dev/null @@ -1,174 +0,0 @@ -"$schema" = 'https://starship.rs/config-schema.json' - -palette = "catppuccin_mocha" - -format = """ -[](mantle)\ -$os\ -$username\ -[](bg:lavender fg:mantle)\ -$directory\ -[](fg:lavender bg:blue)\ -$git_branch\ -$git_status\ -[](fg:blue bg:#86BBD8)\ -$c\ -$elixir\ -$elm\ -$golang\ -$gradle\ -$haskell\ -$java\ -$julia\ -$nodejs\ -$nim\ -$rust\ -$scala\ -[](fg:#86BBD8 bg:#06969A)\ -$docker_context\ -[](fg:#06969A bg:#33658A)\ -$time\ -[ ](fg:#33658A)\ -""" - -# Disable the blank line at the start of the prompt -# add_newline = false - -[palettes.catppuccin_mocha] -rosewater = "#f5e0dc" -flamingo = "#f2cdcd" -pink = "#f5c2e7" -mauve = "#cba6f7" -red = "#f38ba8" -maroon = "#eba0ac" -peach = "#fab387" -yellow = "#f9e2af" -green = "#a6e3a1" -teal = "#94e2d5" -sky = "#89dceb" -sapphire = "#74c7ec" -blue = "#89b4fa" -lavender = "#b4befe" -text = "#cdd6f4" -subtext1 = "#bac2de" -subtext0 = "#a6adc8" -overlay2 = "#9399b2" -overlay1 = "#7f849c" -overlay0 = "#6c7086" -surface2 = "#585b70" -surface1 = "#45475a" -surface0 = "#313244" -base = "#1e1e2e" -mantle = "#181825" -crust = "#11111b" - -# You can also replace your username with a neat symbol like  or disable this -# and use the os module below -[username] -show_always = false -style_user = "bg:crust" -style_root = "bg:mantle" -format = "[$user]($style) in " -disabled = false - -[os] -style = "bg:mantle" -disabled = false - -[directory] -style = "bg:lavender fg:base" -format = "[ $path ]($style)" -truncation_length = 3 -truncation_symbol = "…/" - -# Here is how you can shorten some long paths by text replacement -# similar to mapped_locations in Oh My Posh: -[directory.substitutions] -"Documents" = "󰈙 " -"Downloads" = " " -"Music" = " " -"Pictures" = " " -# Keep in mind that the order matters. For example: -# "Important Documents" = " 󰈙 " -# will not be replaced, because "Documents" was already substituted before. -# So either put "Important Documents" before "Documents" or use the substituted version: -# "Important 󰈙 " = " 󰈙 " - -[c] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[docker_context] -symbol = " " -style = "bg:#06969A" -format = '[ $symbol $context ]($style)' - -[elixir] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[elm] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[git_branch] -symbol = " " -style = "bg:blue fg:base" -format = '[ $symbol $branch ]($style)' - -[git_status] -style = "bg:blue fg:base" -format = '[$all_status$ahead_behind ]($style)' - -[golang] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[gradle] -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[haskell] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[java] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[julia] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[nodejs] -symbol = "" -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[nim] -symbol = "󰆥 " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[rust] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[scala] -symbol = " " -style = "bg:#86BBD8" -format = '[ $symbol ($version) ]($style)' - -[time] -disabled = false -time_format = "%R" # Hour:Minute Format -style = "bg:#33658A" -format = '[ $time ]($style)' diff --git a/home-manager/wlogout/default.nix b/home-manager/wlogout/default.nix index 3a799e6..08474d0 100644 --- a/home-manager/wlogout/default.nix +++ b/home-manager/wlogout/default.nix @@ -1,15 +1,17 @@ # Log out and shutdown menu -{ ... }: - { - home.file = { - ".config/wlogout/hibernate.svg".source = ./hibernate.svg; - ".config/wlogout/lock.svg".source = ./lock.svg; - ".config/wlogout/logout.svg".source = ./logout.svg; - ".config/wlogout/reboot.svg".source = ./reboot.svg; - ".config/wlogout/shutdown.svg".source = ./shutdown.svg; - ".config/wlogout/suspend.svg".source = ./suspend.svg; - }; + home.file = + let + dir = ".config/wlogout"; + in + { + "${dir}/hibernate.svg".source = ./hibernate.svg; + "${dir}/lock.svg".source = ./lock.svg; + "${dir}/logout.svg".source = ./logout.svg; + "${dir}/reboot.svg".source = ./reboot.svg; + "${dir}/shutdown.svg".source = ./shutdown.svg; + "${dir}/suspend.svg".source = ./suspend.svg; + }; programs.wlogout = { enable = true; @@ -51,6 +53,64 @@ keybind = "r"; } ]; - style = ./style.css; + style = + let + theme = import ../../theme.nix; + in + '' + * { + background-image: none; + box-shadow: none; + } + + window { + background-color: rgba(30, 30, 46, 0.9); + } + + button { + border-radius: 0; + border-color: #${theme.pinkAlpha}; + text-decoration-color: #${theme.textAlpha}; + color: #${theme.textAlpha}; + background-color: #${theme.mantleAlpha}; + border-style: solid; + border-width: 1px; + background-repeat: no-repeat; + background-position: center; + background-size: 25%; + } + + button:focus, + button:active, + button:hover { + /* 20% Overlay 2, 80% mantle */ + background-color: rgb(48, 50, 66); + outline-style: none; + } + + #lock { + background-image: url("./lock.svg"); + } + + #logout { + background-image: url("./logout.svg"); + } + + #suspend { + background-image: url("./suspend.svg"); + } + + #hibernate { + background-image: url("./hibernate.svg"); + } + + #shutdown { + background-image: url("./shutdown.svg"); + } + + #reboot { + background-image: url("./reboot.svg"); + } + ''; }; } diff --git a/modules/fonts.nix b/modules/fonts.nix index f475597..c201c85 100644 --- a/modules/fonts.nix +++ b/modules/fonts.nix @@ -5,15 +5,19 @@ font-awesome # Icons ]; - fonts = { - fontconfig.enable = true; - packages = with pkgs; [ - (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) - jetbrains-mono - # The line below will replace the lines above in 25.05 - # nerd-fonts.jetbrains-mono - font-awesome - ]; - }; + fonts = + let + theme = import ../theme.nix; + in + { + fontconfig.enable = true; + packages = with pkgs; [ + (nerdfonts.override { fonts = [ theme.nerdFont ]; }) + jetbrains-mono + # The line below will replace the lines above in 25.05 + # nerd-fonts.jetbrains-mono + font-awesome + ]; + }; } diff --git a/modules/locale.nix b/modules/locale.nix index 9f7a9ed..08677ca 100644 --- a/modules/locale.nix +++ b/modules/locale.nix @@ -1,5 +1,3 @@ -{ ... }: - # TODO move locale config for hyprland here let utf-8 = "UTF-8"; diff --git a/modules/sddm.nix b/modules/sddm.nix index 5c4c032..e271bcb 100644 --- a/modules/sddm.nix +++ b/modules/sddm.nix @@ -7,7 +7,7 @@ in environment.systemPackages = with pkgs; [ (catppuccin-sddm.override { flavor = flavor; - font = "JetBrainsMono"; + font = theme.nerdFont; fontSize = "9"; background = "${../catppuccin_high.png}"; loginBackground = true;