feat: nix with home manager

This commit is contained in:
Tine 2024-01-30 00:30:26 +01:00
parent 0739b1f21e
commit fb84096201
Signed by: mentos1386
SSH key fingerprint: SHA256:MNtTsLbihYaWF8j1fkOHfkKNlnN1JQfxEU/rBU8nCGw
7 changed files with 182 additions and 208 deletions

View file

@ -2,14 +2,4 @@
Expected configuration: Expected configuration:
* Fedora Silverblue as host * Fedora Silverblue as host
* Fedora in Toolbox as development environment * Nix with home-manager for tools and software.
```sh
# Install on host
./install.sh
# Enter the prepared fedora development environment
toolbox enter fedora
# Install in development environment
./install.sh
```

View file

@ -1,28 +0,0 @@
# This is `bat`s configuration file. Each line either contains a comment or
# a command-line option that you want to pass to `bat` by default. You can
# run `bat --help` to get a list of all possible configuration options.
# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes`
# for a list of all available themes
--theme="OneHalfLight"
# same as full, unless the output is piped.
--style="auto"
# Enable this to use italic text on the terminal. This is not supported on all
# terminal emulators (like tmux, by default):
--italic-text=always
# Uncomment the following line to disable automatic paging:
#--paging=never
# Uncomment the following line if you are using less version >= 551 and want to
# enable mouse scrolling support in `bat` when running inside tmux. This might
# disable text selection, unless you press shift.
#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse"
# Syntax mappings: map a certain filename pattern to a language.
# Example 1: use the C++ syntax for Arduino .ino files
# Example 2: Use ".gitignore"-style highlighting for ".ignore" files
#--map-syntax "*.ino:C++"
#--map-syntax ".ignore:Git Ignore"

View file

@ -1,36 +0,0 @@
[user]
name = Tine Jozelj
email = tine@tjo.space
signingkey = /home/tine/.ssh/id_ed25519.pub
[commit]
gpgsign = true
[init]
defaultBranch = main
[diff]
external = difft
[push]
autoSetupRemote = true
[pull]
ff = only
[gpg]
format = ssh
[gpg "ssh"]
allowedSignersFile = /home/tine/.ssh/allowed_signers
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[http]
postBuffer = 3221225472
[credential]
helper = libsecret

143
home.nix Normal file
View file

@ -0,0 +1,143 @@
{ config, pkgs, ... }:
{
# 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
# Nodejs
nodejs_20
# Golang
go
gopls
golangci-lint
# C & CPP
gcc
# Rust
cargo
# Shell
zsh
shfmt
];
# 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}/kitty.conf".source = kitty/kitty.conf;
"${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.bat = {
enable = true;
config = {
theme = "OneHalfLight";
italic-text = "always";
};
};
programs.starship = {
enable = true;
};
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
};
programs.zsh = {
enable = true;
history = {
size = 10000000;
save = 10000000;
ignoreAllDups = true;
path = "${config.xdg.dataHome}/zsh/history";
};
enableAutosuggestions = 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

@ -3,115 +3,45 @@
REPO_DIR=$(dirname $(readlink -f $0)) REPO_DIR=$(dirname $(readlink -f $0))
HOME_DIR=${HOME} HOME_DIR=${HOME}
echo "REPO_DIR=${REPO_DIR}"
echo "HOME_DIR=${HOME_DIR}"
workspace_backup() {
mv $HOME_DIR/$1 $HOME_DIR/$1-old 2>/dev/null || true
}
workspace_link() { workspace_link() {
mkdir -p $(dirname $HOME_DIR/$2) mkdir -p $(dirname $HOME_DIR/$2)
ln -s $REPO_DIR/$1 $HOME_DIR/$2 || true ln -s $REPO_DIR/$1 $HOME_DIR/$2 || true
} }
# On host we only install minimal dependencies.
# Mostly just GUI applications.
echo "==[host] Installing rpm-os tree packages"
rpm-ostree install --idempotent --apply-live --allow-inactive \
git git-lfs \
kitty zsh
if [ ! -n "${TOOLBOX_PATH}" ] echo "==[host] Installing flatpaks"
then flatpak install --user com.bitwarden.desktop
echo "==[host] Installing rpm-os tree packages" flatpak install --user md.obsidian.Obsidian
rpm-ostree install --idempotent --apply-live --allow-inactive \ flatpak install --user org.mozilla.firefox
git \ flatpak install --user org.mozilla.Thunderbird
git-lfs \ flatpak install --user org.gnome.Builder
neovim \ flatpak install --user com.vscodium.codium
bat \
zsh \
ripgrep \
difftastic \
nodejs
echo "==[host] Installing flatpaks" echo "==[host] Installing Nix"
flatpak install --user com.bitwarden.desktop curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
flatpak install --user md.obsidian.Obsidian
flatpak install --user org.mozilla.firefox
flatpak install --user org.mozilla.Thunderbird
echo "==[host] Preparing toolbox" echo "==[host] Installing Home Manager"
toolbox create fedora || true nix-channel --add https://nixos.org/channels/nixpkgs-unstable
toolbox enter fedora nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
else nix-channel --update
echo "==[toolbox] Installing dependencies" nix-shell '<home-manager>' -A install
sudo dnf update -y --best --allowerasing workspace_link home.nix .config/home-manager/home.nix
sudo dnf install -y \
git \
bat \
neovim python3-neovim \
zsh \
tmux \
nodejs \
ripgrep \
snapd \
cargo \
difftastic \
wl-clipboard \
ripgrep jq fd-find \
gcc g++ libstdc++-static
fi
echo "== Prepare ~/.bin" echo "==[host] Installing Home Manager packages"
mkdir -p $HOME/.bin home-manager switch
echo "== starship" echo "==[host] Use zsh as default shell"
if ! starship --help > /dev/null sudo chsh $USER --shell=/bin/zsh
then
sh -c "$(curl -fsSL https://starship.rs/install.sh)" -- --bin-dir=$HOME/.bin --yes
fi
echo "== Switching shell to ZSH" echo "==[host] Installing fonts"
sudo chsh $USER --shell=$(which zsh)
echo "== Installing fonts"
HOME_FONTS_DIR="${HOME_DIR}/.local/share/fonts" HOME_FONTS_DIR="${HOME_DIR}/.local/share/fonts"
mkdir -p ${HOME_FONTS_DIR} mkdir -p ${HOME_FONTS_DIR}
rm -rf ${HOME_FONTS_DIR}/dotfiles-fonts rm -rf ${HOME_FONTS_DIR}/dotfiles-fonts
git clone --depth 1 git@github.com:mentos1386/dotfiles-fonts.git ${HOME_FONTS_DIR}/dotfiles-fonts git clone --depth 1 git@github.com:mentos1386/dotfiles-fonts.git ${HOME_FONTS_DIR}/dotfiles-fonts
fc-cache fc-cache
echo "== Copying configuration files..."
# GIT
workspace_backup .gitconfig
workspace_link git/gitconfig .gitconfig
# SSH
workspace_backup .ssh/authorized_keys
workspace_link ssh/authorized_keys .ssh/authorized_keys
# TMUX
workspace_backup .tmux.conf
workspace_link tmux/tmux.conf .tmux.conf
# STARSHIP
workspace_backup .starship.toml
workspace_link starship/starship.toml .starship.toml
# ZSH
workspace_backup .zshrc
workspace_link zsh/zshrc .zshrc
# KITTY
workspace_backup .config/kitty/kitty.conf
workspace_link kitty/kitty.conf .config/kitty/kitty.conf
# BAT
workspace_backup .config/bat/config
workspace_link bat/config .config/bat/config
# 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'
workspace_backup .config/nvim/init.vim
workspace_link nvim/init.vim .config/nvim/init.vim
for file in nvim/lua/*
do
workspace_backup .config/nvim/lua/$(basename $file)
workspace_link nvim/lua/$(basename $file) .config/nvim/lua/$(basename $file)
done

View file

@ -1,3 +1,6 @@
# Get editor completions based on the config schema
"$schema" = 'https://starship.rs/config-schema.json'
[conda] [conda]
disabled = true disabled = true
@ -49,11 +52,16 @@ disabled = true
[git_metrics] [git_metrics]
disabled = true disabled = true
#####################
[container]
symbol = ""
style = "bold black dimmed"
format = '[$name]($style) '
[git_state] [git_state]
disabled = false disabled = false
#####################
[kubernetes] [kubernetes]
disabled = false disabled = false
symbol = "" symbol = ""
@ -67,11 +75,11 @@ format = "[$symbol$version]($style) "
[aws] [aws]
disabled = false disabled = false
symbol = " " symbol = "aws "
[git_branch] [git_branch]
disabled = false disabled = false
symbol = " " symbol = "git "
[git_commit] [git_commit]
disabled = true disabled = true
@ -79,8 +87,3 @@ commit_hash_length = 7
tag_symbol = "🔖 " tag_symbol = "🔖 "
tag_disabled = false tag_disabled = false
only_detached = false only_detached = false
[character]
success_symbol = ""
vicmd_symbol = ""

View file

@ -1,28 +0,0 @@
# History improvements
export HISTFILE=~/.zsh_history
export HISTFILESIZE=1000000000
export HISTSIZE=1000000000
export SAVEHIST=100000
setopt INC_APPEND_HISTORY
setopt HIST_IGNORE_ALL_DUPS
# Vimode
bindkey -v
bindkey -M vicmd "?" history-incremental-search-backward
bindkey -M vicmd "/" history-incremental-search-forward
# Aliases
alias gicm="git checkout main && git pull || git checkout master && git pull"
alias gic="git checkout"
alias difft="difftastic"
alias vim="nvim"
# PATH
export PATH=$PATH:$HOME/.bin:$HOME/go/bin
# ENV
export EDITOR=vim
# Starship
export STARSHIP_CONFIG=~/.starship.toml
eval "$(starship init zsh)"