diff --git a/README.md b/README.md index d212107..e5d30cc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ # My dotfiles configuration Expected configuration: - * Fedora Silverblue as host + * Fedora Silverblue or ubuntu as host * 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 Neovim and Kitty are configured to follow Gnome's dark and light theme diff --git a/bat/config b/bat/config index e6d5f50..db721e2 100644 --- a/bat/config +++ b/bat/config @@ -1,2 +1,2 @@ --italic-text='always' ---theme=OneHalfLight +--theme=OneHalfDark diff --git a/install.sh b/install.sh index da969c7..8ba99d9 100755 --- a/install.sh +++ b/install.sh @@ -19,8 +19,18 @@ workspace_link() { } GUI=NO +ENVIRONMENT=personal while [[ $# -gt 0 ]]; do 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=YES shift # past argument @@ -137,7 +147,7 @@ nix-shell '' -A install echo_header "==[host] Installing Home Manager packages" workspace_link nix/home.nix .config/home-manager/home.nix -./switch.sh +NIXPKGS_ALLOW_UNFREE=1 DOTFILES_ENV=$ENVIRONMENT home-manager switch echo_header "==[host] Use zsh as default shell" sudo chsh $USER --shell=/bin/zsh @@ -146,4 +156,4 @@ echo_header "==[host] Plug for neovim" 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' nvim --headless +'PlugInstall --sync' +qa -nvim --headless +UpdateRemotePlugins +qa +nvim --headless +'PlugUpdate --sync' +qa diff --git a/nix/core.nix b/nix/core.nix new file mode 100644 index 0000000..449e301 --- /dev/null +++ b/nix/core.nix @@ -0,0 +1,166 @@ +{ 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 + ]; + + # 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; +} diff --git a/nix/home.nix b/nix/home.nix index 54bff6a..95902ac 100644 --- a/nix/home.nix +++ b/nix/home.nix @@ -1,171 +1,21 @@ -{ config, pkgs, ... }: - +{ config, pkgs, home, ... }: +with import { }; +with lib; +let + environment = builtins.getEnv "DOTFILES_ENV"; +in { - # Home Manager needs a bit of information about you and the paths it should - # manage. - home.username = "tine"; - home.homeDirectory = "/var/home/tine"; - - # 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; + imports = + if environment != "" then + if environment == "personal" then + lib.info "loading PERSONAL home manager environment" + [ ./core.nix ./personal.nix ] + else + if environment == "work" then + lib.info "loading WORK home manager environment" + [ ./core.nix ./work.nix ] + else + lib.warn "DOTFILES_ENV is not one of 'personal' or 'work', ONLY core home environment will be available!" [ ] + else + lib.warn "DOTFILES_ENV not specified, ONLY core home environment will be available!" [ ]; } diff --git a/nix/personal.nix b/nix/personal.nix new file mode 100644 index 0000000..0c8fc2c --- /dev/null +++ b/nix/personal.nix @@ -0,0 +1,6 @@ +{ config, pkgs, ... }: + +{ + home.username = "tine"; + home.homeDirectory = "/var/home/tine"; +} diff --git a/nix/work.nix b/nix/work.nix new file mode 100644 index 0000000..d71ed0a --- /dev/null +++ b/nix/work.nix @@ -0,0 +1,6 @@ +{ config, pkgs, ... }: + +{ + home.username = "tine"; + home.homeDirectory = "/home/tine"; +} diff --git a/switch.sh b/switch.sh index da2f58b..a0608cc 100755 --- a/switch.sh +++ b/switch.sh @@ -1,4 +1 @@ #!/bin/env bash -export NIXPKGS_ALLOW_UNFREE=1 - -home-manager switch