Dotfiles repository for managing configurations across Linux and macOS machines.
flake.nix: The entry point defining Home Manager configurations and NixOS modules.config/: Home Manager configuration files organized by program or service.modules/: NixOS modules for system-level integration.pkgs/: Custom package definitions and overlays.lib/: Helper functions and utilities.local.nix: A machine-specific configuration file (gitignored) for local overrides.secrets/: Secrets managed with sops-nix.
The following hostnames are defined as machine profiles in flake.nix:
phoebe(Linux)polaris(Linux)system76(Linux)terra(Linux)theia(macOS -aarch64-darwin)ws(Linux)
Ensure Nix is installed. If not, install it with:
$ sh <(curl -L https://nixos.org/nix/install) --daemonConfigure nix, edit ~/.config/nix/nix.conf to enable flakes:
experimental-features = nix-command flakes$ git clone git@git.sr.ht:~sirn/dotfiles ~/.dotfilesFor macOS or generic Linux (non-NixOS), apply the Home Manager configuration using the machine profile name.
$ HM_PROFILE=$(hostname -s)
$ nix build --no-link path:.#homeConfigurations.$HM_PROFILE.activationPackage
$ $(nix path-info path:.#homeConfigurations.$HM_PROFILE.activationPackage)/activateOn subsequent updates, use:
$ home-manager switch --flake path:.#$HM_PROFILEThis repository provides a module to be used directly with the Home Manager NixOS module. In your NixOS configuration (configuration.nix), add:
modules = [
inputs.home-manager.nixosModules.home-manager
inputs.dotfiles.nixosModules.${hostname}
];To format all files consistently:
nix run path:.#treefmtTest a build locally without applying the configuration:
$ HM_PROFILE=$(hostname -s)
$ nix build "path:.#homeConfigurations.$HM_PROFILE.activationPackage"Create a file named local.nix to have a machine-specific configuration that is not committed to the repository.
{
imports = [
./config/programs/bitwarden.nix
./config/services/languagetool.nix
];
# When running on a non-NixOS Linux:
targets.genericLinux.enable = true;
}For NixOS, this needs to be done as part of the system's configuration.nix instead:
{
# ...
home-manager.users.sirn = {
imports = [
"${dotfiles}/config/programs/bitwarden.nix"
"${dotfiles}/config/programs/languagetool.nix"
];
};
}Application launchers are automatically generated for each Firefox profile defined in programs.firefox.profiles.
macOS: Proper .app bundles are created for each profile (e.g., "Firefox (main).app") and copied to ~/Applications/Home Manager Apps/. These appear in Spotlight, Dock, and LaunchServices. Raycast scripts are also generated as a secondary option (see Raycast section).
Linux: An XDG desktop entry named "Firefox (profile)" is automatically generated.
Generated scripts are stored at ~/.local/libexec/raycast.
To use Raycast script commands:
- Apply configuration:
home-manager switch --flake .#$HM_PROFILE - Open Raycast Preferences (⌘ + ,)
- Go to Extensions → Script Commands
- Click "Add Directories" and add
~/.local/libexec/raycast - Search "Firefox" in Raycast to launch profiles