Skip to content
never-rainPublic

About

My dotfiles. Simple.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

351 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dotfiles

My personal dotfiles for Ubuntu 26.04 LTS, Hyprland and Zsh, with Catppuccin Mocha as the main theme. Feel free to browse and reuse individual settings.

The configuration is organised into GNU Stow packages. Each package mirrors its destination under $HOME: for example, ghostty/.config/ghostty/config becomes ~/.config/ghostty/config.

Installation

Clone the repository and install Stow:

sudo apt install git stow
git clone https://github.com/never-rain/dotfiles.git "$HOME/dotfiles"
cd "$HOME/dotfiles"

Run bash install.sh as your normal user on a Debian/Ubuntu system with apt-get and sudo; running as root is rejected. The script collects all choices first, then requests sudo authentication and any paid Griffo credentials if needed. It displays a selection summary and starts the selected steps automatically, without another confirmation. For yes/no questions, press Enter or answer j/ja (also y/yes) to proceed, or answer n/nein (also no) to skip. The Griffo variant uses a separate numbered choice.

The selected steps run in this order:

  1. Add the GitHub CLI APT repository.
  2. Set up the Griffo APT repository. Choose 1 or press Enter for the public repository, or choose 2 for the paid repository. For the paid repository, enter your username and password during the initial questions; password input is hidden. Existing credentials can be kept (Enter) or replaced (n). Running the script again with credentials switches an existing public source to the paid one.
  3. Refresh the APT package indexes and install the available packages from packages.txt, including gh and starship. Packages without an APT installation candidate are skipped; those still missing are listed at the end, before the optional Zsh start. Rerunning this step checks the full list again, so packages made available by switching to the paid Griffo repository are installed then.
  4. If selected and Zsh is installed, make it the current user's login shell with sudo chsh, using the sudo authentication from the initial questions. An account already using Zsh is skipped. The change takes effect after fully logging out and back in.
  5. Install fnm using its official installer into ~/.local/share/fnm. An existing fnm in PATH or at that location is skipped. Missing curl/unzip prerequisites are handled according to the initial choice about installing helper tools. The installer runs with --skip-shell because the Zsh dotfiles already initialise fnm; it does not append to .bashrc or .zshrc.
  6. Install pnpm using its official standalone installer, with PNPM_HOME=~/.local/share/pnpm. An existing pnpm is skipped. Missing curl, tar, gzip and openssl follow the same helper-tool choice. The installer's shell configuration is directed into a temporary file because the Zsh dotfiles already set the pnpm paths.
  7. Install Codex CLI with pnpm add --global @openai/codex, without sudo. pnpm is available immediately after step 6; no new terminal is needed. Before installing or checking Codex, the script ensures Node.js runs: it uses an existing Node or activates fnm's default version in the running Bash process. If no default is usable and Node.js setup was selected during the initial questions, it installs Node LTS with fnm and makes it the default for future terminals. Without usable Node, declining its setup or missing fnm skips the Codex step; missing pnpm also skips it. An existing codex command is checked with --version rather than reinstalled. Sign in separately when you first run codex.
  8. Install Zap for Zsh by cloning its release-v1 branch into ${XDG_DATA_HOME:-$HOME/.local/share}/zap. An existing Zap directory is skipped. This does not modify or source .zshrc, so installation also works before Stow has linked your shell configuration.
  9. Link all Stow packages into your home directory. The script lists the packages and target before asking for confirmation, then checks for conflicts with a simulation before creating links.
  10. If selected during the initial questions, start Zsh with exec zsh to load the shell settings in the current terminal. There is no further prompt at the end; if Zsh is unavailable, the start is skipped. Temporary downloads are cleaned up before replacing the installer process. This does not log you out or restart the desktop session. When launched with bash install.sh, exiting the new Zsh returns to the shell that started the installer.

When any selected step may need helper tools, the initial questions include one choice to install missing prerequisites automatically. This also covers ca-certificates for HTTPS downloads. If enabled, the script refreshes APT indexes and installs missing prerequisites before the step that needs them; otherwise, that step is skipped when prerequisites are missing. This choice is separate from installing packages.txt. APT installations use -y and noninteractive settings, preserve existing configuration files on dpkg conflicts, and allow needrestart to restart services automatically. Unavailable packages from packages.txt are skipped. Other errors still stop the script, including failed index downloads, dependency conflicts and failed package installations; completed changes are not rolled back.

Sudo authentication is refreshed in the background every 30 seconds until cleanup. Later sudo calls are noninteractive: if authentication is no longer valid, the affected system step fails instead of asking for a password again.

packages.txt contains one package name per line. Leading and trailing whitespace (including Windows line endings) is removed; blank lines and lines starting with # are ignored. The entire list is selected as one step; edit it beforehand to choose individual packages. Package availability depends on your distribution and enabled sources, including when you skip adding a repository. Repository setup itself does not refresh APT indexes; the package step and any installation of missing helper tools do.

Existing GitHub CLI entries are detected and left in place. For Griffo, the script changes URLs in standard APT .list and .sources files to the selected public or paid host, including legacy debian.griffo.io/apt entries. Other sources and existing suites and signing-key settings are preserved; changed files get a .griffo-backup copy, with the first backup preserved on later runs. An existing active source is reused instead of adding another entry. Both Griffo repositories use the same signing key. This does not verify an existing key or repair other configuration problems. The script uses sudo for package and repository changes and for chsh; Stow runs as your normal user. The shell step checks the account entry and /etc/shells, then verifies the new account entry after chsh succeeds.

Every non-hidden directory directly inside this repository is treated as a Stow package; keep unrelated directories outside the checkout. Stow always targets $HOME, regardless of where you cloned the repository, and uses its default behaviour of linking whole directories where possible. Existing correct links are kept. Conflicting files (for example an existing ~/.zshrc) are reported without being overwritten or adopted into the repository. If the simulation fails, no links are created: inspect the reported files, back up/move them yourself if appropriate, then rerun the script. You can skip the installation steps and select only Stow.

The public Griffo mirror is https://deb-free.griffo.io/apt; it needs no credentials and offers fewer packages. Some packages in packages.txt may therefore be unavailable on your distribution. The paid source is https://deb.griffo.io/apt. Its credentials are stored in plaintext in /etc/apt/auth.conf.d/deb.griffo.io.conf, owned by root:root with mode 0600. APT reads them automatically during later installs and upgrades; the script collects any required sudo authentication during the initial questions. Switching back to the public mirror leaves these credentials stored for later reuse; they only apply to the paid host. Credentials are never written into the checkout. Temporary credential files use a private directory and restrictive permissions and are removed after installation or on script exit. Empty credentials and values containing whitespace, double quotes or backslashes are rejected to preserve APT's authentication-file format. Keep downloaded migration scripts containing credentials outside Git as well.

About

My dotfiles. Simple.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages