A declarative NixOS system and home configuration, focused on reproducibility and maintainability.
This repository contains my personal NixOS system configuration and home environment setup, managed through Nix flakes. It represents a transition from my previous Ansible-based setup (StanAngeloff/longitude) to a fully declarative system configuration.
- GNOME Shell desktop environment with carefully chosen extensions
- Development Environment:
- NeoVim with extensive plugin configuration via nixvim
- Git with advanced configuration
- Zsh as default shell
- Podman for containerization
- Terminal Setup:
- Alacritty as the primary terminal
- tmux for session management
- Custom prompt and key bindings
- Applications:
- Brave
Firefox with privacy-focused configuration - Thunderbird
- Various GUI and CLI tools
- Key programming languages
- Brave
.
├── home/ # Home Manager configuration
│ ├── apps/ # Application-specific configurations
│ ├── essentials/ # Core user environment settings
│ ├── gnome-shell/ # GNOME Shell customization
│ └── services/ # User services (GPG, SSH, etc.)
├── machines/ # Machine-specific configurations
├── modules/ # Custom Nix modules
└── system/ # NixOS system configuration
├── apps/ # System-wide applications
└── components/ # System components (audio, networking, etc.)
- NixOS 24.11 or later
- Private fonts:
- Berkeley Mono™ (TX-02) - primary monospace font
-
Install Berkeley Mono™ and patch with Nerd Fonts:
cd ~/.local/share/fonts nix-shell -p nerd-font-patcher for f in *.ttf; do nerd-font-patcher --progressbars --mono --adjust-line-height --complete "$f" done
-
Import GPG secret keys from a backup
# Clone the repository
git clone https://github.com/StanAngeloff/nix-meridian.git
cd nix-meridian
# Build and switch to the configuration
sudo nixos-rebuild switch --flake .
# Pull latest changes
git pull
# Rebuild the system
sudo nixos-rebuild switch --flake .
- Window Manager: GNOME Shell with custom keybindings
- Theme: Dark variant with custom font configuration
- Extensions:
- Clipboard Indicator
- Window Title Is Back
- Bing Wallpaper Changer
- Various usability improvements
- Editor: Neovim with extensive plugin configuration:
- LSP support
- Treesitter
- Git integration
- Custom keybindings
- Completion & snippets
- Version Control: Git with advanced configuration
- Terminal Multiplexer: tmux with custom bindings
- Full disk encryption
- GPG & SSH agent configuration
- Secure defaults
- Dropbox installation requires manual intervention
- Some applications may need additional configuration on first run
$ DISPLAY= dropbox update
Dropbox is the easiest way to share and store your files online. Want to learn more? Head to https://www.dropbox.com/ In order to use Dropbox, you must download the proprietary daemon. Note: python3-gpg (python3-gpgme for Ubuntu 16.10 and lower) is not installed, we will not be able to verify binary signatures. [y/n] Traceback (most recent call last): File "[..]/urllib/request.py", line 1344, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "[..]/http/client.py", line 1336, in request self._send_request(method, url, body, headers, encode_chunked) File "[..]/http/client.py", line 1382, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "[..]/http/client.py", line 1331, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "[..]/http/client.py", line 1091, in _send_output self.send(msg) File "[..]/http/client.py", line 1035, in send self.connect() File "[..]/http/client.py", line 1470, in connect super().connect() File "[..]/http/client.py", line 1001, in connect self.sock = self._create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^ File "[..]/socket.py", line 841, in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "[..]/socket.py", line 976, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.gaierror: [Errno -2] Name or service not known During handling of the above exception, another exception occurred: Traceback (most recent call last): File "[..]/bin/dropbox", line 568, in download for progress, status in download.copy_data(): ^^^^^^^^^^^^^^^^^^^^ File "[..]/bin/dropbox", line 200, in download_file_chunk with closing(opener.open(url)) as f: ^^^^^^^^^^^^^^^^ File "[..]/urllib/request.py", line 515, in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ File "[..]/urllib/request.py", line 532, in _open result = self._call_chain(self.handle_open, protocol, protocol + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "[..]/urllib/request.py", line 492, in _call_chain result = func(*args) ^^^^^^^^^^^ File "[..]/urllib/request.py", line 1392, in https_open return self.do_open(http.client.HTTPSConnection, req, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "[..]/urllib/request.py", line 1347, in do_open raise URLError(err) urllib.error.URLError: Error: Trouble connecting to Dropbox servers. Maybe your internet connection is down, or you need to set your http_proxy environment variable. Starting Dropbox...Traceback (most recent call last): File "[..]/bin/dropbox", line 1587, in ret = main(sys.argv) ^^^^^^^^^^^^^^ File "[..]/bin/dropbox", line 1576, in main result = commands[argv[i]](argv[i+1:]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "[..]/bin/dropbox", line 1427, in start if not start_dropbox(): ^^^^^^^^^^^^^^^ File "[..]/bin/dropbox", line 763, in start_dropbox subprocess.Popen([DROPBOXD_PATH], preexec_fn=os.setsid, cwd=os.path.expanduser("~"), File "[..]/subprocess.py", line 1026, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "[..]/subprocess.py", line 1955, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: '/home/stan/.dropbox-hm'
This configuration draws inspiration from various sources and previous work:
- My previous Ansible-based setup (StanAngeloff/longitude)
- The NixOS & Home Manager communities
- Various dotfiles repositories and configurations from the community
MIT. Feel free to use any parts of this configuration as inspiration for your own setup.