Compare commits

...

2 commits

Author SHA1 Message Date
6a45865a78
fix: multi profile home manager 2024-03-21 20:37:29 +01:00
2c8dca6d5c
feat: personal/work specialization 2024-03-21 19:33:54 +01:00
8 changed files with 229 additions and 178 deletions

View file

@ -1,9 +1,16 @@
# My dotfiles configuration # My dotfiles configuration
Expected configuration: Expected configuration:
* Fedora Silverblue as host * Fedora Silverblue or ubuntu as host
* Nix with home-manager for tools and software. * Nix with home-manager for tools and software.
```bash
# Install GUI tools with personal specialization
./install --gui --env personal
# Skip GUI tools and only apply work specialization
./install --env work
```
## Dark and Light themes ## Dark and Light themes
Neovim and Kitty are configured to follow Gnome's dark and light theme Neovim and Kitty are configured to follow Gnome's dark and light theme

View file

@ -1,2 +1,2 @@
--italic-text='always' --italic-text='always'
--theme=OneHalfLight --theme=OneHalfDark

View file

@ -1,4 +1,4 @@
#/bin/env bash #!/bin/env bash
set -euo pipefail set -euo pipefail
REPO_DIR=$(dirname $(readlink -f $0)) REPO_DIR=$(dirname $(readlink -f $0))
@ -19,8 +19,18 @@ workspace_link() {
} }
GUI=NO GUI=NO
ENVIRONMENT=personal
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
--env)
ENVIRONMENT=$2
if [ "$ENVIRONMENT" != "personal" ] && [ "$ENVIRONMENT" != "work" ]; then
echo "Unknown environment $ENVIRONMENT"
exit 1
fi
shift # past argument
shift # past value
;;
--gui) --gui)
GUI=YES GUI=YES
shift # past argument shift # past argument
@ -35,6 +45,7 @@ while [[ $# -gt 0 ]]; do
;; ;;
esac esac
done done
echo_header "== DotFiles with GUI: $GUI and ENV: $ENVIRONMENT"
# Install basic packages. # Install basic packages.
# Most other packages are installed via Home Manager. # Most other packages are installed via Home Manager.
@ -133,11 +144,14 @@ fi
echo_header "==[host] Installing Home Manager" echo_header "==[host] Installing Home Manager"
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update nix-channel --update
nix-shell '<home-manager>' -A install NIXPKGS_ALLOW_UNFREE=1 ENVIRONMENT=$ENVIRONMENT nix-shell '<home-manager>' -A install
echo_header "==[host] Installing Home Manager packages" echo_header "==[host] Installing Home Manager packages"
workspace_link nix/home.nix .config/home-manager/home.nix workspace_link nix/home.nix .config/home-manager/home.nix
./switch.sh workspace_link nix/core.nix .config/home-manager/core.nix
workspace_link nix/personal.nix .config/home-manager/personal.nix
workspace_link nix/work.nix .config/home-manager/work.nix
NIXPKGS_ALLOW_UNFREE=1 ENVIRONMENT=$ENVIRONMENT home-manager switch
echo_header "==[host] Use zsh as default shell" echo_header "==[host] Use zsh as default shell"
sudo chsh $USER --shell=/bin/zsh sudo chsh $USER --shell=/bin/zsh
@ -145,5 +159,6 @@ sudo chsh $USER --shell=/bin/zsh
echo_header "==[host] Plug for neovim" echo_header "==[host] Plug for neovim"
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \ sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
nvim --headless +'PlugInstall --sync' +qa nvim --headless +PlugInstall +qa
nvim --headless +UpdateRemotePlugins +qa nvim --headless +PlugUpdate +qa
nvim --headless +PlugUpgrade +qa

178
nix/core.nix Normal file
View file

@ -0,0 +1,178 @@
{ lib, config, pkgs, ... }:
{
# 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.
home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
git
git-lfs
difftastic
# Tools
ripgrep
bat
tmux
jq
fd
fzf
gnumake
age
sops
jq
yq
http-prompt
watchexec
devbox
nodePackages.prettier
direnv
sqlfluff
# Nodejs
nodejs_20
# Golang
go
gopls
golangci-lint
# C & CPP
gcc
# Rust
cargo
# Shell
zsh
shfmt
# Lua
stylua
# Services
terraform
opentofu
flyctl
awscli2
# Kubernetes
k9s
kubectl
# Gnome
gnomeExtensions.pop-shell
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
"~/.tmux.conf".source = ../tmux/tmux.conf;
"~/.ssh/authorized_keys".source = ../ssh/authorized_keys;
"${config.xdg.configHome}/starship.toml".source = ../starship/starship.toml;
"${config.xdg.configHome}/bat" = {
recursive = true;
source = ../bat;
};
"${config.xdg.configHome}/kitty" = {
recursive = true;
source = ../kitty;
};
"${config.xdg.configHome}/nvim" = {
recursive = true;
source = ../nvim;
};
};
programs.gh = {
enable = true;
gitCredentialHelper.enable = true;
};
programs.git = {
enable = true;
userName = "Tine";
userEmail = "tine@tjo.space";
difftastic.enable = true;
lfs.enable = true;
includes = [
{ path = "~/.gitconfig.local"; }
];
extraConfig = {
user = {
signingkey = "~/.ssh/id_ed25519";
};
commit = {
gpgsign = true;
};
gpg = {
format = "ssh";
};
credential = {
helper = "secretservice";
};
init = {
defaultBranch = "main";
};
push = {
autoSetupRemote = true;
};
pull = {
ff = "only";
};
};
};
programs.starship = {
enable = true;
};
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
};
programs.direnv = {
enable = true;
};
programs.zsh = {
enable = true;
history = {
size = 10000000;
save = 10000000;
ignoreAllDups = true;
path = "${config.xdg.dataHome}/zsh/history";
};
autosuggestion.enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
shellAliases = {
"ll" = "ls -l";
"gicm" = "(git checkout main || git checkout master) && git pull";
"gic" = "git checkout";
"gip" = "git pull";
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

View file

@ -1,171 +1,11 @@
{ config, pkgs, ... }: { config, pkgs, home, ... }:
let
environment = builtins.getEnv "ENVIRONMENT";
in
{ {
# Home Manager needs a bit of information about you and the paths it should imports =
# manage. if environment == "work"
home.username = "tine"; then [ ./core.nix ./work.nix ]
home.homeDirectory = "/var/home/tine"; else [ ./core.nix ./personal.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.
home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
git
git-lfs
difftastic
# Tools
ripgrep
bat
tmux
jq
fd
fzf
gnumake
age
sops
jq
yq
http-prompt
watchexec
devbox
nodePackages.prettier
direnv
sqlfluff
# Nodejs
nodejs_20
# Golang
go
gopls
golangci-lint
# C & CPP
gcc
# Rust
cargo
# Shell
zsh
shfmt
# Lua
stylua
# Services
terraform
opentofu
flyctl
awscli2
# Kubernetes
k9s
kubectl
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
"~/.tmux.conf".source = ../tmux/tmux.conf;
"~/.ssh/authorized_keys".source = ../ssh/authorized_keys;
"${config.xdg.configHome}/starship.toml".source = ../starship/starship.toml;
"${config.xdg.configHome}/bat" = {
recursive = true;
source = ../bat;
};
"${config.xdg.configHome}/kitty" = {
recursive = true;
source = ../kitty;
};
"${config.xdg.configHome}/nvim" = {
recursive = true;
source = ../nvim;
};
};
programs.git = {
enable = true;
userName = "Tine";
userEmail = "tine@tjo.space";
difftastic.enable = true;
lfs.enable = true;
extraConfig = {
user = {
signingkey = "~/.ssh/id_ed25519";
};
commit = {
gpgsign = true;
};
gpg = {
format = "ssh";
};
credentials = {
helper = "libsecret";
};
init = {
defaultBranch = "main";
};
push = {
autoSetupRemote = true;
};
pull = {
ff = "only";
};
};
};
programs.starship = {
enable = true;
};
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
};
programs.direnv = {
enable = true;
};
programs.zsh = {
enable = true;
history = {
size = 10000000;
save = 10000000;
ignoreAllDups = true;
path = "${config.xdg.dataHome}/zsh/history";
};
autosuggestion.enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
shellAliases = {
"ll" = "ls -l";
"gicm" = "(git checkout main || git checkout master) && git pull";
"gic" = "git checkout";
"gip" = "git pull";
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
} }

6
nix/personal.nix Normal file
View file

@ -0,0 +1,6 @@
{ config, pkgs, ... }:
{
home.username = "tine";
home.homeDirectory = "/var/home/tine";
}

8
nix/work.nix Normal file
View file

@ -0,0 +1,8 @@
{ lib, config, pkgs, ... }:
{
home.username = "tine";
home.homeDirectory = "/home/tine";
programs.git.extraConfig.user.signingkey = lib.mkForce "~/.ssh/id_rsa";
}

View file

@ -1,4 +1 @@
#!/bin/env bash #!/bin/env bash
export NIXPKGS_ALLOW_UNFREE=1
home-manager switch