GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com โ€” GitHub - Necta14/dhs: Migrate your whole working environment between operating systems: Windows to Linux, Linux to Windows, one distribution to another. One portable, encrypted package on an external drive. No cloud, no account, no AI. A single ~4 MiB Go binary.

BranchesTags
Open more actions menu

Latest commit

 

History

62 Commits
62 Commits

Folders and files

NameName
Last commit message
Last commit date
appdb
appdb
 
 
assets
assets
 
 
cmd/dhs
cmd/dhs
 
 
docs
docs
 
 
gui
gui
 
 
internal
internal
 
 
packaging
packaging
 
 
scripts
scripts
 
 
site
site
 
 
.gitignore
.gitignore
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
NOTICE
NOTICE
 
 
README.md
README.md
 
 
README.ro.md
README.ro.md
 
 
TRADEMARK.md
TRADEMARK.md
 
 
VALUES.md
VALUES.md
 
 
go.mod
go.mod
 
 
go.sum
go.sum
 
 

Repository files navigation

DHS

DHS โ€” Direct Handoff Suite

๐ŸŒ dhs-suite.vercel.app ยท ๐Ÿ‡ท๐Ÿ‡ด Versiunea รฎn romรขnฤƒ Moves your working environment from one operating system to another: Windows โ†” Linux, one Linux distribution to another, one Windows version to another. You build a portable migration package on an SSD or a USB stick, install the new system, and take your data, settings and applications back.

No cloud. No account. No network. No AI. A binary of a few megabytes.

Status: under construction. scan, backup, verify, list and restore work and are green on the test Codespaces. The app manifest, app detection and plan are not written yet. Do not use it for a real migration yet.

What it does

dhs scan --dest /run/media/you/SSD     # what would be saved, how much it takes, whether it fits
System        Arch Linux (amd64)
Roots         /home/you/Documents
              /home/you/Pictures
              โ€ฆ

To include    44.0 GiB in 68 000 files   (scanned in ~1 s)
Excluded      6.2 GiB   --all brings them back
                target                 5.9 GiB ยท build artifacts
                node_modules           237 MiB ยท dependencies, restored by npm install
Secrets       1.2 MiB in 9 files   excluded by default; --secrets includes them

Composition
                binary           20.0 GiB     46%
                incompressible   11.8 GiB     27%   stored, not compressed
                text             2.4 GiB      6%

Level         2 ยท Balanced
Estimate      27.4 GiB โ€“ 34.4 GiB   ~3 min on 8 cores
Volumes       10 ร— 3.5 GiB

Destination   /run/media/you/SSD   64.0 GiB free of 119 GiB   exFAT

              โœ“ Fits, with 29.6 GiB to spare.

The estimate comes before anything is written. If it does not fit, it tells you how much is missing and what you can do about it.

dhs backup --dest /run/media/you/SSD --name laptop --level 2   # writes migration-<date>.dhs, or the --name you give
dhs verify /run/media/you/SSD/laptop.dhs                        # every checksum, extracts nothing
dhs list   /run/media/you/SSD/laptop.dhs --all                  # what is inside
dhs restore /run/media/you/SSD/laptop.dhs --dry-run             # the plan, writes nothing
dhs restore /run/media/you/SSD/laptop.dhs                       # shows the plan, asks, then writes
dhs plan    /run/media/you/SSD/laptop.dhs                       # which applications would be installed here, and how
dhs install /run/media/you/SSD/laptop.dhs                       # shows the commands, asks once, runs them

Restoring never overwrites: an existing file stays, and the restored one lands beside it with the suffix (DHS) โ€” unless you say --conflicts skip or --conflicts overwrite. Files whose root does not exist on the new system go under ~/DHS-restored/. Every command takes --json; DHS_LANG=ro switches the messages to Romanian.

Applications. scan and backup also look at what is installed โ€” through the package managers on Linux, through Apps & features, winget, scoop and choco on Windows โ€” and match it against DHS's own application database โ€” 759 applications at the time of writing โ€” one JSON file per application, saying how each platform's managers know it, where it keeps its configuration, and what stands in for it where it does not exist. Configuration travels with the package, filed by application rather than by path, so a Firefox profile from %APPDATA% lands in ~/.mozilla/firefox on Linux. On the new system, dhs plan says what would be installed and through which manager, what is already there, what has no version for this platform and which equivalent would replace it, and what the database does not know โ€” DHS never guesses an application. dhs install runs exactly the commands plan showed, after one confirmation. The database is community-maintained; adding an application is a pull request with one file.

Install

The latest release is a pre-release. The file core is tested; the app manifest and app detection are not written yet. Do not migrate anything you care about with it yet.

On Windows, in PowerShell:

irm https://dhs-suite.vercel.app/install.ps1 | iex

It picks the build for your processor, checks it against the published SHA-256 sums, unpacks it under your own profile and puts it on your PATH. No administrator rights, nothing left running.

On Linux:

sudo apt install ./dhs_<version>_amd64.deb     # Debian, Ubuntu, Mint
sudo rpm -i dhs-<version>-1.x86_64.rpm         # Fedora, RHEL, openSUSE
makepkg -si                                    # Arch: dhs-cli and dhs-gui, from packaging/aur/
chmod +x DHS-<version>-x86_64.AppImage         # anything else, installing nothing

Check what you downloaded against the sums published beside it:

sha256sum -c SHA256SUMS --ignore-missing

How it is built

  • A single static binary, in Go. On the freshly installed destination system there is no runtime โ€” so we depend on none. 4.2 MiB on Linux, 4.5 MiB on Windows.
  • No network code. The app database is compiled into the binary.
  • A package in 3.5 GiB volumes, under the FAT32 limit of 4 GiB. If they do not fit on one medium, they are split across several.
  • Encrypted with a passphrase, by default. Secrets โ€” SSH keys, browser passwords โ€” are excluded unless you ask for them explicitly, and get a separate passphrase when you do.
  • Nothing lossy. A restored file is identical bit for bit to the original, or it is not written at all.

Building

go build -ldflags="-s -w" -o dhs ./cmd/dhs        # Linux
GOOS=windows go build -ldflags="-s -w" ./cmd/dhs  # Windows, from Linux, no extra toolchain
gofmt -l . && go vet ./...                        # static checks; the tests run on Codespaces, see docs/TESTING.md

OS-specific code lives only in files with the _linux.go and _windows.go suffix. The Linux binary contains not a single byte of the Windows code, and vice versa.

Linux GUI prototype

gui/linux/dhs-gui.py is a GTK4 + libadwaita front end (PyGObject) that drives the CLI over --json โ€” the core stays in one place, the GUI is just a shell over it.

go build -o dhs ./cmd/dhs        # the GUI needs the binary at the repo root, or DHS_BIN set
python3 gui/linux/dhs-gui.py

Documentation

docs/ARCHITECTURE.md the package format, the code structure, the CLI surface
docs/COMPRESSION.md the three levels, the estimate, the research on extreme compression
docs/LICENSE-CHOICE.md why Apache-2.0 and not a licence with an ethical clause
docs/TESTING.md the dedicated test session on GitHub Codespaces
VALUES.md what the project believes

Romanian translations of all documents live in docs/ro/.

License

Apache License 2.0. The code is free. The name is not โ€” see TRADEMARK.md.

Brand. The logo is assets/dhs.svg and the wordmark assets/dhs-wordmark.svg. They are covered by the trademark policy, not by the code licence.

About

Migrate your whole working environment between operating systems: Windows to Linux, Linux to Windows, one distribution to another. One portable, encrypted package on an external drive. No cloud, no account, no AI. A single ~4 MiB Go binary.

dhs-suite.vercel.app

Topics

backupclicross-platformdata-migrationdistro-hoppingencryptiongolanglinuxmigrationofflineprivacyrestoresysadminsystem-migrationwindows

Resources

Readme
Apache-2.0 license
Activity

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 โ€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800ร—600. No cookies required.