/** @babel */ const fs = require('fs-plus') const path = require('path') const hasWriteAccess = (dir) => { const testFilePath = path.join(dir, 'write.test') try { fs.writeFileSync(testFilePath, new Date().toISOString(), { flag: 'w+' }) fs.unlinkSync(testFilePath) return true } catch (err) { return false } } const getAppDirectory = () => { switch (process.platform) { case 'darwin': return path.join(process.execPath.substring(0, process.execPath.indexOf('.app')), '..') case 'linux': case 'win32': return path.join(process.execPath, '..') } } module.exports = { setAtomHome: (homePath) => { // When a read-writeable .atom folder exists above app use that const portableHomePath = path.join(getAppDirectory(), '.atom') if (fs.existsSync(portableHomePath)) { if (hasWriteAccess(portableHomePath)) { process.env.ATOM_HOME = portableHomePath } else { // A path exists so it was intended to be used but we didn't have rights, so warn. console.log(`Insufficient permission to portable Atom home "${portableHomePath}".`) } } // Check ATOM_HOME environment variable next if (process.env.ATOM_HOME !== undefined) { return } // Fall back to default .atom folder in users home folder process.env.ATOM_HOME = path.join(homePath, '.atom') }, setUserData: (app) => { const electronUserDataPath = path.join(process.env.ATOM_HOME, 'electronUserData') if (fs.existsSync(electronUserDataPath)) { if (hasWriteAccess(electronUserDataPath)) { app.setPath('userData', electronUserDataPath) } else { // A path exists so it was intended to be used but we didn't have rights, so warn. console.log(`Insufficient permission to Electron user data "${electronUserDataPath}".`) } } }, getAppDirectory: getAppDirectory }