📦 Moved more configs to common files, and refactored code with common

This commit is contained in:
Martin Berg Alstad 2025-01-08 19:47:02 +01:00
parent 57ebb73095
commit 89acd3e5cb
Signed by: martials
GPG Key ID: A3824877B269F2E2
15 changed files with 317 additions and 243 deletions

View File

@ -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
}

View File

@ -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
];

View File

@ -1,5 +1,4 @@
{ ... }:
# TODO more defaults
{
xdg.mimeApps = {
enable = true;

View File

@ -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 = {

View File

@ -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)";
};
};
};
};
}

View File

@ -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"

View File

@ -11,10 +11,5 @@
./swaync
];
programs = {
btop.enable = true;
kitty.settings.window_padding_width = 10;
};
wayland.windowManager.hyprland.enable = true;
}

View File

@ -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"

View File

@ -10,7 +10,7 @@ in
* {
all: unset;
font-size: 14px;
font-family: "JetBrains Mono", monospace;
font-family: "${theme.nerdFont} Nerd Font", monospace;
transition: 200ms;
}

View File

@ -1,6 +1,4 @@
# Neovim configuration for Nix
{ ... }:
{
home.sessionVariables = {
EDITOR = "nvim";

View File

@ -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)'

View File

@ -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");
}
'';
};
}

View File

@ -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
];
};
}

View File

@ -1,5 +1,3 @@
{ ... }:
# TODO move locale config for hyprland here
let
utf-8 = "UTF-8";

View File

@ -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;