reconfigured how home manager gets applied

This commit is contained in:
Leyla Becker 2024-10-03 14:48:14 +02:00
parent 26b231a329
commit ff295dc7ac
8 changed files with 438 additions and 361 deletions

View file

@ -30,6 +30,7 @@
- Look into this for flake templates https://nix.dev/manual/nix/2.22/command-ref/new-cli/nix3-flake-init
- Look into this for headscale https://carlosvaz.com/posts/setting-up-headscale-on-nixos/
- Look into this for home assistant configuration https://nixos.wiki/wiki/Home_Assistant https://myme.no/posts/2021-11-25-nixos-home-assistant.html
- This person seams to know what they are doing with home manager https://github.com/arvigeus/nixos-config/
## Configuration
set up git configuration for local development: `git config --local include.path .gitconfig`

View file

@ -71,13 +71,13 @@
modules = [
./hosts/horizon/configuration.nix
nixos-hardware.nixosModules.framework-11th-gen-intel
home-manager.nixosModules.default
# {
# home-manager.useGlobalPkgs = true;
# home-manager.useUserPackages = true;
# home-manager.extraSpecialArgs = { inherit inputs; };
# home-manager.users = import ./users;
# }
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
home-manager.extraSpecialArgs = { inherit inputs; };
}
];
};
# Leyla Desktop

View file

@ -14,6 +14,10 @@
../../enviroments/client
];
home-manager.users.leyla.config = {
isFullUser = true;
};
users = {
leyla.isFullUser = true;
ester.isFullUser = true;

View file

@ -4,4 +4,5 @@
users.mutableUsers = false;
home-manager.extraSpecialArgs = {inherit inputs;};
home-manager.users = import ./home.nix;
}

5
users/home.nix Normal file
View file

@ -0,0 +1,5 @@
{
leyla = import ./leyla/home.nix;
# ester = import ./ester/home.nix;
# eve = import ./eve/home.nix;
}

View file

@ -6,9 +6,9 @@
}: let
cfg = config.users.leyla;
in {
imports = [
./packages.nix
];
# imports = [
# ./packages.nix
# ];
options.users.leyla = {
isFullUser = lib.mkEnableOption "create usable leyla user";
@ -69,6 +69,6 @@ in {
];
};
home-manager.users.leyla = lib.mkIf (cfg.isFullUser || cfg.isThinUser) (import ./home.nix);
# home-manager.users.leyla = lib.mkIf (cfg.isFullUser || cfg.isThinUser) (import ./home.nix);
};
}

View file

@ -1,259 +1,272 @@
{
lib,
config,
pkgs,
...
}: {
# Home Manager needs a bit of information about you and the paths it should
# manage.
home = {
username = "leyla";
homeDirectory = "/home/leyla";
imports = [
./packages.nix
];
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
packages = [
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
#
sessionVariables = {
# EDITOR = "emacs";
};
options = {
isFullUser = lib.mkEnableOption "create usable leyla user";
isThinUser = lib.mkEnableOption "create usable user but witohut user applications";
hasGPU = lib.mkEnableOption "installs gpu intensive programs";
};
programs = {
# Let Home Manager install and manage itself.
home-manager.enable = true;
config = {
# Home Manager needs a bit of information about you and the paths it should
# manage.
home = {
username = "leyla";
homeDirectory = "/home/leyla";
# set up git defaults
git = {
enable = true;
userName = "Leyla Becker";
userEmail = "git@jan-leila.com";
extraConfig.init.defaultBranch = "main";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
packages = [
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
#
sessionVariables = {
# EDITOR = "emacs";
};
};
# add direnv to auto load flakes for development
direnv = {
enable = true;
enableBashIntegration = true; # see note on other shells below
nix-direnv.enable = true;
programs = {
# Let Home Manager install and manage itself.
home-manager.enable = true;
# set up git defaults
git = {
enable = true;
userName = "Leyla Becker";
userEmail = "git@jan-leila.com";
extraConfig.init.defaultBranch = "main";
};
# add direnv to auto load flakes for development
direnv = {
enable = true;
enableBashIntegration = true; # see note on other shells below
nix-direnv.enable = true;
};
bash.enable = true; # see note on other shells below
# firefox = {
# enable = true;
# profiles.leyla = {
# settings = {
# "browser.search.defaultenginename" = "Searx";
# "browser.search.order.1" = "Searx";
# };
# search = {
# force = true;
# default = "Searx";
# engines = {
# "Nix Packages" = {
# urls = [{
# template = "https://search.nixos.org/packages";
# params = [
# { name = "type"; value = "packages"; }
# { name = "query"; value = "{searchTerms}"; }
# ];
# }];
# icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
# definedAliases = [ "@np" ];
# };
# "NixOS Wiki" = {
# urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
# iconUpdateURL = "https://nixos.wiki/favicon.png";
# updateInterval = 24 * 60 * 60 * 1000; # every day
# definedAliases = [ "@nw" ];
# };
# "Searx" = {
# urls = [{ template = "https://search.jan-leila.com/?q={searchTerms}"; }];
# iconUpdateURL = "https://nixos.wiki/favicon.png";
# updateInterval = 24 * 60 * 60 * 1000; # every day
# definedAliases = [ "@searx" ];
# };
# };
# };
# extentions = with pkgs.nur.repos.rycee.firefox-addons; [
# ublock-origin
# bitwarden
# ];
# bookmarks = [
# {
# name = "Media";
# url = "https://jellyfin.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Drive";
# url = "https://drive.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Git";
# url = "https://git.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Home Automation";
# url = "https://home-assistant.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Mail";
# url = "https://mail.protonmail.com";
# keyword = "";
# tags = [""];
# }
# {
# name = "Open Street Map";
# url = "https://www.openstreetmap.org/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Password Manager";
# url = "https://vault.bitwarden.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Mastodon";
# url = "https://tech.lgbt";
# keyword = "";
# tags = [""];
# }
# {
# name = "Linked In";
# url = "https://www.linkedin.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Job Search";
# url = "https://www.jobsinnetwork.com/?state=cleaned_history&language%5B%5D=en&query=react&locations.countryCode%5B%5D=IT&locations.countryCode%5B%5D=DE&locations.countryCode%5B%5D=NL&experience%5B%5D=medior&experience%5B%5D=junior&page=1";
# keyword = "";
# tags = [""];
# }
# {
# name = "React Docs";
# url = "https://react.dev/";
# keyword = "";
# tags = [""];
# }
# # Template
# # {
# # name = "";
# # url = "";
# # keyword = "";
# # tags = [""];
# # }
# ];
# };
# }
};
bash.enable = true; # see note on other shells below
# firefox = {
# enable = true;
# profiles.leyla = {
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
# settings = {
# "browser.search.defaultenginename" = "Searx";
# "browser.search.order.1" = "Searx";
# };
"org/gnome/shell" = {
disable-user-extensions = false; # enables user extensions
enabled-extensions = [
# Put UUIDs of extensions that you want to enable here.
# If the extension you want to enable is packaged in nixpkgs,
# you can easily get its UUID by accessing its extensionUuid
# field (look at the following example).
pkgs.gnomeExtensions.dash-to-dock.extensionUuid
# search = {
# force = true;
# default = "Searx";
# engines = {
# "Nix Packages" = {
# urls = [{
# template = "https://search.nixos.org/packages";
# params = [
# { name = "type"; value = "packages"; }
# { name = "query"; value = "{searchTerms}"; }
# ];
# }];
# icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
# definedAliases = [ "@np" ];
# };
# "NixOS Wiki" = {
# urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
# iconUpdateURL = "https://nixos.wiki/favicon.png";
# updateInterval = 24 * 60 * 60 * 1000; # every day
# definedAliases = [ "@nw" ];
# };
# "Searx" = {
# urls = [{ template = "https://search.jan-leila.com/?q={searchTerms}"; }];
# iconUpdateURL = "https://nixos.wiki/favicon.png";
# updateInterval = 24 * 60 * 60 * 1000; # every day
# definedAliases = [ "@searx" ];
# };
# };
# };
# Alternatively, you can manually pass UUID as a string.
# "dash-to-dock@micxgx.gmail.com"
];
};
# extentions = with pkgs.nur.repos.rycee.firefox-addons; [
# ublock-origin
# bitwarden
"org/gnome/shell/extensions/dash-to-dock" = {
"dock-position" = "LEFT";
"intellihide-mode" = "ALL_WINDOWS";
"show-trash" = false;
"require-pressure-to-show" = false;
"show-mounts" = false;
};
# ];
# bookmarks = [
# {
# name = "Media";
# url = "https://jellyfin.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Drive";
# url = "https://drive.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Git";
# url = "https://git.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Home Automation";
# url = "https://home-assistant.jan-leila.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Mail";
# url = "https://mail.protonmail.com";
# keyword = "";
# tags = [""];
# }
# {
# name = "Open Street Map";
# url = "https://www.openstreetmap.org/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Password Manager";
# url = "https://vault.bitwarden.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Mastodon";
# url = "https://tech.lgbt";
# keyword = "";
# tags = [""];
# }
# {
# name = "Linked In";
# url = "https://www.linkedin.com/";
# keyword = "";
# tags = [""];
# }
# {
# name = "Job Search";
# url = "https://www.jobsinnetwork.com/?state=cleaned_history&language%5B%5D=en&query=react&locations.countryCode%5B%5D=IT&locations.countryCode%5B%5D=DE&locations.countryCode%5B%5D=NL&experience%5B%5D=medior&experience%5B%5D=junior&page=1";
# keyword = "";
# tags = [""];
# }
# {
# name = "React Docs";
# url = "https://react.dev/";
# keyword = "";
# tags = [""];
# }
# # Template
# # {
# # name = "";
# # url = "";
# # keyword = "";
# # tags = [""];
# # }
# ];
# };
# }
};
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
"org/gnome/shell" = {
disable-user-extensions = false; # enables user extensions
enabled-extensions = [
# Put UUIDs of extensions that you want to enable here.
# If the extension you want to enable is packaged in nixpkgs,
# you can easily get its UUID by accessing its extensionUuid
# field (look at the following example).
pkgs.gnomeExtensions.dash-to-dock.extensionUuid
# Alternatively, you can manually pass UUID as a string.
# "dash-to-dock@micxgx.gmail.com"
];
};
"org/gnome/shell/extensions/dash-to-dock" = {
"dock-position" = "LEFT";
"intellihide-mode" = "ALL_WINDOWS";
"show-trash" = false;
"require-pressure-to-show" = false;
"show-mounts" = false;
};
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Super>t";
command = "kgx";
name = "Open Terminal";
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Super>t";
command = "kgx";
name = "Open Terminal";
};
};
};
};

View file

@ -1,17 +1,12 @@
{
lib,
config,
osConfig,
pkgs,
inputs,
...
}: let
cfg = config.users.leyla;
in {
imports = [
../../overlays/intellij.nix
../../overlays/vscodium.nix
];
}:
{
nixpkgs = {
overlays = [
inputs.nix-vscode-extensions.overlays.default
@ -19,119 +14,177 @@ in {
};
programs = {
bash.shellAliases = lib.mkIf cfg.isFullUser {
bash.shellAliases = lib.mkIf config.isFullUser {
code = "codium";
};
steam = lib.mkIf cfg.isFullUser {
vscode = let
extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
open-vsx = extensions.open-vsx;
vscode-marketplace = extensions.vscode-marketplace;
in
{
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
package = pkgs.vscodium;
mutableExtensionsDir = false;
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
userSettings = {
"workbench.colorTheme" = "Atom One Dark";
};
extensions = with extensions.open-vsx; [
# vs code feel extensions
ms-vscode.atom-keybindings
akamud.vscode-theme-onedark
streetsidesoftware.code-spell-checker
streetsidesoftware.code-spell-checker-german
streetsidesoftware.code-spell-checker-italian
jeanp413.open-remote-ssh
# nix extensions
pinage404.nix-extension-pack
jnoortheen.nix-ide
# html extensions
formulahendry.auto-rename-tag
ms-vscode.live-server
# js extensions
dsznajder.es7-react-js-snippets
dbaeumer.vscode-eslint
standard.vscode-standard
firsttris.vscode-jest-runner
stylelint.vscode-stylelint
tauri-apps.tauri-vscode
# misc extensions
bungcip.better-toml
# the number at the start of the name here doesnt resolve nicely so we have to refernce it as a part of open-vsx directly instead of though with
open-vsx."10nates".ollama-autocoder
]
++ (with extensions.vscode-marketplace; [
# js extensions
karyfoundation.nearley
]);
};
noisetorch.enable = cfg.isFullUser;
adb.enable = cfg.isFullUser;
# steam = lib.mkIf config.isFullUser {
# enable = true;
# remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
# dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
# };
# noisetorch.enable = config.isFullUser;
# adb.enable = config.isFullUser;
};
users.users.leyla.packages = lib.mkIf (cfg.isFullUser || cfg.isThinUser) (
lib.mkMerge [
(
with pkgs; [
# comand line tools
yt-dlp
ffmpeg
imagemagick
]
)
(
lib.mkIf (!cfg.isThinUser) (
home = {
packages = lib.mkIf (config.isFullUser || config.isThinUser) (
lib.mkMerge [
(
with pkgs; [
#foss platforms
signal-desktop
bitwarden
firefox
ungoogled-chromium
libreoffice
inkscape
gimp
krita
freecad
# cura
kicad-small
makemkv
transmission_4-gtk
onionshare
easytag
# rhythmbox
(lib.mkIf cfg.hasGPU obs-studio)
# wireshark
# rpi-imager
# fritzing
# proprietary platforms
discord
obsidian
steam
(lib.mkIf cfg.hasGPU davinci-resolve)
# development tools
(vscode-with-extensions.override {
vscode = vscodium;
vscodeExtensions = with open-vsx;
[
# vs code feel extensions
ms-vscode.atom-keybindings
akamud.vscode-theme-onedark
streetsidesoftware.code-spell-checker
streetsidesoftware.code-spell-checker-german
streetsidesoftware.code-spell-checker-italian
jeanp413.open-remote-ssh
# nix extensions
pinage404.nix-extension-pack
jnoortheen.nix-ide
# html extensions
formulahendry.auto-rename-tag
ms-vscode.live-server
# js extensions
dsznajder.es7-react-js-snippets
dbaeumer.vscode-eslint
standard.vscode-standard
firsttris.vscode-jest-runner
stylelint.vscode-stylelint
tauri-apps.tauri-vscode
# misc extensions
bungcip.better-toml
open-vsx."10nates".ollama-autocoder
]
++ (with vscode-marketplace; [
# js extensions
karyfoundation.nearley
]);
})
androidStudioPackages.canary
jetbrains.idea-community
dbeaver-bin
bruno
# system tools
protonvpn-gui
openvpn
nextcloud-client
noisetorch
# hardware managment tools
(lib.mkIf config.hardware.piperMouse.enable piper)
(lib.mkIf config.hardware.openRGB.enable openrgb)
(lib.mkIf config.hardware.viaKeyboard.enable via)
# comand line tools
yt-dlp
ffmpeg
imagemagick
]
)
)
]
);
(
lib.mkIf (!config.isThinUser) (
with pkgs; [
#foss platforms
signal-desktop
bitwarden
firefox
ungoogled-chromium
libreoffice
inkscape
gimp
krita
freecad
# cura
kicad-small
makemkv
transmission_4-gtk
onionshare
easytag
# rhythmbox
(lib.mkIf config.hasGPU obs-studio)
# wireshark
# rpi-imager
# fritzing
# proprietary platforms
discord
obsidian
steam
(lib.mkIf config.hasGPU davinci-resolve)
# development tools
# (vscode-with-extensions.override {
# vscode = vscodium;
# vscodeExtensions = with open-vsx;
# [
# # vs code feel extensions
# ms-vscode.atom-keybindings
# akamud.vscode-theme-onedark
# streetsidesoftware.code-spell-checker
# streetsidesoftware.code-spell-checker-german
# streetsidesoftware.code-spell-checker-italian
# jeanp413.open-remote-ssh
# # nix extensions
# pinage404.nix-extension-pack
# jnoortheen.nix-ide
# # html extensions
# formulahendry.auto-rename-tag
# ms-vscode.live-server
# # js extensions
# dsznajder.es7-react-js-snippets
# dbaeumer.vscode-eslint
# standard.vscode-standard
# firsttris.vscode-jest-runner
# stylelint.vscode-stylelint
# tauri-apps.tauri-vscode
# # misc extensions
# bungcip.better-toml
# open-vsx."10nates".ollama-autocoder
# ]
# ++ (with vscode-marketplace; [
# # js extensions
# karyfoundation.nearley
# ]);
# })
androidStudioPackages.canary
jetbrains.idea-community
dbeaver-bin
bruno
# system tools
protonvpn-gui
openvpn
nextcloud-client
noisetorch
# hardware managment tools
(lib.mkIf osConfig.hardware.piperMouse.enable piper)
(lib.mkIf osConfig.hardware.openRGB.enable openrgb)
(lib.mkIf osConfig.hardware.viaKeyboard.enable via)
]
)
)
]
);
};
}